Подтвердить что ты не робот

Что делает последовательность команд сборки "rep stos" x86?

Недавно я наткнулся на следующую последовательность команд сборки:

rep stos    dword ptr [edi]
4b9b3361

Ответ 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

Ответ 2

Empty array: 
char buff[256] = { }; 

 776      1c5:   48 8d 95 e0 fc ff ff    lea    -0x320(%rbp),%rdx
 777      1cc:   b8 00 00 00 00          mov    $0x0,%eax
 778      1d1:   b9 20 00 00 00          mov    $0x20,%ecx
 779      1d6:   48 89 d7                mov    %rdx,%rdi
 780      1d9:   f3 48 ab                **rep stos %rax,%es:(%rdi)**