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