logo

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

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

LODS

Загрузить строковый операнд

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

OF

DF

IF

TF

SF

ZF

AF

PF

CF

 

 

 

 

 

 

 

 

 

 

Код

Команда

Описание

Проц.

Пример

AC

LODS m8

Считать байт по адресу DS:(E)SI в AL

8086

lodsb

AD

LODS m16

Считать слово по адресу DS:(E)SI в AX

8086

lodsw

AD

LODS m32

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

Intel386

lodsd

AC

LODSB

Считать байт по адресу DS:(E)SI в AL

8086

lodsb

AD

LODSW

Считать байт по адресу DS:(E)SI в AX

8086

lodsw

AD

LODSD

Считать байт по адресу DS:(E)SI в EAX

Intel386

lodsd

Описание:

Команда LODS загружает в регистр AL, AX или EAX байт, слово или двойное слово из ячейки памяти, указываемой при помощи индексного регистра-источника. После загрузки индексный регистр-источник автоматически изменяется. Если флаг DF равен 0 (была выполнена команда CLD), то индекс-источник увеличивается, если флаг DF равен 1 (была выполнена команда STD), то индекс-источник уменьшается. Увеличение или уменьшение происходит на 1, если загружается байт, на 2, если загружается слово, на 4, если загружается двойное слово.

Если атрибут размера адреса команды равен 16 бит, то для индексного регистра-источника используется регистр SI, иначе, если атрибут размера адреса команды равен 32 бита, то для индексного регистра источника используется регистр ESI. Индекс источника однозначно определяется содержимым регистра SI или ESI. В качестве сегментного регистра по умолчанию используется регистр DS, но он может быть переопределен с помощю префикса замещения сегмента.

Мнемоники LODSB, LODSW и LODSD — синонимы команды LODS для байта, слова и двойного слова.

Команде LODS может предшествовать префикс REP, тем не менее, более типично использование команды LODS внутри LOOP-конструкций, потому что обычно необходима дальнейшая обработка данных в регистрах AL, AX или EAX.

Операция:

IF AddressSize = 16

  THEN Использовать SI для sourse-index;

  ELSE (* AddressSise = 32 *) Использовать ESI для sourse-index;

FI;

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

THEN

  AL = [sourse-index]; (* загрузить байт *)

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

ELSE

  IF OperandSize = 16

  THEN

     AX = [sourse-index]; (* Загрузить слово *)

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

  ELSE (* OperandSize = 32 *)

     EAX = [sourse-index]; (* Загрузить двойное слово *)

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

  FI;

FI;

sourse-index = sourse-index + IncDec;

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

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

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

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

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

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


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




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

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

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