Конспект лекций Системное программирование (семестр 2) Возле названия каждой лекции написано число пар, в течение которых она будет читаться (+ ср обозначает

Вид материалаКонспект
Схема команды
Состояние флагов после выполнения команды
См. также
Схема команды
Состояние флагов после выполнения команды
См. также
Схема команды
См. также
Подобный материал:
1   ...   19   20   21   22   23   24   25   26   ...   57

LEA


(Load Effective Address)

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

 

Схема команды: 

lea приемник,источник 

Назначение: получение эффективного адреса (смещения) источника.

Синтаксис

Алгоритм работы:

алгоритм работы команды зависит от действующего режима адресации (use16 или use32):
  • если use16, то в регистр приемник загружается 16-битное значение смещения операнда источник;
  • если use32, то в регистр приемник загружается 32-битное значение смещения операнда источник.

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:

Данная команда является альтернативой оператору ассемблера offset. В отличие от offset команда lea допускает индексацию операнда, что позволяет более гибко организовать адресацию операндов.

;загрузить в регистр bx адрес пятого

элемента массива mas

.data

mas     db      10 dup (0)

.code

...

        mov     di,4

        lea     bx,mas[di]

;или

        lea     bx,mas[4]

;или

        lea     bx,mas+4

        

См. также: уроки 5, 7, 11 и команды lea, lds, les, lss, lgs, lfs, операторы ассемблера seg и offset

LEAVE


(LEAVE from procedure)

Выход из процедуры

 

Схема команды: 

leave 

Назначение: удаление из стека области локальных (динамических) переменных, выделенной командой enter.

Синтаксис

Алгоритм работы:

команда выполняет обратные команде enter действия:
  • содержимое ebp/bp копируется в esp/sp, тем самым восстанавливается значение esp/sp, которое было до вызова данной процедуры. С другой стороны, восстановление старого значения esp/sp означает освобождение пространства в стеке, отведенного для завершающейся процедуры (локальные переменные процедуры уничтожаются);
  • из стека восстанавливается содержимое ebp/bp, которое было до входа в процедуру. После этого действия значение esp/sp также становится таким, каким оно было до входа в процедуру.

В результате этих двух действий также восстанавливается кадр стека, если он был, вызывающей программы.

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:

Команда leave не имеет операндов и выполняет обратные команде enter действия. Эта команда должна находиться непосредственно перед командой ret, которая в зависимости от соглашений конкретного языка по вызову процедур удаляет или не удаляет аргументы из стека (см. урок 14).

.286

proc1   proc

        enter   16,0

...

        leave

        ret

proc1   endp

        

См. также: урок 14 и команды enter, ret/retf

LGDT


(Load Global Descriptor Table)

Загрузка регистра глобальной дескрипторной таблицы

 

Схема команды: 

lgdt источник 

Назначение: загрузка регистра gdtr значениями базового адреса и размера глобальной дескрипторной таблицы GDT.

Синтаксис

Алгоритм работы:

команда выполняет загрузку 16 бит размера и 32 бит значения базового адреса начала таблицы GDT в памяти в системный регистр gdtr. Эта загрузка производится в соответствии с форматом этого регистра (см. урок 16). Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:

Команду lgdt применяют при подготовке к переходу в защищенный режим для загрузки системного регистра gdtr. В качестве операнда в команде указывается адрес области в формате 16+32. Младшее слово области — размер GDT, двойное слово по старшему адресу — значение базового адреса начала этой таблицы. Данные два компонента должны быть сформированы в памяти заранее.

.286

;структура для описания псевдодескриптора gdtr

point   STRUC

lim     dw      0

adr     dd      0

 ENDS

.data

point_gdt       point   

.code

...

;загружаем gdtr

        xor     eax,eax

        mov     ax,gdt_seg

        shl     eax,4

        mov     point_gdt.adr,eax

        lgdt    point_gdt

...

        

См. также: уроки 16, 17 и команду sgdt