Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
STOSB
Влияние команды на флаги и форматы команды:
|
|
|
|
|
|
|
|
|
AA |
STOS m8 |
Сохранить AL по адресу ES:(E)DI |
8086 |
stosb |
AB |
STOS m16 |
Сохранить AX по адресу ES:(E)DI |
8086 |
stosw |
AB |
STOS m32 |
Сохранить EAX по адресу ES:(E)DI |
Intel386 |
stosd |
AA |
STOSB |
Сохранить AL по адресу ES:(E)DI |
8086 |
stosb |
AB |
STOSW |
Сохранить AX по адресу ES:(E)DI |
8086 |
stosw |
AB |
STOSD |
Сохранить EAX по адресу ES:(E)DI |
Intel386 |
stosd |
Описание:
Команда STOS пересылает содержимое регистра AL, AX или EAX в байт, слово или двойное слово в памяти, адресуемое индексным регистром (E)DI в сегменте ES. В качестве индексного регистра при адресации операнда-назначения используется либо регистр DI (для атрибута размера адреса 16 бит), либо EDI (для атрибута размера адреса 32 бита). Сегментным регистром всегда является ES, замещение сегмента невозможно.
Адрес операнда-назначения определяется только содержимым индексного регистра. Текущий атрибут размера операнда и код операции определяют тип пересылаемых данных. При пересылке байта атрибут размера операнда не имеет значения, а для пересылки слова или двойного слова разрядность этого атрибута определяет операцию.
После завершения пересылки индексный регистр автоматически изменяется. Если флаг DF равен 0 (была выполнена команда CLD), то регистр увеличивается; если флаг DF равен 1 (была выполнена команда STD), то регистр уменьшается. Регистр увеличивается или уменьшается на 1 при пересылке байта, на 2 при пересылке слова, и на 4 при пересылке двойного слова.
Мнемоники STOSB, STOSW, STOSD являются синонимами STOS для байта, слова или двойного слова соответственно.
Команде STOS может предшествовать префикс REP для заполнения блока из (E)CX байт, слов или двойных слов. Обратитесь к описанию REP для более подробной информации по этой операции.
Операция:
IF AddressSize = 16
THEN Использовать DI для DestReg;
ELSE (* AddressSise = 32 *) Использовать EDI для DestReg;
FI;
IF (Команда байтового типа)
THEN
ES:[DestReg] = AL;
IF DF = 0
THEN DestReg = DestReg + 1;
ELSE DestReg = DestReg - 1;
FI;
ELSE
IF OperandSize = 16
THEN
ES:[DestReg] = AX;
IF DF = 0
THEN DestReg = DestReg + 2;
ELSE DestReg = DestReg - 2;
FI;
ELSE (* OperandSize = 32 *)
ES:[DestReg] = EAX;
IF DF = 0
THEN DestReg = DestReg + 4;
ELSE DestReg = DestReg - 4;
FI;
FI;
FI;
Особые ситуации защищенного режима:
#GP(0), если операнд-назначение находится в сегменте, запрещенном для записи, если используется некорректный эффективный адрес операнда в памяти в сегменте ES или нулевой селектор.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.
Особые ситуации режима реальной адресации:
#GP, если любая часть операнда находится вне пространства эффективных адресов в сегменте ES.
Особые ситуации режима V86:
Такие же, как и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru