Что делает последовательность команд сборки "rep stos" x86?
Недавно я наткнулся на следующую последовательность команд сборки:
rep stos dword ptr [edi]
Ответ 1
В ecx повторениях хранится содержимое eax, где edi указывает на, увеличивая или уменьшая edi (в зависимости от флага направления) на 4 байта каждый раз. Обычно это используется для операции memset.
Обычно эта инструкция просто записывается rep stosd. Опытные сборщики кодов знают все подробности, упомянутые выше, просто видя это.: -)
ETA для полноты (спасибо PhiS): каждая итерация ecx уменьшается на 1, и цикл останавливается, когда достигает нуля. Для stos единственное, что вы увидите, это то, что ecx очищается в конце. Но для scas или тому подобного, где используются префиксы repz/repnz, ecx может быть больше нуля, если операция остановлена до исчерпания ecx байтов/слов/whatevers.
Перед тем, как вы спросите, scas используется для выполнения операций strchr -type.:-P