logo

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

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

LEA

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

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

OF

DF

IF

TF

SF

ZF

AF

PF

CF

 

Код

Команда

Описание

Проц.

Пример

8D /r

LEA r16,m

Вычислить эффективный адрес операнда m и поместить результат в r16

8086

lea ax,[bx+si]

8D /r

LEA r32,m

Вычислить эффективный адрес операнда m и поместить результат в r32

Intel386

lea edx,mem

Описание:

Команда LEA вычисляет эффективный адрес (смещение) операнда-источника команды (который должен быть операндом в памяти) и сохраняет его в регистре — операнде-назначении команды. Атрибут размера операнда команды определяется выбранным регистром (16- или 32-битным). Атрибут размера адреса определяется атрибутом текущего кодового сегмента. Атрибуты размера адреса и размера операнда воздействуют на операцию, выполняемую командой LEA так, как это показано в таблице 6.65.

 

Таблица 6.65. Воздействие атрибутов размера операнда и размера адреса на действие команды LEA

Размер операнда

Размер адреса

Выполняемая операция

16

16

Вычисляется 16-битный эффективный адрес и сохраняется в 16-битном регистре-назначении

16

32

Вычисляется 32-битный эффективный адрес его младшие 16 бит сохраняются в 16-битном регистре-назначении

32

16

Вычисляется 16-битный эффективный адрес, затем знакорасширяется и сохраняется в 32-битном регистре-назначении

32

32

Вычисляется 32-битный эффективный адрес и сохраняется в 32-битном регистре-назначении

Операция:

IF OperandSize = 16 AND AddressSize = 16

THEN

  DEST = EffectiveAddress(SRC); (* 16-битный адрес *)

ELSE IF OperandSize = 16 AND AddressSize = 32 THEN

  temp = EffectiveAddress(SRC); (* 32-битный адрес *)

  DEST = temp[0..15]; (* 16-битный адрес *)

ELSE IF OperandSize = 32 AND AddressSize = 16 THEN

  temp = EffectiveAddress(SRC); (* 16-битный адрес *)

  DEST = ZeroExtend(temp); (* 32-битный адрес *)

ELSE IF OperandSize = 32 AND AddressSize = 32 THEN

  DEST = EffectiveAddress(SRC); (* 32-битный адрес *)

FI;

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

#UD, если второй операнд не является операндом в памяти.

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

#UD, если второй операнд не является операндом в памяти.

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

#UD, если второй операнд не является операндом в памяти.

Замечание:

Различные ассемблеры могут по разному интерпретировать команду в зависимости от атрибута размера и символической ссылки второго операнда.


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




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

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

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