Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

scasb и ему подобные

3.5K
11 апреля 2003 года
C-nist
3 / / 11.04.2003
Здраствуй All


Знает ли кто такую фишку?

при выполнении сабжевой команды сначала что происходит? Сравнение содержимого al\ax\eax с
es:[di] или проверка cx на 0.
На РТФМ прошу не посылать. Там я такого нюанса нигде не нашёл.
1.8K
11 апреля 2003 года
Exfector
74 / / 12.10.2002
Цитата:
Originally posted by C-nist
Здраствуй All


Знает ли кто такую фишку?

при выполнении сабжевой команды сначала что происходит? Сравнение содержимого al\ax\eax с
es:[di] или проверка cx на 0.
На РТФМ прошу не посылать. Там я такого нюанса нигде не нашёл.



scasx ; x - разрядность операнда
работает следущим образом:

;-- устанавливаем флаги
cmp xAx,[ES:(E)DI] ; в зависимости от разрядности

;-- смотрим DF
* ; -0-> наращиваем XDI
* ; -1-> екебана

Условие выхода зависит от префикса повторения (если некий вообще имееться), который в свою очередь задаёться программистом.

repe/repz (0F3h) - Find non-xAx data starting at [ES:(E)DI]

repne/repnz (0F2h) - Find xAx data starting at [ES:(E)DI]

Скомбинировав <repxx> c <loop _some_label> можно лимитировать цыкл счётчиком.

;-- eg. ---------------------
pusha
mov CX,0Bh
mov AL,30h
mov EDI,_string
clc
_label0:
scasb
loopnz _label0
..
..
popa
retn
;-- EOF ---------------------

А ето алг.

IF (byte cmparison)
THEN
temp &#8592; AL &#8722; SRC;
SetStatusFlags(temp);
THEN IF DF = 0
THEN (E)DI &#8592; (E)DI + 1;
ELSE (E)DI &#8592; (E)DI – 1;
FI;
ELSE IF (word comparison)
THEN
temp &#8592; AX &#8722; SRC;
SetStatusFlags(temp)
THEN IF DF = 0
THEN (E)DI &#8592; (E)DI + 2;
ELSE (E)DI &#8592; (E)DI – 2;
FI;
ELSE (* doubleword comparison *)
temp &#8592; EAX &#8722; SRC;
SetStatusFlags(temp)
THEN IF DF = 0
THEN (E)DI &#8592; (E)DI + 4;
ELSE (E)DI &#8592; (E)DI – 4;
FI;
FI;
FI;

1.8K
11 апреля 2003 года
Lonesome
112 / / 27.01.2003
Цитата:
Originally posted by C-nist
Здраствуй All


Знает ли кто такую фишку?

при выполнении сабжевой команды сначала что происходит? Сравнение содержимого al\ax\eax с
es:[di] или проверка cx на 0.
На РТФМ прошу не посылать. Там я такого нюанса нигде не нашёл.



Проверки cx на ноль тут вообще не происходит :)

3.5K
11 апреля 2003 года
C-nist
3 / / 11.04.2003
Цитата:
Originally posted by Lonesome


Проверки cx на ноль тут вообще не происходит :)



Да согласен я вопрос задал некорректно.
Я имел в виду repnz scasb.

Спасибо всем кто ответил. Я разобрался.
С виду мелочь, а полдня на её убил :(

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог