SCASW просмотр строки из слов

Флаги.

O D I T S Z A P C
*       * * * * *

Команда:

SCASW

Логика

CMP AX, (ES:DI)  ;только устанавливает признаки
                 if DF = 0
                     DI = DI + 2
                 else
                     DI = DI - 2 

Эта команда сравнивает AX со словом на которое указывает ES:DI, и устанавливает флаги в соответствии с результатами сравнения. Сами операнды не изменяются. После сравнения, DI увеличивается на 2, если флаг направления сброшен, или уменьшается на 2, если флаг направления установлен. Тем самым подготавливается к сравнению следующее слово.

Операнды Такт байты (слова)ОбращенияБайтыПример
нет операндов19 11SCASW
(повтор)9+19/rep1/rep 1REPNE SCASW

Примечания:
Команда SCASW полезна в тех случаях, когда требуется найти ячейку с заданным словом. Если Вы хотите сравнить две строки из памяти поэлементно, то используйте команду CMPSW.
Пример.
Пусть имеет место следующее определение :

LOST_A    DB   100 dup  (?) 

Тогда следующий пример описывает поиск символа 'A' в блоке памяти длиной 100 байтов, начинающемся с LOST_A :

                  MOV  AX,DS
                  MOV  ES,AX     		;SCASW использует ES:DI,
                                 		;поэтому копируем DS в ES
                  CLD            		;сканировать будем в прямом направлении
                  MOV  AL,'A'    		;ищем "потерянное" 'A'
                  MOV  CX,50    	 	;сканировать будем 50 слов
                                 		;(CX используется в REPNE)
                  LEA  DI,LOST_A 		;засылаем стартовый адрес в DI
           REPNE  SCASW          		;ищем 'A'
                  JE   FOUND     		;признак ZF равен 1, если мы нашли 'A'
         NOTFOUND:             		;если мы попали сюда,
                                		;то 'A' не обнаружено
                       
            FOUND:DEC  DI        		;возвращаем указатель DI
                                 		;на первое обнаруженное
                  DEC  DI        		;вхождение 'A'

После выхода из цикла REPNE SCASW, ZF=1, если вхождение 'A' было обнаружено, и ZF=0, иначе. В первом случае DI указывает на слово, следующее за словом, где находится 'A', поэтому мы производим коррекцию указателя DI с помощью двух DEC DI.

Hosted by uCoz