REP и друзья были хороши когда-то, когда процессор x86 был однопоточным промышленным CISC-процессором.
Но это изменилось.В настоящее время, когда процессор сталкивается с любой инструкцией, первое, что он делает, переводит ее в более простой формат (VLIW-подобные микрооперации) и планирует ее на будущее выполнение (это часть неупорядоченноговыполнение, часть планирования между различными логическими ядрами ЦП, это может использоваться для упрощения последовательностей записи после записи в отдельные записи и т. д.).Этот механизм хорошо работает для инструкций, которые преобразуются в несколько VLIW-подобных кодов операций, но не для машинного кода, который преобразуется в циклы.Преобразованный в цикле машинный код, вероятно, приведет к остановке конвейера выполнения.
Вместо того, чтобы тратить сотни тысяч транзисторов на создание схем ЦП для обработки циклических частей микроопераций в конвейере выполнения, они просто обрабатываютэто в каком-то дерьмовом унаследованном режиме, который останавливает конвейер и просит современных программистов писать свои собственные чертовы циклы!
Поэтому он редко используется, когда машины пишут код.Если вы встретите REP в двоичном исполняемом файле, то это, вероятно, человеческий ассемблер-маппет, который не знал лучше, или взломщик, которому действительно нужно было сохранить несколько байтов, чтобы использовать его вместо реального цикла, который написал его.
(Однако. Возьмите все, что я только что написал, с недоверием. Может быть, это больше не так. Я не на 100% в курсе внутренних дел процессоров x86, я увлекся другими увлечениями ...)