Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
LEA
Влияние команды на флаги и форматы команды:
|
|
|
|
|
|
|
|
|
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, если второй операнд не является операндом в памяти.
Замечание:
Различные ассемблеры могут по разному интерпретировать команду в зависимости от атрибута размера и символической ссылки второго операнда.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru