Я пытаюсь понять инструкцию "rep scasb byte [edi]" - PullRequest
0 голосов
/ 26 сентября 2019

В этом выражении это значение, на которое указывает edi значение, которое сравнивает побайтно со значением, на которое указывает eax?

rep scasb byte [edi]

Iжелаю хорошего дня или конца дня каждому из вас, спасибо за помощь:)

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019

См. https://www.felixcloutier.com/x86/scas:scasb:scasw:scasd и https://www.felixcloutier.com/x86/rep:repe:repz:repne:repnz.

Но обратите внимание, что rep scasb не кодируется .

С scasb,Два префикса rep: repe и repne.Байт префикса, который означает rep с stos / movs, означает repe с scas и cmps.

REPE продолжает повторяться, пока ECX! = 0 и ZF == 1.т. е. повторять, пока он равен.

repne scasb реализует memchr: найти первое вхождение (если есть) в буфере фиксированного размера.

repe scasb находит первый байт! = ALили останавливается на пределе, установленном ECX.Так что это немного похоже на strspn, но все же для буфера явного размера, а не строки C с нулевым символом в конце.

1 голос
/ 27 сентября 2019

rep означает повторение до тех пор, пока ecx не станет 0. scasb означает 'сканирование байтов', то есть: сравните al с байтом в ячейке памяти edi, приращением edi и уменьшением ecx.
В действительности это означает, что перед запуском этой строки ecx было установлено значение, определяющее, сколько раз будет работать rep, и соответствуют ли символы нулевому флагу ZF (чтотакже используется для определения равенства, следовательно, * je и jz эквивалентны).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...