logo

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

Система команд 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

STOS

Сохранить элемент строки данных

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

OF

DF

IF

TF

SF

ZF

AF

PF

CF

 

 

 

 

 

 

 

 

 

 

Код

Команда

Описание

Проц.

Пример

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) при невыровненной ссылке в память.


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




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

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

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