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

Вид материалаКонспект
Схема команды
Состояние флагов после выполнения команды
См. также
Схема команды
Состояние флагов после выполнения команды
См. также
Схема команды
Состояние флагов после выполнения команды
См. также
Подобный материал:
1   ...   35   36   37   38   39   40   41   42   ...   57

SGDT


(Store Global Descriptor Table)

Сохранение регистра глобальной дескрипторной таблицы

 

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

sgdt источник 

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

Синтаксис

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

Команда выполняет чтение содержимого системного регистра gdtr в область памяти размером 48 бит. Структурно эти 48 бит представляют 16 бит размера и 32 бита значения базового адреса начала таблицы GDT в памяти.

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

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

Применение:

Команду sgdt применяют при работе системных программ с уровнем привилегий 0, в частности, при написании различных драйверов.

.286

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

point   STRUC

lim     dw      0

adr     dd      0

        ENDS

.data

point_gdt       point   

.code

...

;читаем содержимое gdtr

        sgdt    point_gdt

...

        

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

SIDT


(Store Interrupt Descriptor Table)

Сохранение регистра глобальной дескрипторной таблицы прерываний

 

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

sidt источник 

Назначение: извлечение содержимого системного регистра idtr, содержащего значения базового адреса и размера дескрипторной таблицы прерываний IDT.

Синтаксис

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

команда sidt выполняет чтение содержимого системного регистра idtr в область памяти размером 48 бит. Структурно эти 48 бит представляют 16 бит размера и 32 бита значения базового адреса начала таблицы IDT в памяти.

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

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

Применение:

Команду sidt применяют при работе системных программ с уровнем привилегий 0, в частности, при написании различных драйверов. В качестве операнда в команде указывается адрес области в формате 16+32. Младшее слово области — размер IDT, двойное слово по старшему адресу — значение базового адреса начала этой таблицы.

.286

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

point   STRUC

lim     dw      0

adr     dd      0

        ENDS

.data

point_idt       point   

.code

...

;читаем содержимое idtr

        sidt    point_idt

...

        

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

SHL


(SHift logical Left)

Сдвиг логический операнда влево

 

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

shl операнд,количество_сдвигов 

Назначение: логический сдвиг операнда влево.

Синтаксис

Алгоритм работы:
  • сдвиг всех битов операнда влево на один разряд, при этом выдвигаемый слева бит становится значением флага переноса cf;
  • одновременно слева в операнд вдвигается нулевой бит;
  • указанные выше два действия повторяются количество раз, равное значению второго операнда.

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

11

00

OF

CF

?r



Применение:

Команда shl используется для сдвига разрядов операнда влево. Ее машинный код идентичен коду sal, поэтому вся информация, приведенная для sal, относится и к команде shl. Команда shl используется для сдвига разрядов операнда влево. Так же, как и для других сдвигов, значение второго операнда (счетчикк сдвига) ограничено диапазоном 0...31. Это объясняется тем, что микропроцессор использует только пять младших разрядов операнда количество_разрядов. Аналогично другим командам сдвига сохраняется эффект, связанный с поведением флага of, значение которого имеет смысл только в операциях сдвига на один разряд:
  • если of=1, то текущее значение флага cf и выдвигаемого слева бита операнда различны;
  • если of=0, то текущее значение флага cf и выдвигаемого слева бита операнда совпадают.

Этот эффект, как вы помните, обусловлен тем, что флаг of устанавливается в единицу всякий раз при изменении знакового разряда операнда.

Команду shl удобно использовать для умножения целочисленных операндов без знака на степени 2. Кстати сказать, это самый быстрый способ умножения;  умножить содержимое ax на 16 (2 в степени 4).

        mov     ax,17

        shl     ax,4

        

См. также: урок 9 и команды rcr, rcl, ror, rol, sar, sal, shr