
- •Процессор Intel в реальном режиме.
- •Регистры процессора.
- •Сегментные регистры.
- •Регистр флагов.
- •Способы адресации.
- •Архитектура компьютера.
- •Основные блоки процессора.
- •Организация памяти в микропроцессоре.
- •Страничная адресация. Адресация в защищенном режиме.
- •Механизм защиты.
- •Прерывания и исключения.
- •Обработчики прерываний и прерывания от внешних устройств.
- •Контроллер прерываний.
- •Прерывания в защищенном режиме.
- •Программирование на уровне портов ввода-вывода.
- •Маскирование и размаскирование.
- •Получение доступа к портам в Windows 2000/xp
- •Оперативная память.
- •Устройство и принципы функционирования озу
- •Типы микросхем памяти.
Регистр флагов.
Еще одним важным регистром, использующимся при выполнении большинства команд, является регистр флагов. EFLAGS (его младший 16 бит просто FLAGS). Каждый бит в EFLAGS является флагом, т.е. устанавливается в значение 1 при определенных условиях, его установка в 1 изменяет поведение процессора. Все флаги, расположенные в старшем слове регистра имеют отношение к управлению защищенным режимом, поэтому будем рассматривать только регистр FLAGS.
CF – флаг переноса. Устанавливается в 1, если результат предыдущей операции не уместился в приемнике и произошел перенос из старшего бита или если требуется заем при вычитании. В противном случае обращается в 0.
PF – флаг четности. Устанавливается в 1, если младший байт результата предыдущей команды содержит четное число битов равных 1 и в 0, если нечетное.
AF – флаг вспомогательного переноса. Устанавливается в 1, если в результате предыдущей операции произошел перенос или заем из 3го бита в 4ый. Используется автоматически командой 2ичной и 10чной коррекции.
ZF – флаг нуля. Устанавливается в 1, если результат предыдущей команды 0.
SF – флаг знака. Всегда равен старшему биту результата.
TF – флаг ловушки. Установка его в 1 приводит к тому, что после каждой программной команды управление передается отладчику.
IF – флаг прерываний. Сброс этого флага в 0 приводит к тому, что процессор перестает обрабатывать прерывания.
DF – флаг направления. Контролирует поведение команд обработки строк, когда установлен в 1, строки обрабатываются в сторону уменьшения адресов, когда =0 наоборот.
OF – флаг переполнения. Устанавливается в 1 если результат предыдущей арифметической операции над числами выходит за допустимые пределы.
Флаги IOPL и NT применяются в защищенном режиме.
Способы адресации.
Большинство команд процессора вызываются с аргументами, которые в ассемблере принято называть операндами. Далее рассмотрим все существующие способы задания адреса хранения операндов.
Регистровая адресация – операнды могут располагаться в любых регистрах общего назначения и сегментных регистрах. При обращении в тексте программы указывается название соответствующего регистра, например, команда, копирующая в регистр Ах содержимое регистра Bx записывается как mov ax, bx.
Непосредственная адресация – некоторые команды (все арифметические кроме деления) позволяют указывать один из операндов непосредственно в тексте программы, например, команда mov ax, 2 помещает в регистр Aх число 2.
Прямая адресация – если у операнда располагающегося в памяти известен адрес, то его можно использовать, например, если операнд находится в сегменте, на который указывает регистр ES со смещением от начала сегмента 0001, то команда mov ax, es:0001 поместит в регистр Ах значение этого операнда. В реальных программах для задания статических переменных обычно используют директивы определения данных, которые позволяют ссылаться не по адресу, а по имени. Например, если в сегменте ES была описана переменная variable, тогда команда примет вид mov ax, es:variable.
Косвенная адресация – адрес операнда можно не указывать, а хранить в любом регистре, например, следующая команда помещает в регистр Ах слово из ячейки памяти селектор сегмента которой находится в DS, а смещение в Bx. Mov ax:[bx]. Регистр DS используется по умолчанию.
Адресация по базе со сдвигом – скомбинируем 2 предыдущих метода адресации: команда mov ax, [bx+2] помещает в регистр ax слово, которое есть в сегменте, указанном в DS со смещением на 2 больше чем число из bx. Другие допустимые формы записи этого способа: mov ax, [bp]+2; mov ax, 2[bp].
В качестве базового регистра могут быть использованы все регистры общего назначения, или их младшие 16 бит
Косвенная адресация с масштабированием – этот метод адресации полностью идентичен предыдущему, однако с его помощью можно прочитать элемент массива слов, двойных слов и т.д. mov ax,[esi*2]+2. Множитель, который может быть равен 1,2,4,8 соответствует размеру элемента массива. Из регистров в этом варианте адреса можно использовать только регистры общего назначения целиком.
Адресация по базе с индексированием – в этом методе адресации смещение операнда в памяти вычисляется как сумма чисел, содержащихся в 2ух регистрах и смещение, если оно указано. Например, mov ax, [bx+si+2] – в регистр Ах помещается слово из ячейки памяти со смещением, равным сумме чисел, содержащихся в bx, si и числа 2. Можно складывать все 8 32ух битных регистров общего назначения, а из 16ти битных только bx+SI, bx+DI, BP+SI, BP+DI. Таким образом можно считать число из двумерного массива. Если массив содержит неодиночные байты, а состоит из слов или двойных слов, удобнее использовать наиболее полную форму адресацию по базе с индексированием и масштабированием
По базе с индексированием и масштабированием – самая полная схема адресации, в которую входят все случаи, рассмотренные ранее как частные. Полный адрес операнда можно записать как следующее выражение:
CS
SS
+
DS
ES
FS
GS+
Стек – это организованный специальным образом участок памяти, который используется для временного хранения переменных, передачи параметров и сохранения адреса возврата при вызове процедур и прерывания. Стек описывается регистром SS(находится в соответствующем сегменте памяти), а текущее смещение вершины стека отражено в регистре ESP, причем во время записи значение этого смещения уменьшается, т.е. стек «растет вниз» от максимально возможного адреса. При вызове подпрограмм соответствующие параметры в большинстве случаев помещаются в стек, он же используется и для хранения локальных переменных. Для адресации используется значение регистров ESP и EBP.
Архитектура, организация памяти и режимы адресации ПК на примере процессора Intel 386.