logo

Главная Система команд x86 Базовая система команд CPU SCASB

Система команд x86

Программирование - Архитектура и система команд микропроцессоров x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

SCASB

Сравнить строку байтов

Влияние команды на флаги и форматы команды:

OF

DF

IF

TF

SF

ZF

AF

PF

CF

*

 

 

 

*

*

*

*

*

 

Код

Команда

Описание

Проц.

Пример

AE

SCAS m8

Сравнить байт по адресу ES:(E)DI с AL

8086

scasb

AF

SCAS m16

Сравнить слово по адресу ES:(E)DI с AX

8086

scasw

AF

SCAS m32

Сравнить двойное слово по адресу ES:(E)DI с EAX

Intel386

scasd

AE

SCASB

Сравнить байт по адресу ES:(E)DI с AL

8086

scasb

AF

SCASW

Сравнить байт по адресу ES:(E)DI с AX

8086

scasw

AF

SCASD

Сравнить байт по адресу ES:(E)DI с EAX

Intel386

scasd

Описание:

Команда SCAS вычитает указанный операндом-назначением байт, слово или двойное слово в памяти из регистра AL, AX или EAX. Результат отбрасывается, устанавливаются только флаги. Операнд-источник адресуется регистровой парой ES:(E)DI, замещение сегмента невозможно.

Если атрибут размера адреса для этой команды равен 16 бит, то для адресации операнда-источника используется ES:DI, если атрибут размера адреса равен 32 бита, то используется ES:EDI.

Адрес сравниваемых данных определяется только содержимым индексного регистра (E)DI, но не самим операндом команды SCAS. Размер операнда команды определяется ее кодом и атрибутом размера операнда. 

После завершения сравнения индексный регистр (E)DI автоматически изменяется. Если флаг DF равен 0 (была выполнена команда CLD), то регистр увеличивается; если флаг DF равен 1 (была выполнена команда STD), то регистр уменьшается. Регистр увеличивается или уменьшается на 1 при сравнении байтов, на 2 при сравнении слов, и на 4 при сравнении двойных слов.

Мнемоники SCASB, SCASW, SCASD являются синонимами команды SCAS для байтов, слов или двойных слов соответственно.

Команде SCAS может предшествовать префикс REPE или REPNE для сравнения блока из (E)CX байт, слов или двойных слов. Обратитесь к описанию REP для более подробной информации по этой операции.

Операция:

IF AddressSize = 16

THEN (использовать DI для dest-index);

ELSE (* AddressSize = 32 *) (Использовать EDI для dest-index);

FI;

IF (Команда байтового типа)

THEN

  AL - [dest-index]; (* Сравнивает байт в AL и dest *)

  IF DF = 0 THEN IncDec = 1; ELSE IncDec = -1; FI;

ELSE

  IF OperandSize = 16

  THEN

     AX - [dest-index]; (* Сравнивает слово в AX и dest *)

     IF DF = 0 THEN IncDec = 2; ELSE IncDec = -2; FI;

  ELSE

     EAX - [dest-index]; (* Сравнивает двойное слово в EAX и dest *)

     IF DF = 0 THEN IncDec = 4; ELSE IncDec = -4; FI;

  FI;

FI;

dest-index = dest-index + IncDec;

Особые ситуации защищенного режима:

#GP(0), если используется некорректный эффективный адрес операнда в памяти в сегменте ES или нулевой селектор.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.

Особые ситуации режима реальной адресации:

#GP, если любая часть операнда находится вне пространства эффективных адресов в сегменте ES.

Особые ситуации режима V86:

Такие же, как и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память.


Входит в группу команд: Базовая система команд CPU




Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Top.Mail.Ru       Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники