-----------------------------------------------------------------|Код Команда Число Описание ||операции тактовых || циклов || ||AE SCAS m8 6 Сравнение байтов AL-ES:[DI], || обновление (E)DI ||AF SCAS m16 6 Сравнение слов AX-ES:[DI], || обновление (E)DI ||AF SCAS m32 6 Сравнение двойных слов || EAX-ES:[DI], обновление (E)DI ||AE SCASB 6 Сравнение байтов AL-ES:[DI], || обновление (E)DI ||AF SCASW 6 Сравнение слов AX-ES:[DI], || обновление (E)DI ||AF SCASD 6 Сравнение двойных слов || EAX-ES:[DI], обновление (E)DI |----------------------------------------------------------------- Работа команды IF AddressSize = 16THEN использование DI в качестве индекса-назначения;ELSE (* AddressSize = 32 *) использование EDI в качестве индекса- назначения;FI;IF байтовый тип командыTHEN AL - [индекс-назначения]; (* Сравнение байта в AL и назначения *) IF DF = 0 THEN IncDec <- 1 ELSE IncDec <- -1; FI;ELSE IF OperandSize = 16 THEN AX - [индекс-назначения]; (* Сравнение слова в AL и назначения *) IF DF = 0 THEN IncDec <- 2 ELSE IncDec <- -2; FI; ELSE (* OperandSize = 32 *) EAX - [индекс-назначения]; (* Сравнение двойного слова в EAX и назначения *) IF DF = 0 THEN IncDec <- 4 ELSE IncDec <- -4; FI; FI;FI;индекс-назначения = индекс-назначения + IncDec; ОписаниеКоманда SCAS вычитает байт или слово памяти, задаваемое регистромназначения, из регистров AL, AX или EAX. Результат отбрасывается;происходит только установка флагов. Операнд должен адресоваться изрегистра ES; переопределение сегмента не допускается.Если атрибут размера адреса команды равен 16 битам, в качестве регистраназначения используется регистр DI; в противном случае атрибут размераадреса равен 16 битам, и используется регистр EDI.Адрес сравниваемых данных памяти определяется исключительно содержимымрегистра назначения, а не операндом команды SCAS. Операнд удостоверяетадресуемость сегмента ES и определяет тип данных. Перед выполнениемкоманды SCAS следует загрузить в регистр DI или EDI правильное значениеиндекса.После того, как сравнение выполнено, регистр назначения автоматическиобновляется. Если флаг направления равен 0 (была выполнена команда CLD),происходит инкремент регистра назначения; если флаг направления равен 1(была выполнена команда STD), происходит декремент регистра назначения.При сравнении байтов инкремент или декремент равен 1; при сравнении словинкремент или декремент равен 2; При сравнении двойных слов инкремент илидекремент равен 4.Команды SCASB, SCASW и SCASD являются синонимами команды SCAS, работающимис байтом, словом и двойным словом, соответственно, не требующимиоперандов. Их проще программировать, но они не обеспечивают проверки типаили сегмента.Команде SCAS может предшествовать префикс REPE или REPNE для поиска вблоке CX или ECX байтов или слов. Подробности см. в описании команды REP. Изменяемые флагиФлаги OF, SF, ZF, AF, PF и CF устанавливаются в соответствии срезультатом. Исключения защищенного режима#GP(0) в случае недопустимого исполнительного адреса операнда памяти всегментах CS, DS, ES, FS или GS; #SS(0) в случае недопустимого адреса всегменте SS; #PF(код сбоя) в случае страничного сбоя; #AC дляневыравненной ссылки к памяти при текущем уровне привилегированности,равном 3. Исключения режима реальных адресовПрерывание 13, если какая-либо часть операнда лежит вне пространстваисполнительных адресов от 0 до 0FFFFH. Исключения виртуального режима 8086Те же исключения, что и для режима реальных адресов: #PF (код сбоя) длястраничных сбоев. #AC для невыравненной ссылки к памяти при текущем уровнепривилегированности, равном 3.