push eax - помещаю eax в стэк
xor ecx,ecx - обнуляю ecx
xor eax,eax - обнуляю eax
dec ecx - уменьшаю ecx (теперь будет максимальное значение 0xFFFFFFFF)
cld - сбрасываю флаг ZF
repne scasb - и тут у меня проблемка.. вот как я это понимаю:
*****************************************
слово, у которого я хочу посчитать кол. символов: word, то есть - 0x77,0x6F,0x72,0x64,0x00 (5 байт)
состояния регистров:
ecx - 0xFFFF FFFF
eax - 0x00
es:edi - указывает на 0x77
условия конца:
ecx=0, zf=1;
ищу нулевой байт:
1) 0x77 - 0x00 (zf!=1) ecx=0xFFFF FFFE, edi+1 (след.байт)
2) 0x6F - 0x00 (zf!=1) ecx=0xFFFF FFFD edi+1 (след.байт)
3) 0x72 - 0x00 (zf!=1) ecx=0xFFFF FFFC edi+1 (след.байт)
4) 0x64 - 0x00 (zf!=1) ecx=0xFFFF FFFB edi+1 (след.байт)
5) 0x00 - 0x00 (zf==1) ecx=0xFFFF FFFA
результат поиска:
0xFFFF FFFA
******************************************
neg ecx - будет 6 (почему 6, ведь мне нужно 4
![:(](https://forum.ee/public/style_emoticons/default/sad.gif)
pop eax - восстанавливаю значение eax
![:)](https://forum.ee/public/style_emoticons/default/smile.gif)
Сообщение изменено: adix (18 февраля 2007 - 17:24 )