Иллюстрированный самоучитель по Assembler


386+ LEAVE Выход из процедуры высокого уровня


Команда leave выполняет действия, противоположные действиям последней команды enter. Она логически уничтожает созданный командой enter стековый кадр со всеми содержащимися в нем локальными переменными и подготавливает стек к выполнению команды irct, завершающей переход в вызывающую процедуру. Команда leave не имеет параметров. Более подробное описание и пример см. в описании команды enter.

 

LES Загрузка указателя с использованием регистра ES


Команда les считывает из памяти по указанному адресу двойное слово (32 бит), содержащее указатель (полный адрес некоторой ячейки), и загружает младшую половину указателя (т.е. относительный адрес) в указанный в команде регистр, а старшую половину указателя (т.е. сегментный адрес) в регистр ES. Таким образом, команда

les reg,mem

эквивалентна следующей группе команд:

mov reg,word ptr mem

 mov ES,word ptr mem+2

В качестве первого операнда команды les указывается регистр общего назначения; в качестве второго - ячейка памяти с двухсловным содержимым. Указатель, содержащийся в этой ячейке, может быть адресом как процедуры, так и поля данных. Команда не воздействует на флаги процессора.

Пример 1


;В полях данных:

addr dd myproc ;Двухсловный адрес процедуры

;myproc

;В программном сегменте:

les SI,addr ;ES:SI ® myproc

Пример 2


;В полях данных:

mem dw 25 ;Ячейка памяти с

;произвольным содержимым

addr dd myproc ;Двухсловный адрес этой ячейки

;В программном сегменте:

mov BX,offset addr ;ВХ=адрес ячейки addr


les DX, [BX] ; DХ=смещение ячейки mem,

;ЕS=сегментный адрес ячейки mem

Пример 3


;В полях данных:

dptr dd procl ;Полный адрес процедуры prod

dd proc2 ;Полный адрес процедуры ргос2

dd ргосЗ ;Полный адрес процедуры ргосЗ

;В программном сегменте:

mov SI, 8 ;Смещение к адресу ргосЗ

les DI,dptr[SI] ;ES:DI -> ргосЗ

Допустимо использование 32-разрядного регистра-приемника и 32-битового смещения в памяти, а также дополнительных режимов адресации 32-разрядных процессоров. В защищенном режиме вместо сегментного адреса сегмента выступает его селектор.


LFS Загрузка указателя с использованием регистра FS

LGS Загрузка указателя с использованием регистра FS

LSS Загрузка указателя с использованием регистра FS


Команды считывают из памяти полный указатель, состоящий из селектора и 16-битового или 32-битового смещения, и загружают младшую половину указателя (т.е. относительный адрес) в указанный в команде регистр общего назначения, а старшую половину указателя (т.е. селектор) в сегментный регистр, указанный в мнемонике команды.

В качестве первого операнда всех перечисленных команд указывается 16- или 32-разрядный регистр общего назначения; в качестве второго - ячейка памяти с 32- или 48-битовым содержимым. Команда не воздействует на флаги процессора.

Примеры см. в описании команд Ids и les.

 




Начало  Назад  Вперед



Книжный магазин