Перейти к содержимому

Фото
- - - - -

strlen


  • Вы не можете создать новую тему
  • Please log in to reply
2 ответов в этой теме

#1 adix

adix
  • Пользователь
  • 32 сообщений

Отправлено 18 февраля 2007 - 17:22

Здрасте, нуждаюсь в маленьком пояснении этой функции:

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 :( )
pop eax - восстанавливаю значение eax :)

Сообщение изменено: adix (18 февраля 2007 - 17:24 )

  • 0

#2 sideways

sideways

    мальчик из трёх букв

  • Постоялец
  • 1 091 сообщений

Отправлено 18 февраля 2007 - 17:40

C другими строками пробовал?

http://www.int80h.org/strlen/

But in assembly language we have a faster way. Note that while we initialized ECX to 4,294,967,295, it was the same as -1. But the microprocessor decreased its value with every scan, including when it found the NUL. Thus, ECX = - strlen - 2. We could negate it, so we would get ECX = strlen + 2. We could then subtract the 2


Решение там же, чуть ниже :)
  • 0

#3 adix

adix
  • Пользователь
  • 32 сообщений

Отправлено 18 февраля 2007 - 17:44

благодарствую, щас посмотрю =)







P.S: почитал, классная статейка .. теперь разобрался =) большое спасибо

Сообщение изменено: adix (18 февраля 2007 - 17:50 )

  • 0