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

L

LAHF Загрузка флагов в регистр АН

Команда lahf копирует флаги SF, ZF, AF, PF и CF соответственно в разряды 7, 6, 4, 2 и 0 регистра АН. Значение битов 5, 3 и 1 регистра АН не определено. Команда не имеет параметров и не изменяет флаги процессора.

Команда lahf (совместно с командой sahf) дает возможность читать и изменять значения флагов процессора, в том числе флагов SF, ZF, AF и PF, которые нельзя изменить непосредственно. Однако следует иметь в виду, что команда lahf переносит в АН только младший байт регистра флагов. Поэтому нельзя изменить с ее помощью, например, состояние флага OF.

Пример 1:

lahf; Регистр АН отображает
;состояние регистра флагов
or AH,80h; Установка бита 7 = SF
sahf; Загрузка АН в регистр
;флагов, где теперь SF = 1

Пример 2:

lahf; Регистр АН отображает
;состояние регистра флагов
and AH,0BFh; Сброс бита 6 = ZF
sahf; Загрузка АН в регистр
;флагов, где теперь ZF = О

386Р+ LAR Загрузка прав доступа

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

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

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

Ids reg, mem

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

mov reg,word ptr mem
mov DS,word ptr mem+2

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

Пример 1:

; В полях данных:
addr dd myproc; Двухсловный адрес процедуры
;myproc
;В программном сегменте:
Ids SI,addr; DS:SI › myproc

Пример 2:

; В полях данных:
mem dw 25; Ячейка памяти с
; произвольным содержимым
addr dd myproc; Двухсловный адрес этой ячейки
;В программном сегменте:
mov BX,offset addr; ВХ=адрес ячейки addr
Ids DX, [BX]; DХ=смещение ячейки mem,
;DS=сегментный адрес ячейки
;mem

Пример 3:

; В полях данных:
dptr dd proc1; Полный адрес процедуры
; р r о с 1
dd proc2; Полный адрес процедуры
;рrос2
dd ргос3; Полный адрес процедуры
; р r о с 3
;В программном сегменте:
mov SI, 8; Смещение к адресу рrос3
Ids DI,dptr[SI]; DS:DI ® рrос3

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › L Допустимо использование 32-разрядного регистра-приемника и 32-битового смещения в памяти, а также дополнительных режимов адресации 32-разрядных процессоров. В защищенном режиме вместо сегментного адреса сегмента выступает его селектор.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.