тридцатидвухразрядные микропроцессоры (от МП i8386 – до Pentium IV),
шестидесятичетырехразрядные микропроцессоры (Itanium.). Но это уже принципиально новая модель архитектуры EPIC (Explicitly Parallel Instruction Computing– вычисления с явным параллелизмом команд).
Имеется еще расширение архитектуры МП, совместимых c IBM PC, до 64 бит (модели МП Hammer (К-8) корпорации АМD), но это расширение коснулось только формата данных и РОН.
Первые МП корпорация Intel выпускала, находясь в составе корпорации IBM. Программное обеспечение для этих РС производила корпорация Microsoft, также входящая в состав корпорации IBM. По этой причине, когда говорят о МП, используют термин "МП Intel архитектуры (МП IА)" или «МП, совместимые с IBM PC».
В МП этих архитектур можно выделить по режимам работы четыре программные модели:
Реальный режим шестнадцатиразрядного микропроцессора МП i8086,
Защищенный режим работы,
Реальный режим тридцатидвухразрядного микропроцессора,
Виртуальный режим 86.
Реальный режим шестнадцатиразрядногомикропроцессора МП i8086
Это основной режим 8-и 16-разрядных первых персональных ЭВМ, программно совместимых с IBM PC(режимМПIA-16).
Защищенный режим работы
Это основной 32-разрядный режим работы для 32-разрядных микропроцессоров МП IA (Intel архитектуры). В этом режиме доступны все команды и все архитектурные возможности. Используется механизм виртуальной памяти, все встроенные средства защиты, процедура переключения задач (режим МП IA-32). Дополнительными режимами для них являются реальный и виртуальный 86 (режим V86).
Реальный режим 32-разрядного микропроцессора
Это 16-разрядный режим адресации и обработки данных с прямым обращением к памяти. Режим эмулирует программную среду (модель) МП 8086 с некоторыми дополнительными возможностями, включая новые РОНы, часть новых команд и расширений как адресов, так и данных. Но в любом случае, 32-разрядное смещение в сегменте не должно превышать значения 65 535 (64 Кбайт).
При запуске или перезагрузке МП устанавливается именно реальный режим. Он используется для подготовки программной среды для работы в защищенном режиме.
Виртуальный режим 86
Это разновидность формы эмуляции модели 8086. Здесь нет прямой адресации памяти. В этом режиме применяются механизмы защиты и виртуальной памяти. Виртуальный режим 86 устанавливается из защищенного (для запуска программ, написанных для реального режима) с возможностью возврата в защищенный режим.
Вопросы для самопроверки:
1. Характеристики защищенного режима работы МП, возможности использования разрядности операндов и других средств архитектуры.
2. Характеристика реального режима работы МП, назначение режима, возможности использования разрядности операндов и других средств архитектуры.
3. Характеристика виртуального режима 86, назначение режима и возможности использования разрядности операндов и других средств архитектуры.
3.2. Программная модель 16-ти битового микропроцессораМП IA-16
3.2.1. Модель памяти
Одна из особенностей МП Intel – это использование сегментированной памяти. Полнокровное развитие персональных ЭВМ (PC) началось с появления 16-разрядных микропроцессоров. Изначально микропроцессоры предназначались для управляющих систем. Персональные ЭВМ проектировались для широкого круга пользователей как максимально дешевых индивидуальных (одна для одного) ЭВМ для эксплуатации без посредников (профессиональных программистов). Для этого они должны были быть снабжены определенными средствами программирования на основе простейших языков программирования (типа Бейсик), управляющей (операционной) программной системой и простейшими офисными системами: текстовыми редакторами, электронными таблицами и т.д.
16-разрядная адресация позволяла адресовать только 216 = 65 536 байт (64 Кбайт). Этого было достаточно для управляющих ЭВМ, но не для PC. Вероятно, по этой причине была выбрана модель структурированной математической памяти (Рис. 3.1.), состоящая из 16 сегментов по 65 536 байт (64 Кбайт). Этот прием позволил увеличить адресное пространство математической памяти в реальном режиме до 220 = 1 048 576 (1 Мбайт).
При этом первые 10 сегментов определялись как память пользователей, а остальные 6 сегментов – как системные (для операционной системы). Кроме этого, вводился еще один дополнительный сегмент (64 Кбайт) для адресации портов. Порты – это программно-доступные (адресуемые) регистры контроллеров устройств ввода-вывода. Это отдельное (дополнительное) адресное пространство процессора.
Биты в памяти, как и в регистрах, нумеруются с младших разрядов. Многобайтные операнды адресуются по номеру младшего байта. Размещение программных объектов без соблюдения правил целочисленных границ не рекомендуется
Использование сегментированной математической памяти для расширения адресного пространства имеет и отрицательные стороны. Это несоответствие адресных структур математической и физической (линейной) памяти.
При каждом обращении к физической памяти необходима процедура преобразование адреса обращения из адреса сегментированной математической памяти в адрес линейной физической памяти. Это процедура трансляции сегмента.
Процедура трансляции сегментов заключается в вычислении адреса линейной, плоской физической оперативной памяти по адресу сегмента и смещению в сегменте.
Вопросы для самопроверки:
1. Понятие сегментированной памяти.
2. Размер сегмента в МП IA-16.
3. Максимальное число сегментов в МП IA-16.
4. Процедура трансляции сегментов в МП IA-16.
5. Место хранения базовых адресов сегментов.
3.2.2. Порты ввода/вывода
МП позволяет адресовать порты в адресном пространстве портов (64 Кб) и адресном пространстве оперативной памяти.
Для адресации портов используются команды IN, INS (для ввода) и OUT, OUTS (для вывода), а для адресации ячеек памяти – любые адресные команды.
Для доступа к порту ввода/вывода, расположенному в адресном пространстве памяти могут использоваться любые работающие с памятью команды. Это дает некоторую гибкость работы с портами. Например, команда MOV позволяет пересылать данные между портом и любым регистром. Команды AND, OR, и TEST позволяют манипулировать с отдельными битами управляющих регистров портов при программировании процедур ввода/вывода. Сегменты логической памяти, порты ввода/вывода и их отображение (возможное размещение) в памяти представлены на рис. 3.1.
Если при отображении портов на адресное пространство памяти используется сегментация, то поля AVL в дескрипторах сегментов позволяют отметить сегменты как неперемещаемые и не подлежащие подкачке.
Все сегменты (включая сегменты портов) в плоской памяти задаются двумя независимыми параметрами: сегментом (базовый адрес сегмента) и адресом объекта в сегменте (смещением в сегменте).
Адресное пространство портов:
216 = 65 536 однобайтных портов с нумерацией от 0 до 65 535 или
215 = 32 768 двухбайтных портов с нумерацией от 0 до 65 534 или
214 = 16 384 четырехбайтовых портов с нумерацией от 0 до 65 532.
В командах ввода/вывода адреса портов от 1 до 255 могут задаваться прямыми адресами:
IN al, 24 – ввод байта из 24-го порта в регистр al,
IN ax, 24 – ввод слова из 24-го порта в регистр ax,
IN eax, 24 – ввод двойного слова из 24-го порта в регистр eax,
Задание в командах портов с адресами больших 255 производится с использованием регистра dx:
MOV dx, 1024 ;засылка адреса порта в dx
IN al, dx ;ввод байта из 1024-го порта в регистр al,
IN ax, 24 ;ввод слова из 1024-го порта в регистр ax,
Вопросы для самопроверки:
1. Понятие портов.
2. Методы адресации портов.
3. Адресация портов в МП IA.
4. Команды обращения к портам в МП IA-16.
2.2.3. Регистровый файл
Регистровый файл МП IA-16 содержит 14 пользовательских регистров:
регистры общего назначения (РОНы) – 8 регистров,
сегментные регистры – 4 регистра,
указатель команд – 1 регистр,
регистр состояния (флагов) – 1 регистр.
Все эти регистрыв той или иной степени доступны программам пользователей.
Регистры общего назначения
РОНы МП Intel (Рис.3.2) не являются классическими регистрами общего назначения. Они могут задаваться и явными адресами, и по умолчанию (кодом операции, постбайтом и т.д.).
C точки зрения использования регистров по умолчанию, они делятся на две группы:
регистры данных – ax, cx, dx и bx (по возрастанию адресов),
регистры адресов – sp, bp, si и di (по возрастанию адресов).
Регистр bx, хоть его и относят к группе регистров данных, является и одним из регистров адреса базы данных (для сегмента DS).
Регистр dx может использоваться в качестве адресного регистра портов в командах ввода/вывода.
Регистры cx, si и di по умолчанию используются при обработке строк.
При работе с 16-разрядными операндами и компонентами адреса используются 16-разрядные РОНы – ax, cx, dx, bx, sp, bp, siиdi (по возрастанию адресов).
При работе с байтовыми операндами используются 8-разрядные РОНы: al, cl, dl, bl, ah, ch, dhиbh (по возрастанию адресов).
15
8
7
0
ax
ah
al
Аккумулятор
cx
ch
cl
Счетчик
dx
dh
dl
Данные
bx
bh
bl
База (для DS)
sp
Указатель стека
bp
База кадра стека SS)
si
Индекс источника
di
Индекс приемника
Рис. 3.2 РОНы
Сегментные регистры и трансляция сегментов
При использовании сегментированной математической памяти необходима процедура преобразования адреса сегментированной (математической) памяти в адреса линейной физической памяти при каждом обращении к памяти.
Адрес объекта в сегментированной памяти задается двумя компонентами: базовым адресом сегмента и смещением в сегменте. В команде задается только смещение в сегменте. Базовый адрес сегмента задается содержимым одного из четырех сегментных регистров (рис. 3.3).
МП IA-16 содержали четыре 16-разрядных сегментных регистра:
ES – регистр дополнительного сегмента данных,
CS– регистр сегмента кода,
SS – регистр сегмента стека,
DS – регистр сегмента данных,
№
19
Базовые адреса сегментов
4
3
0
00
ES– Доп. сегмент данных
0000
01
CS – Сегмент кода
0000
10
SS – Сегмент стека
0000
11
DS – Сегмент данных
0000
Рис.3.3. Сегментные регистры IA-16.
Использование регистров CS, SS, DS и ES возможно по умолчанию и с использованием префикса замены сегмента. Базовые адреса сегментов используются для преобразования адреса сегментированной памяти в адрес линейной.
Емкость физической памяти в МП IA-16 позволяет разместить одновременно до 16 полных сегментов по 64 Кбайт (216 байт). Но одновременно, без изменения содержимого сегментных регистров, в реальном режиме IA-16 можно обращаться только к четырем сегментам, по числу сегментных регистров.
Обращатся к другим сегментам (кроме кодовых сегментов), размещенным в оперативной памяти можно:
при помощи загрузки базовых адресов в соответствующие сегментные регистры командами пересылки (mov),
при помощи команд загрузки сегментных регистров (LES, LDS и LSS).
Все операции со стеком ориентированы на словарную организацию стека. По этой причине адрес указателя стека и базовый адрес сегментного регистра SSдолжны быть четными.
Переходы на новые кодовые сегменты производятся командами межсегментных передач управления.
Преобразование адреса сегментированной памяти в адрес линейной (плоской) памяти производится процедурой трансляции сегмента: сложением базового адреса сегмента с адресом операнда в сегменте.
Но сегментные регистры - 16-битные, а базовые адреса должны быть 20- битными. Поэтому при использовании сегментных регистров их содержимое умножается на 16 добавлением четырех нулей после младшего разряда
Таким образом, адрес в сегменте математической памяти МП IA-16 задается тремя компонентами: B (база), X (индекс) и disp (смещение).
Для вычисления адреса обращения к физической памяти (при сегментированной структуре математической памяти) требуются, по крайней мере, две процедуры:
вычисление прямого адреса в сегменте по компонентам (В), (Х) и disp,
преобразование адреса в сегменте сегментированной памяти в адрес линейной физической памяти.
Результатом первого преобразования адреса является получение одной компоненты логического адреса – смещения в сегменте, результатом второго преобразования – получение смещения в линейной памяти.
Для уменьшения неопределенности при использовании вышеописанных смещений используют термины:
disp– для обозначения смещения в кадре сегмента,
offset – для обозначения смещения в сегменте,
линейный адрес – для обозначения адреса (смещения) в линейной (не сегментированной) памяти.
Схема вычисления смещения в сегменте (offset)по компонентам адреса, включая смещение в кадре сегмента (disp) и трансляцию сегмента (вычисление линейного адреса в несегментированной памяти) представлена на рис.3.4.
Трансляция сегментов связана с проблемой 20-й адресной шины оперативной памяти. Эта проблема заключается в следующем.
Максимальный адрес сегмента, который может быть записан с сегментный регистр (с учетом четырех нулей в младших разрядах) составляет А max = 220 -24 –1. При использовании этого адреса как базового адреса сегмента, в оставшиеся ячейки памяти можно будет записать только 16 слов. В МП с 20-разрядной адресной шиной остальные данные сегмента запишутся в ячейки оперативной памяти, начиная с нулевого адреса.
В МП IA-32 при работе в реальном режиме (эмуляции МП IA-16) приходится учитывать это явление, используя прием (заворота) 20-й шины адреса
В защищенном режиме, если включен механизм виртуальной памяти, происходит еще одно преобразование адреса – трансляция страниц.
В (МП IA-16) – трансляция страниц (виртуальная память) не реализована.
Указатель команд IP.
Это 16-ти битный регистр – счетчик, вычисляющий адрес следующей команды (в кодовом сегменте) по числу байт в текущей команде. Программе указатель команд доступен только частично по командам передачи управления. В начальное состояние IP устанавливается автоматически при включении процессора. Прямой доступ к IP по записи или чтению не предусмотрен (но возможен доступ к содержимому IP после его копирование в стеке).
Регистр состояния (флагов).
Это 16-разрядный регистр, в котором сгруппированы управляющие сигналы режимов работы основных систем процессора и флаги кодов условий для условных команд передач управления.
Флаги кодов условий передач управления:
CF – арифметический перенос в старшие разряды,
PF– четность (наличие четности кода результата),
AF – дополнительный (десятичный) перенос из младшей тетрады,
ZF – нулевой результат,
SF – знак результата (для дополнительного кода),
OF – переполнение,
TF– трассировка (прерывание после выполнения каждой команды для работы в режиме отладки программы),
IF – разрешение прерывания,
DF – направление обработки строк.
Вопросы для самопроверки:
1. Основные группы пользовательских регистров.
2. Группа регистров данных в составе РОН МП IA-16.
3. Группа регистров адресов в составе РОН МП IA-16.
4. Предназначение регистра IP в МП IA-16.
5. Предназначение регистра F (флагов) в МП IA-16.
6. Основные биты кода условий передачи управления в регистра F (флагов).
7. Назначение сегментных регистров в МП IA-16.
8. Число сегментных регистров в МП IA-16.
9. Спецификации сегментных регистров в МП IA-16.
10. Команды загрузки сегментных регистров в МП IA-16.
11. Причины использования задания адреса в сегменте тремя компонентам.
12. Компоненты адреса, используемые при задании адресов объектов в сегменте памяти.
13. Компонента disp при задании адреса в МП IA.
14. Компонента offset при задании адреса в МП IA.
15. Термин "линейный адрес" при задании адреса в МП IA.
16. Процедура трансляции сегмента при обращении к памяти в МП IA-16.
3.2.4. Структура команд.
Имеется две формы представления машинных команд:
на языке программирования машинного уровня (ассемблере),
на аппаратном уровне с использованием битовых кодов. Перекодировку команд производит ассемблер совместно с рядом программ операционной системы.
Команды на языке ассемблера.
На языке ассемблера команды содержат символьный код операции и один или два адреса. Команды могут быть одноадресными или двухадресными. Первый адрес в команде – адрес приемника, второй – источника. Оба адреса могут быть адресами РОНов, Адресом оперативной памяти может быть только один.
Исключением являются:
команды обработки строк (адреса приемника и источника задаются парами регистров – сегментный регистр:индексный регистр)
команды работы со стеком, которые перемещают данные из памяти в стек, который также находится в памяти.
Адрес оперативной памяти может задаваться прямым адресом (offset) или компонентами (D, X, disp).
Примеры команд на языке ассемблера:
1. mov ax, bx
;копирование в ax содержимого bx,
2.mov ax,[365]
;копирование в ax содержимого ячейки памяти по адресу 356,
3.mov ax, СS:[bх +356]
;копирование в ax содержимого ячейки памяти в сегменте CS по адресу, равному сумме содержимого регистра bx и смещения – 356,
4.mov ax, [bp +si+356]
;копирование в ax содержимого ячейки памяти по адресу, равному сумме содержимого регистров bp, si и смещения 356,
5.mov ax, byte ptr z
; копирование в ax содержимого ячейки памяти по адресу z (конструкция byte ptr z уточняет, что адрес z является адресом одного байта, а не слова).
Машинная кодировка команд IA – 16.
МП IA-16 используют команды переменного формата от 1 до 7 байт. Кодировка команд производилась с учетом частоты использования команды в типовых программах.
Команда может иметь (рис. 3.5.):
возможно, префикс (1 или 2 однобайтных префикса),
код операции (1 байт),
возможно, постбайт (1байт),
возможно, байты смещения – disp (1 или 2 байта),
возможно, байты непосредственного операнда (1 или 2 байта).
0, 1 или 2
байта
1 байт
0 или 1 байт
0,1 или 2
байта
0,1 или 2
байта
префикс
код
операции
постбайт
байты
смещения
непосредственный операнд
Рис.3.5. Структура команд МП IA -16.
Элементы команды:
Префикс
Это необязательный байт, модифицирующий процедуру выполнения команды.
МП IA – 16 предусматривает использование двух префиксов:
повторения,
замены сегмента памяти, используемого по умолчанию (только для данной команды).
Префикс повторения
ВМП IA–16 строковые команды обрабатывают один элемент строки за один раз. Обработка всей строки обеспечивается префиксами повторения. Один префикс задает повторение действия над следующими элементами до тех пор, пока не будут обработаны все элементы строки, другие – до тех пор, пока выполняется заданное условие. Количество повторений указывается в регистре cx,
Префикс замены сегмента памяти
В МП IA-16 предусмотрены 4 сегментных регистра. Использование любого из них может быть задано по умолчанию или явно, кроме сегмента команд.
По умолчанию используются сегменты:
CS– для выборки команд по IP (счетчику команд),
DS – для выборки данных, адреса которых используют базу bx,
SS – для выборки данных, адреса которых используют базу bp,
ES– в командах обработки строк.
Префикс замены сегмента применяется в тех случаях, когда данные находятся не в том сегменте, который принимается по умолчанию. Например:
mov ax, CS:[bх +356]
; база bх указывает на использование сегмента данных DS, но запись CS:явно указывает на работу с данными, помещенными в кодовый сегмент, поэтому в машинной команде появится префикс замены сегмента DS на сегмент CS
mov ax, ma [bх +356]
; ma это метка, значением ее является адрес ячейки памяти. Если эта ячейка расположена не в сегменте DS, то в машинной команде появится префикс замены сегмента
Код операции
Это единственный из обязательных элементовкоманды (1 байт), задающий операцию. Возможны операции, заданные одним кодом операции. Это одноадресные команды, операнд для которых задается по умолчанию. Поле кода операции может содержать собственно код операции и от одного до 3 специальных битов:
w – размер операнда (7-й бит), при w = 0 размер операнда – байт, при w = 1 размер операнда – слово.
d– направление передачи результата для двухместной команды (6-й бит);
1. при d= 1 – адресом приемника является РОН, заданный полем reg постбайта,
2. при d = 0 – адресом приемника является адрес памяти;
3. в одноместной команде используется только источник и 6-й бит байта кода операции (s=1) определяет автоматическое расширение байта данных до размера слова.
Возможен однобайтовой вариант одноместной команды, в котором адрес данных (номер РОНа) размещается в трех младших разрядах кода операции.
Постбайт
Это необязательный элемент команды. Задает один (для одноадресной команды) или два адреса операндов, один из которых используется и как адрес результата.
7
6
5
3
2
0
md
reg
r/m
Рис. 3.6. Структура постбайта
Постбайт (рис. 3.6) содержит 3 поля:
md – поле режима адресации,
reg – поле адреса регистра,
r/m – поле адреса второго регистра или кода, определяющего способ вычисления адреса ячейки памяти.
Поле md. Это поле режима адресации.
Задает тип команды:
регистр/регистр(r/r);
регистр/память(r/m).
Для команд типа регистр-память задает процедуру вычисления адреса операнда в памяти:
md =00 – режим адресации r/m без использования смещения,
md=01 – режим адресации r/m с использованием смещения 1 байт),
md =10 – режим адресации r/m с использованием смещения 2 байт),
md =11 – режим адресации r/r.
Задании md ¹ 11 определяет команду типа регистр-память. В этом случае поле r/r содержит номер РОНа, в котором находится один из операндов, а поле r/m, – номер алгоритма вычисления адреса памяти, по которому хранится второго операнда.
Исключение:
В адресации операндов, в качестве исключения, имеется возможность задавать адрес операнда в памяти прямым 16-ти разрядным адресом. Признаком прямой адресации является комбинация значений md = 00 и r/m=110 (в табл.1 выделены жирным шрифтом).
Количество байтов смещения disp, расположенных после постбайта, определяется по полю постбайта – md.
В табл.1. представлены все формулы для вычисления адресов РОН и ячеек памяти в зависимости от значений полей постбайта: md, reg, r/m.
На рис. 3.7 представлена структура команд МП Intel в реальном режиме и схемы вычисления адресов операндов.
Таблица 1.Постбайтовые режимы адресации МП IA-16
Поле
r/m
Поле md
00
01
10
11
w = 0
w = 1
000
DS:[bx + si]
DS:[bx + si + disp(1 байт)]
DS:[bx + si + disp(2 байт)]
al
ax
001
DS:[bx + di]
DS:[bx + di + disp(1 байт)]
DS:[bx + di + disp(2 байт)]
cl
cx
010
SS:[bp + si]
SS:[bp + si + disp(1 байт)]
SS:[bp + si + disp(2 байт)]
dl
dx
011
SS:[bp + di]
SS:[bp + di + disp(1 байт)]
SS:[bp + di + disp(2 байт)]
bl
bx
100
DS:[si]
DS:[si + disp(1 байт)]
DS:[si + disp(2 байт)]
ah
si
101
DS:[di]
DS [di + disp(1 байт)]
DS [di + disp(2 байт)]
ch
di
110
DS:[disp-2 байта]
SS:[bp + disp(1 байт)]
SS:[bp + disp(2 байт)]
dh
bp
111
DS:[bx]
DS [bx + disp(1 байт)]
DS [bx + disp(2 байт)]
bh
bx
Структура команд МП Intel в реальном режиме.
0,1 байт
1 байт
0,1 байт
0,1,2 байта
0,1,2 байта
Префикс
Код операции.
Постбайт
Disp
# d
md
r
r/M
2 бита
3 бита
3 бита
если
r/M ≤ 11,
то – команда типа r/M; базовая индексная адресация; 1-й операнд находится в регистре, указанном полем r, адрес M
вычисляется как(B)+(X)+ #d16, где В и Х задаются кодом поля r/M.
при:
00 ü
Disp– отсутствует
01 ý
Disp = 1 байт
10 þ
Disp = 2 байта
При
11
Команда типа r/r, операнды находятся в регистрах,
указанными полями r и r/M.
Вариант относительно-индексной адресации памяти
если
r/M ≥ 100,
то команда типа r/M, первый операнд находится в регистре, указанном полем r, адрес M вычисляется как(B)+ Disp, где B– задается кодом поля r/Mпостбайта.
при
00 ü
Disp – отсутствует
01 ý
Disp= 1 байт
10 þ
Disp= 2 байта
Исключение: при md=00 и r/M = 110, адрес задается прямым 16-ти битным смещением (#d16).
Выбор сегмента: при указании в качестве компоненты адреса – (bp), используется сегмент стека (SS), иначе – сегмент данных (DS)
Рис.3.7. Структура команд МП Intel в реальном режиме и схемы вычисления адресов операндов.
Вопросы для самопроверки:
1. Структура команд в МП IA-16.
2. Назначение префикса в командах МП IA-16.
3. Назначение постбайта в командах МП IA-16.
4. Поля постбайта в командах МП IA-16.
5. Поля постбайта в командах МП IA-16.
6. Тип сегмента используемого по умолчанию при выборке команд в МП IA-16.
7. Тип сегмента используемого по умолчанию при выборке операнда в МП IA-16.
8. Тип сегмента используемого по умолчанию при работе со стеком в МП IA-16.
9. Тип сегмента используемого по умолчанию при работе с командами обработки строк в МП IA-1.
10. Способы замены сегментов, используемых по умолчанию.
11. Назначение постбайта в МП IA-16.
12. Основные поля постбайта в МП IA-16.
13. Назначение поля md постбайта в МП IA-16.
14. Назначение поля reg постбайта в МП IA-16.
3.3. Программная модель 32-х битового микропроцессора
3.3.1. Основные особенности организации
В программной модели МП IA-32 от МП IA-16 с поправками на разрядность ширины обработки данных сохранились следующие решения:
модель сегментированной математической памяти,
задание адресов в сегменте компонентами, но с расширением возможностей по заданию адреса в массиве (использование возможности индексирования элементов массива в произвольном порядке),
выделение адресного пространства для портов (программно-доступных регистров контроллеров устройств ввода-вывода).
Основной особенностью программной модели МП IA-32, кроме расширения разрядности адресов данных и команд, индексирования элементов массива в произвольном порядке и многократного расширения адресного пространства математической памяти, является встроенная аппаратная система защиты программ от взаимных помех.
2. дескрипторов шлюзов (точек входов в программные сегменты).
введение системных и пользовательских таблиц дескрипторов,
введение новой процедуры программных переходов "переключения задач".
введение набора системных регистров дескрипторов.
Дескрипторы сегментов. В реальных режимах МП IA-16 и МП IA-32, сегментные регистры содержат непосредственно базовый адрес сегмента.
В защищенном режиме МП IA-32 задание сегментов производится с использованием специальных программных объектов – дескрипторов сегментов.
Дескриптор сегмента (рис.3.8) является 64-х битовым поисковым образом сегментов. Дескриптор сегмента определяет тип сегмента, расположение в памяти (базовый адрес и размер), права доступа и использования.
Основными полями дескрипторов являются:
базовый адрес сегмента (32 бита),
размер сегмента (20 бит),
поле атрибутов (12 бита).
Поле атрибутов содержит:
бит дробности G (Granularity – 4 разряда),
тип сегмента,
настройки прав доступа и использования (8 разрядов).
Впервые дескрипторы появились в промежуточной 16-битной по данным и 24-битной по адресу модели МП 80286 для организации защищенного режима. В МП 80386, с переходом на полную 32-разрядную архитектуру пришлось изменять разрядность полей сегментных регистров. Но в целях программной совместимости моделей, расположение полей дескрипторов МП 80286 оставили без изменений и в расширенных дескрипторах МП 386 и старше. В результате биты расширений дескрипторов в МП 386 оказались в адресах, несмежных с адресами основных полей.
На рис.2.6. биты полей дескрипторов для наглядности сгруппированы в отдельные массивы смежных адресов.
63
32
31
12
11
8
7
0
Базовый адрес сегмента (B)
Предел (L)
Атрибуты
AR
G
G
P
DPL
S
Type(4бита)
Рис.3.8. Структура дескриптора сегмента
Базовый адрес сегмента (32 бита) определяет адрес сегмента в линейной памяти (оперативной или внешней). Используется в процедурах трансляции сегмента. Для указания о присутствии сегмента в оперативной памяти используется бит P – Presentв поле прав доступа AR.
ПределL определяет размер сегмента. Используется для обнаружения обращений к адресам за пределами сегмента, при каждом обращении к сегменту по записи или чтению. Значение предела может быть задано в байтах и в страницах (по 4 Кбайта) битом дробности G (Granularity) в поле атрибутов.
Поле атрибутовсодержит бит дробности G, байт прав доступа AR. (тип сегмента, права доступа и использования).
Поле типа сегмента Typeв полеAR – определяет тип сегмента.По типу сегменты делятся на системные и несистемные. К несистемным сегментам относятся сегменты, программно доступные программам пользователей. Это кодовые сегменты (программы), сегменты данных и стеков.
По возможностям использования сегменты характеризуются так:
CS – исполняемые и читаемые безусловно, записываемые – по биту разрешения,
SS – неисполняемые, читаемые и записываемые безусловно,
ES, DS, FS, GS – неисполняемые и читаемые безусловно, записываемые – по биту разрешения,
Дескрипторы шлюзов программ.
Дескрипторы шлюзов программ. Шлюзы (Gate) – это точки входа в программы (программный сегмент). В МП IA-32 вызов процедур операционной системы (передача управления с повышением уровня привилегий) производится только с использованием шлюзов и только по командам передачи управления с возможностью возврата (запрещено использование команды Jmp).
Программисту известен только символьный адрес программы (адрес дескриптора сегмента). Этот прием предотвращает указание некорректного входа в программу, например, указание не на первый байт команды, что может привести к неуправляемой работе процессора.
Но все это справедливо только при использовании процедур передачи управления, но не процедур переключения задач.
Структура дескриптора шлюза программных сегментов представлена на рис. 3.9.
Дескриптор шлюза программных сегментов содержит три поля:
селектора сегмента,
смещения в сегменте (offset),
атрибутов.
63
48
47
16
15
0
Селектор
Offset (Смещение в сегменте)
Атрибуты
Индекс(13 бит)
G/L
RPL(2 бита)
Счетчик двойных слов
P
DPL
0
Tipe(4бита)
Рис.3.9. Структура дескриптора шлюза программных сегментов.
Селектор сегмента.
Все дескрипторы, кроме дескрипторов прерываний, (сегментов, задач, шлюзов сегментов или задач) хранятся в оперативной памяти в специальных таблицах GDT (глобальная таблица дескрипторов) и LDT (локальная таблица дескрипторов).
В глобальной таблице дескрипторов хранятся все сегменты операционной системы.
Локальные таблицы дескрипторов формируются на каждую задачу (программу, находящуюся в стадии исполнения, возможно, с разделением по времени). Но в каждый момент времени активны только две таблицы: GDT и одна из LDT. Обращение к таблицам производится по селектору сегмента.
Селектор сегмента определяет дескриптор используемого кодового сегмента, т.е. целевой сегмент. Селектор сегмента содержит следующие поля:
индекс (13 бит) – используется как адрес в таблице целевого дескриптора (указателя "целевой" строки таблицы дескрипторов),
бит типа "целевой" таблицы дескрипторов; при нулевом значении G/L – выбирается GDT, иначе LDT,
поле уровня привилегии запроса (в рассматриваемой конструкции не используется).
Бит G/Lселектора допускает возможность использования по обращению к дескрипторам задач как задачам операционной системы, так и пользовательским. Но это выборочный доступ только к определенным "сервисным процедурам", предоставление которых пользовательским задачам является одной из главных функций ОС. Контроль корректности использования сервисных процедур задачами пользователей осуществляется механизмом проверок обращений по уровням привилегий.
Смещение в сегменте (offset)
Смещение в сегментев программных сегментах определяет точку входа в сегмент. (По селектору дескриптора шлюза определяется целевой кодовый сегмент, а по смещению в сегменте – адрес первой команды).
Атрибуты сегмента
Атрибуты сегмента определяют тип сегмента, права использования, доступность программной процедуры по уровням привилегий, а также задают размер передаваемых параметров в процедуру через стек.
Процедура переключения задач
Межсегментные переключения задач – это переходы с использованием механизма переключения задач. Возможны две модели переключения задач:
прямое переключение задач;
переключение задач с использованием шлюзов (косвенное переключение задач).
Модели переключения задач могут использоваться
для переключения независимых задач при параллельном их выполнении в режиме разделения времени;
вызова процедур:
вызова программ обработки прерываний и ловушек;
возврата из программ обработки прерываний и ловушек.
Переключение задач при параллельном выполнении программ в режиме разделения времени.
Переключение задач производится с использованием специальных сегментов состояния задач (TSS). Это системные сегменты, предназначенные для копирования основных программно-доступных регистров процессора, хранящих "контекст" программы. Иногда переключение задач называют сменой контекста. В многозадачном режиме работы в стадии выполнения могут находиться несколько задач. Для каждой из них создается сегмент состояния задачи – TSS. Выполнение этих задач может производиться одним процессором в режиме разделения времени. Основным назначением механизма переключения задач является организация очередных переходов между выполняемыми программами.
Переключение программ может производиться командами JMP и CALL типа FAR (межсегментные переходы), командами вызова прерываний, например, INT n, или командой IRET. Кроме этого, переключения задач могут инициироваться прерываниями и ловушками.
В защищенном режиме команды межсегментных переходов содержат полный указатель CS (сегмента) и IP (адрес команды в сегменте – offset). Указатель CS, в свою очередь, может указывать на:
дескриптор сегмента,
шлюз дескриптора сегмента,
дескриптор TSS,
дескриптор шлюза TSS.
Все зависит от выбора стратегии разработчиками ОС.
В первых двух случаях реализуется процедура передачи управления:
прямой передачи управления (без изменения уровней привилегий) или
через шлюз (с возможностью увеличения уровня привилегий, но по командам, предусматривающим возвращение, – например Call).
В двух последних случаях реализуется процедура переключения задач:
прямого переключения задач, если селектор указывает на дескриптор задачи (используется при переключениях задач на одном уровне привилегий),
косвенного переключения задач, если селектор указывает на шлюз задачи (используется при переключениях с изменениями уровня привилегий).
При косвенном переключении задач производится дополнительное обращение к таблице дескрипторов GDT. Обращение производится по значению указанного в шлюзе селектора дескриптора целевого кодового сегмента.
Сегмент состояния задачи (TSS) является сегментом, но системным. Дескриптор TSS по структуре совпадает с дескриптором программных сегментов (см. рис. 3.8.), в поле атрибутов которых отмечено, что они системные.
Структура дескриптора шлюза TSSсовпадает со структурой дескриптора шлюза программных сегментов (см. рис.3.9). Отличие заключаются в содержимом поля атрибутов и в том, что не используется поле Offset(Смещение в сегменте).
Процедура переключения задач состоит из 3-х пересылок (см. рис.3.10):
1. сохранение содержимого всех программно-доступных регистров процессора в сегменте TSS; базовый адрес сегмента TSS берется из системного регистра TR,
2. адрес сегмента TSS новой задачи по селектору из прямой команды перехода или по содержимому поля CS дескриптора шлюза задачи переписывается в системный регистр TR.
3. содержимое TSS новой задачи переписывается в регистры процессора, и процессор начинает выполнение программы - цели.
Длительность процедуры переключения задач – 200 тактов.
С точки зрения взаимодействия программ, переключение программ равнозначно завершению одной программы с сохранением всего контекста программы и запуску следующей программы. При переключении задач запоминается текущее значение указателя команд IP. Поэтому при ее повторном запуске задача запускается не с начальной точки, а продолжает выполнение с прерванной точки.
До аппаратной реализации этой процедуры, например в реальном режиме работы, переключение задач (в многозадачных режимах работы) производилось чисто программными способами, что уменьшало производительность процессора.
Обработка ловушек
Обработка ловушек– это обработка события, непосредственно связанная с выполнением текущей программы. Следовательно, обработчик прерывания должен попадать в контекст выполняемой программы. В общем случае, смена контекста здесь противопоказана. Но в некоторых случаях механизм переключения задач и при обработке ловушек может быть полезен.
Прерывания
Прерыванияслужат для обработки некоторого внешнего события, явно не связанного с прерываемой программой. Для этих случаев целесообразно использовать переключение задач. Выход из подпрограмм (обратное переключение) производится командой IRET.
Механизм выполнения команды IRET
Механизм выполнения команды IRET определяется способом вызова процедуры обработки прерывания.
Если переход на программу обработки был произведен с использованием механизма переключения программ, то и возврат на исходную программу производится переключением задач.
Если переключение задач вызывается командами CALL, командой вызова прерываний, например, INT n, или прерыванием, то процессор устанавливает бит вложенности NT в регистре флагов FLAGSи бит занятости B в поле прав доступа дескриптора. Затем записывает селектор дескриптора TSS прерываемой программы в специальное поле "селектора возврата" TSS принимающей программы, и производится процедура переключения задач по схеме 3.10. После этого обе задачи становятся занятыми. Это запрещает применение рекурсивных процедур и реентерабельных программ.
Если переключение задач вызывает команда JMP, то селектор возврата, бит вложенности и бит занятости не устанавливаются.
При выполнении команды возврата процессор проверяет бит вложенности (NT) и выбирает механизм перехода. В случае использования переключения задач читается селектор TSS программы возврата.
Отсутствие прямого взаимодействия программ при переходах с использованием механизма переключения задач позволяет значительно смягчить требования к доступности программ по условиям корректности переходов с изменением уровня привилегий. Но все проверки, непосредственно не связанные с уровнями привилегий, выполняются в том же объеме.
Но по чтению и по записи TSS программно недоступен. Создание, модификацию и чтение TSS операционные системы могут производить путем отображения в тот же адрес памяти дескриптора сегмента данных.
Вопросы для самопроверки:
1. Назначение дескриптора сегментов в защищенном режиме МП IA-32.
2. Назначение дескриптора шлюзов в защищенном режиме МП IA-32.
3. Процедура переключения задач в защищенном режиме МП IA-32.
4. Основные поля дескрипторов сегментов и шлюзов.
5. Использование поля базового адреса сегмента и поля предела в дескрипторе сегмента.
6. Назначение поля атрибутов в дескрипторе сегмента.
7. Возможности использования сегментов CS, SS, ES, CS..
8. Понятие селектора сегмента.
9. Процедура переключения задач.
10. Термины: TSS, шлюз TSS.
11. Этапы процедуры переключения задач.
3.3.2. Модель памяти
В защищенном 32-х разрядном режиме МП Intel сегментная структура памяти сохранилась, но изменились размеры сегментов и максимальный размер математической памяти:
максимальный размер сегмента стал равен: – 232 = 4 294 967 296 байт (4 Гбайта),
максимальное количество сегментов – 214 = 16384 (16 Кбайт),
адресное пространство математической памяти – 246 = 70 368 744 177 664 = (64 Тбайт).
Максимальный объем физической линейной памяти определяется разрядностью шин адреса и разрядностью сегментного регистра. При разрядности шин адреса – 32 бита, возможность наращивания емкости оперативной памяти ограничивается величиной 4 Гбайта, т.е. – адресным пространством 1 сегмента.
При добавлении разрядных шин адреса ограничение определяется разрядностью сегментного регистра (32 бита). При использовании максимального значения сегмента в 4 Гбайта и максимального значения начального адреса сегмента в линейной памяти – возможность наращивания емкости оперативной памяти ограничивается величиной 8 Гбайт (2 сегмента по 4 Гбайт).
Биты в памяти и в регистрах также нумеруются с младших разрядов, а многобайтные операнды – по номеру младшего байта. Размещение программных объектов без соблюдения правил целочисленных границ не рекомендуется.
Схема сегментированной математической памяти и адресация физической памяти в МП IA-32 представлена на рис. 3.11.
Вопросы для самопроверки:
1. Максимальный размер сегмента в МП IA-32.
2. Максимальное количество сегментов в МП IA-32.
3. Чем определяется максимальное количество сегментов в МП IA-32.
4. Максимальный размер математической памяти сегментов в МП IA-32.
5. Максимальный адрес обращения к оперативной памяти без использования трансляции страниц.
3.3.3. Регистровый файл
По сравнению с реальным режимом МП IA-16 в защищенном режиме МП IA-32 регистровый файл увеличился до 32 регистров. К регистрам пользователей (16) добавились системные регистры (16).
Регистры пользователей:
регистры общего назначения (РОНы): 8 регистров по 32 бита,
указатель команд: 1 регистр – 32 бита,
регистр состояния (флагов): 1 регистр – 32 бита
сегментные регистры: 6 регистров по 16 бит,
В состав системных регистров входят:
регистры системных адресов: 4 регистра,
регистры управления, отладки и тестирования: 16 регистров.
Регистры пользователей
Регистры общего назначения(рис. 3.12).
Как и в МП IA-16, с точки зрения использования регистров, они не являются классическими регистрами общего назначения. Они могут задаваться по умолчанию (кодом операции, постбайтом и т.д.) По использованию регистров по умолчанию, они делятся на две группы:
регистры данных – eax, ecx, edx и ebx (по возрастанию адресов),
регистры адресов – esp, ebp, esi и edi (по возрастанию адресов)
31
16
15
8
7
0
eax
Расширения
ah (4)
al (0)
ax
Аккумулятор
ecx
(до 32 бит)
ch(5)
cl (1)
cx
Счетчик
edx
Могут
dh (6)
dl (2)
dx
Данные
ebx
использоваться
bh (7)
bl (3)
bx
База (для DS)
esp
и
sp (4)
Указатель стека
ebp
в реальном
bp (5)
База кадра стека SS)
esi
si(6)
Индекс источника
edi
режиме
di(7)
Индекс приемника
Рис3.12 Регистры общего назначения (РОНы)
Регистр ebx, хотя его и относят к группе регистров данных, но он же является одним из регистров адреса базы сегмента данных.
При работе с 16-ти битовыми операндами и компонентами адреса используются 16-битовые РОНы – ax, cx, dx, bx, sp, bp, si и di (по возрастанию адресов).
При работе с байтовыми операндами используются 8-битовые РОНы: al, cl, dl, bl, ah, ch, dh и bh (по возрастанию адресов).
В защищенном режиме по отношению к их содержимому (данные, компоненты адреса) регистры стали более симметричными.
Для улучшения симметричности в использовании РОНов в защищенном режиме работы предусмотрена возможность использования любых РОНов, кроме esp, в качестве хранения компонент адреса. Они могут участвовать в операциях и как регистры данных. Специализация регистров заключается в том, что при выполнении ряда команд используются один, два или три регистра, определенных по умолчанию.
Например, команды обработки строк по умолчанию используют содержимое регистров ecx, esi и edi. Это обеспечило некоторую оптимальность кодирования. Но нерегулярная структура РОНов требует от программистов осторожности при распределении и использовании РОНов.
На рис.3.12 РОНы в таблице представлены не в алфавитном порядке их обозначений, а по возрастанию их номеров.
Указатель команды (EIP)
Это 32-х битный регистр (рис.3.13), который содержит адрес команды в кодовом сегменте (смещение в кодовом сегменте). После выборки очередной команды содержимое регистра увеличивается на количество байт в выбранной команде. Младшие 16 разрядов указателя команд (IP) используются в реальном (шестнадцатибитном) режиме работы МП.
Регистр состояния (EFLAGS)
Это 32-битный регистр (рис. 3.13), содержащий флаги, управляющие некоторыми операциями и отражающие состояние процессора. Все флаги регистра можно разбить на группы:
флаги состояния,
управляющие флаги,
системные флаги.
31
16
15
0
EIP
Могут использоваться
IP
Eflags
и в реальном режиме
Fflags
Рис 3.13. Указатель команд и регистр флагов
Флаги состояния фиксируют признаки результатов выполнения арифметических и логических операций, включая операцию тестирования. Используются в командах условных передач управления.
В эту группу флагов входят:
OF – переполнение: результат превысил предел для чисел,
SF–знак: результат отрицательный ,
ZF–нуль: результат равен нулю,
AF–перенос (вспом.): перенос из третьего бита (десятичный),
PF–четность : мл. байт содержит четное число единиц,
CF–перенос: перенос за пределы значащих цифр.
Управляющий флаг DF
Управляющий флаг DF определяет порядок выполнения операций со строками. Непосредственно управляет счетчиком. При DF=0 счетчик инкрементируется, иначе – декрементируется.
Системные флаги
Системные флаги управляют вводом/выводом, маскируемыми прерываниями, отладкой, переключениями задач и работой в режиме виртуального МП 8086. Попытки управления этими флагами со стороны прикладных программ приводят к возникновению исключения (особой ситуации).
Некоторые из указанных выше регистров в защищенном режиме имеют разрядность, расширенную до 32.
Они могут быть использованы программами и в реальном режиме.
Сегментные регистры
Архитектура IA-32 поддерживает сегментированную память. При этом адрес объекта в сегментированной памяти задается двумя компонентами: базовым адресом сегмента и смещением в сегменте. В команде задается только смещение в сегменте. Количество сегментных регистров увеличилось на два (FS и GS). Изменилось и содержимое сегментных регистров. В МП IA-16 сегментные регистры содержат базовые адреса сегментов, а в МП IA-32 – селекторы сегментов.
Сегментные регистры в защищенном режиме дополняются 64-разрядными регистрами дескрипторов сегментов (рис.3.14) В системе не предусмотрено ни одной команды прямого обращения к ним. В этом смысле они программно невидимы. Это регистры аппаратных средств системы защиты программ от взаимных помех.
15
0
64
0
ES
Селектор ES
Дескриптор сегмента ES
Доп. сегмент данных
CS
Селектор CS
Дескриптор сегмента CS
Сегмент кода
SS
Селектор SS
Дескриптор сегмента SS
Сегмент стека
DS
Селектор DS
Дескриптор сегмента DS
Сегмент данных
FS
Селектор FS
Дескриптор сегмента FS
Доп. сегмент данных
GS
Селектор GS
Дескриптор сегмента GS
Доп. сегмент данных
Сегментные
регистры
Регистры дескрипторов сегментов
Рис.3.14. Сегментные регистры
Назначение сегментных регистров в защищенном режиме осталось прежним: использование в процедуре трансляции адресов, но сама функция и содержимое этих регистров существенно изменились.
Селектор сегмента в защищенном режиме МП IA-32 – это указатель номера строки таблицы дескрипторов, в которой находится заданный дескриптор. Преобразование логического адреса в линейный (адрес плоской памяти) производится процедурой трансляции сегмента.
МП содержит 6 шестнадцатибитных сегментных регистров:
CS – сегмента кода,
SS – сегмента стека,
DS– сегмента данных,
ES – дополнительный сегмент данных,
FS – дополнительный сегмент данных,
GS – дополнительный сегмент данных.
Использование регистров CS, SS, DSиES принято по умолчанию. Для использования регистров FS и GS необходима явная ссылка на них в префиксе замены сегментов. Использование сегментных регистров зависит от режима работы МП.
Системные регистры
Регистры системных адресов.
В защищенном режиме задание и работа с сегментами и шлюзами производится с использованием соответствующих дескрипторов, которые сохраняются в специальных таблицах:
GDT (глобальная таблица дескрипторов) – используется для хранения системных дескрипторов и шлюзов.
LDT – локальная таблица дескрипторов, формируется индивидуально для дескрипторов каждой прикладной задачи.
IDT таблица дескрипторов прерываний; может содержать до 256 дескрипторов шлюзов прерываний, ловушек или шлюзов состояния задач (TSS).
В свою очередь перечисленные таблицы сами являются сегментами, и на каждый из них формируется свой дескриптор.
Таблицы GDT и IDT являются уникальными, и их использование не настраивается, а задается "по умолчанию". По этой причине дескрипторы таблиц GDT и IDT не содержат поля атрибутов и хранятся в системных регистрах адресов (Рис. 2.15).
47
База
16
15
Предел
0
GDTRR
Базовый адрес
Предел
IDTR
Базовый адрес
Предел
Рис. 2.15. Системные регистры (адресов GDTR и IDTR)
Таблица GDT используется:
программами операционной системы для поиска программных объектов дескрипторов сегментов и шлюзов в глобальной таблице дескрипторов (GDT) при выполнении команд загрузки (активизации) сегментов данных и программ.
прикладными программами при межсегментных передачах управления.
Таблицы LDT формируются для всех задач пользователей.
Любая задача пользователя имеет доступ к таблице GDT и только к своей таблице LDT для обращения к локальным (своим) сегментам данных и программ.
Использование индивидуальных таблиц LDT является одним из элементов разделения адресных пространств задач аппаратного механизма защиты программ от взаимных помех при многозадачных режимах работы.
При межсегментных передачах управления или переключениях задач производится следующая последовательность действий:
по селектору команды передачи управления делается обращение к регистру GDTR для чтения базового адреса таблицы GDT,
производится трансляция сегмента (вычисление линейного адреса строки таблицы сложением базового адреса таблицы GDTс индексом селектора, заданного командой передачи управления)
производится обращение к таблице GDTдля чтениядескриптора.
Здесь возможны четыре случая:
чтение дескриптора целевого программного сегмента,
чтение дескриптора шлюза программного сегмента,
чтение дескриптора TSS,
чтение дескриптора шлюза TSS.
В первом случае процессор производит прямую передачу управления на команду нового программного сегмента по смещению (offset), заданному в команде.
Во втором случае, по селектору, заданному шлюзом, производится новое обращение к таблице GDTдля чтения самого программного сегмента и только после этого производится процедура прямой передачи управления.
В третьем случае производится прямое переключение задач.
В четвертом случае по индексу селектора шлюза задач производится новое обращение к таблице GDTдля чтения самого дескриптора TSSи только после этого производится процедура переключения задач.
15
0
47
16
15
0
LDTR
Селектор
Базовый адрес
Предел
TR
Селектор
Базовый адрес
Предел
Рис. 3.16. Системные регистры (адресов LDTR и TR)
Таблица IDTсодержит до 256 строк для хранения шлюзов прерывания,
ловушки или TSS. Каждому из перечисленных типов шлюза соответствует своя особенность процедуры прерывания.
В состав системных регистров входят (рис.3.17):
регистры управления, отладки и тестирования – 17 регистров,
регистры системных адресов – 4 регистра,
Регистры управления, отладки и тестирования
В состав регистров управления, отладки и тестирования (рис.3.17) входят:
4 управляющих регистра (CR0, CR1, CR2, CR3) по 32 бита,
8 регистров отладки (DR0 ¸ DR7) по 32 бита,
5 тестовых регистров (TR3 ¸ TR7) по 32 бита.
31
0
CR0– СR3
В реальном
Управляющие регистры
DR0-DR7
режиме
Регистры отладки
TR3-TR7
доступны
Тестовые регистры
Рис. 3.17. Системные регистры
Вопросы для самопроверки:
1. Количество и разрядность РОН в МП IA-32,
2. В чем выражается увеличение симметричности использование РОН в МП IA-32.
3. Назначение регистра флагов в МП IA-32.
4. Флаги кодов условий регистра флагов в МП IA-32.
5. Содержимое полей сегментных регистров в МП IA-32.
6. Размерность, поля и использование дескрипторных регистров, ассоциативно связанных с сегментными регистрами в МП IA-32.
7. Количество сегментных регистров и их назначение в МП IA-32.
8. Назначение и максимальный размер таблицы GDT в МП IA-32.
9. Назначение и максимальный размер таблицы LDT в МП IA-32.
10. Назначение и максимальный размер таблицы IDT в МП IA-32.
11. Назначение и содержимое GDTR в МП IA-32.
12. Поля GDTR в МП IA-32.
13. Назначение и содержимое IDTR в МП IA-32.
14. Поля IDTR в МП IA-32.
15. Назначение и поля селектора IDTR в МП IA-32.
16. Назначение и поля дескриптора IDTR в МП IA-32.
17. Назначение и поля селектора TR в МП IA-32.
18. Назначение и поля дескриптора TR в МП IA-32.
3.3.4. Структура команд и режимы адресации
Команды архитектуры МП IA-32 могут определять до трех операндов. При этом один из операндов задается непосредственным значением (#d), второй операнд – номером РОНа или адресом памяти, а адрес результата – номером РОНа. Это двухместная команда типа #d, r/M, rс явным задание заданием двух операндов и адреса результата.
Пример: команда IMUL – умножение целых со знаком.
Большинство команд архитектуры IA-32 используют только два адреса. Они образуют пять основных групп команд:
регистр-регистр (r/r),
регистр-память (r/m),
память-регистр (m/r),
непосредственный операнд-регистр (#d/r),
непосредственный операнд-память (#d/m).
Исключением является команда MOVS – команда строковой передачи данных типа память–память (адреса ячеек памяти задаются содержимым пар регистров базы/индекс) и команды работы со стеком, которые перемещают данные из памяти в стек, который также находится в памяти. Эта команды типа память–память, но в них явно задается только один адрес памяти в форме непосредственного операнда (#d).
Структура команды. Команда в защищенном режиме (рис. 3.17) может содержать от 1 до 17 байт:
0, 1,2,3,4
или 5 байта
1 байт
0 или1 байт
0 или1 байт
0,1,2 или 4
байта
0,1,2
или 4 байта
префикс
код
операции
постбайт
SIB - байт
байты
смещения
байты
операнда
Рис.3.17. Структура команд МП IA -32.
1. Префиксы (0,1,2,3 или 4 байт):
префикс блокировки шины реализует блокировку шин к общим ресурсам.
префикс замены сегмента в явной форме указывает сегментный регистр, используемый программой,
префикс переключения разрядности адреса изменяет принятую по умолчанию разрядность адреса на альтернативную (с 2-х байт на 4 или наоборот),
префикс размер операнда изменяет разрядность операнда, принятую по умолчанию.
префикс повторения используется с командами обработки строк, задает условие окончания операции.
2. Код операции (1или 2 байта) – задает операцию.
3. Постбайт (0 или 1 байт) – если присутствует, задает тип команды регистр/регистр (r/r) или регистр/память(r/m), а также определяет режим адресации памяти для команды типа регистр/память.
4. Байт SIB (scale-index-base – масштаб-индекс-база) – может отсутствовать; если присутствует – является дополнением к постбайту, модифицирующим процедуру базово-индексной адресации; присутствие байта SIB определяется полем постбайта r/m =100.
5. Смещение – компонента адреса; задает смещение, размер которого (1, 2. или 4 байта). Смещение может отсутствовать, его присутствие определяется постбайтом.
6. Непосредственный операнд – определяется кодом операции, если присутствует, то используется в качестве одно, двух или четырехбайтного операнда.
Режим адресацииоперандов
Режим адресацииоперандов в команде определяется кодом операции, постбайтом и байтом SIB. Режим адресации определяет местонахождение компонент и алгоритм вычисления адреса операнда в памяти.
В защищенном режиме МП IA –32 используются следующие виды адресаций:
непосредственная (константа) MOV еax, 0002h,
прямая (#d – смещение) MOV еbx, [0002h],
регистровая (любой РОН, кроме ebp) MOV еbx, еах,
косвенная регистровая MOV еах, [еbx],
базовая со смещением MOV еах, [еbx+001Ah],
базовая индексная без смещения MOV еах, [еbp+esi*8],
базовая индексная со смещением MOV еах, [еbp+esi*8+1Ah],
Предусмотрены два способа задания смещения операнда в таблицах.
1. Для обращения к элементам таблицы (спискам) последовательно по смежным адресам; устанавливается значением поля r/m ¹ 100впостбайте,
2. Для обращения к элементам таблицы в произвольном порядке их адресов; устанавливается значением поля r/m = 100впостбайте при разрядности по адресу в 32 бита.
Постбайт
Это необязательный элемент команды. Задает один (для одноадресной команды) или два адреса операндов, один из которых используется и как адрес результата.
7
6
5
3
2
0
md
r/r
r/m
Рис. 3.18. Структура постбайта
Постбайт (рис. 3.18), как и в МП IA-16, содержит 3 поля:
md – поле режима адресации,
r/r – поле адреса регистра,
r/m – поле адреса второго регистра или кода алгоритма вычисления адреса памяти.
Поле md
Это поле режима адресации, задающее тип команды: регистр/регистр (r/r) илирегистр/память (r/m).
Для команд регистр/память задает процедуру вычисления адреса операнда в памяти:
md =00 – режим адресации r/m без использования смещения,
md =01 – режим адресации r/m с использованием смещения 1 байт,
md =10 – режим адресации r/m с использованием смещения 2 или 4 байта в зависимости от установки разрядности данных для конкретной программы. Предусмотрена возможность изменения разрядности данных для отдельных команд с использованием префикса.
md =11 – режим адресации r/r.
Задание md¹ 11 определяет команду типа регистр/регистр. В этом случае поле r содержит номер РОНа, в котором находится один из операндов, а поле r/m, – номер РОНа, в котором находится второй операнд.
В 32-х разрядном режиме адресации, правила вычисления адреса операндов в сегменте (offset) определяются полям r/m постбайта. Значения поля r/m, кроме значения r/m ¹ 100, задают формулы вычисления адреса второго операнда по 2-м компонентам: B и смещению (disp). Смещение, в зависимости от значения поля md постбайта и установки разрядности данных, может быть нулевым, однобайтным, двухбайтным или четырехбайтным.
Значение поля r/m= 100 задает новый способ задания адресов, упрощающий процедуру вычисления при обращении к таблицам по произвольным адресам. Этот способ использует дополнительный байт SIB.
Имеется исключение: при значении полей постбайта r/m= 101и md = 00 адрес операнда задается прямым адресом (4 байта) в поле смещения (см. табл. 2)
Таблица 2.Режимы адресации МП IA-32 без использования SIB-байта (r/m ¹ 100).
Поле
r/m
Поле md
00
01
10
000
DS:[еах]
]
DS:[еах+disp (1 байт)]
]
DS:[еах+disp (4 байт)]
]
001
DS:[еcх]
DS:[еcх+disp (1 байт)]
DS:[еcх+disp (4байт)]
010
SS:[еdх]
SS:[еdх+disp (1 байт)]
]
SS:[еdх+disp (4 байт)]
]
011
SS:[еbх]
SS:[еbх+disp (1 байт)]
]
SS:[еbх+disp (4 байт)]
]
100
SIB
SIB
SIB
101
DS:disp(4 байт).
SS:[ebp+disp (1 байт)]
SS:[ebp+disp (4 байт)]
110
DS:[еsх]
]
DS:[еsх+disp (1 байт)]]
]
DS:[еsх+disp (4 байт)]]
]
111
DS:[еdх]
DS:[еdх+disp (1 байт)]]
DS:[еdх+disp (4 байт)]]
Режимы адресации МП IA-32 с использованием SIB-байта
Режимы адресации МП IA-32 с использованием SIB-байта (r/m = 100) означают, что следующий байт команды является SIB-байтом, а адрес операнда в упорядоченном массиве данных (таблицах) памяти вычисляется по формуле:
(B) + 2S(I) + Disp,
где: B, I иS – поля байта SIB.
Режимы адресации с использованием SIB-байта представлены в табл. 3.
Таблица 3. Режимы адресации МП IA-32 с использованием SIB- байта(r/m = 100)
Поле r/m постбайта
Поле md
00
01
10
100
DS:[eax + I´2S ]
]
DS:[eax + I 2S + disp (16 )] та)]
]
DS:[eax + I 2S + disp (32)]
DS:[ecx + I´2S ]
DS:[ecx + I´2S + disp (16)]
DS:[ecx + I´2S + disp (32)]
DS:[edx + I´2S ]
DS:[edx + I´2S + disp (16)]
DS:[edx + I´2S + disp (32)]
DS:[ebx + I´2S ]
DS:[ebx + I´2S + disp (16)]
DS:[ebx + I´2S + disp (32)]
SS:[esp + I´2S ]
SS:[esp+ I´2S + disp (16)]
SS:[esp + I´2S + disp (32)]
DS:disp (32 бита)
DS:[ebp + I´2S + disp (16)]
DS:[ebp + I´2S + disp (32)]
DS:[esi+ I´2S ]
DS:[esi + I´2S + disp (16)]
DS:[esi + I´2S + disp (32)]
DS:[edi + I´2S ]
DS:[edi + I´2S + disp(16)]
DS:[edi + I´2S + disp (32)]
Примечание:
В качестве индексного регистра может быть указан любой РОН, кроме указателя стека (100).
Когда поле индекса содержит 100, указывающее, что индексный регистр не используется, поле SS должно содержать 00, иначе линейный адрес, будет считаться неопределенным
Трансляция сегментов в защищенном режиме МПIA-32
Дескрипторы сегментов, кроме функций аппаратной системы защиты программ от взаимных помех, используются для процедур трансляции сегментов при каждом обращении к оперативной памяти.
Для решения этой проблемы процессор содержит шесть сегментных регистров. С каждым 16-битным сегментным регистром ассоциативно связаны по одному из шести программно-недоступных 64-битных регистров дескрипторов (см. рис. 3.12). Эти регистры предназначены для хранения шести дескрипторов сегментов после их активизации.
Активизация дескрипторов осуществляется командами загрузки сегментного регистра (кроме CS) или командами межсегментных передач управления (для активизации сегментов программ). При этом в дескрипторном регистре запоминается дескриптор, а в 16-битном регистре – адрес его расположения в таблице дескрипторов.
Схема трансляции сегментов
МП содержит 6 регистров сегментов. Это означает, что одновременно могут быть активными и участвовать в процедуре трансляции только 6 сегментов. Для загрузки сегментов данных, включая сегмент стека, имеются специальные команды "загрузить сегмент".
В работе механизма защиты при обращении к данным можно выделить два этапа:
загрузка (активизация) сегмента данных,
обращение к сегменту данных для чтения или записи операндов при выполнении команд программы (с использованием процедуры трансляции сегмента).
Загрузка сегментов данных (включая стековые)производится командами "Загрузка указателя в регистр смещения". Это команда типа регистр - память:
(LDS, LES, LFS, LGS, LSS) reg, mem.
Основные этапы выполнения команды:
чтение по адресу "mem";
прочитанные данные интерпретируются как: селектор целевого сегмента, смещение (адрес в целевом сегменте),
сохранение выбранных значений в буферных регистрах,
обращение к таблице дескрипторов по выбранному целевому селектору,
сохранение значения дескриптора целевого сегмента в дескрипторный регистр, ассоциативно связанный с заданным сегментным регистром;
загрузка в РОН, указанный полем reg команды, смещения, выбранного при чтении по адресу "mem". В дальнейшим этот адрес может использоваться в качестве базового для задания адресов компонентами.
Схема выполнения команды загрузки сегментного регистра (рис. 3.19).
Обобщенная схема вычисления линейного адреса в защищенном режиме представлена на рис. 3.20.
Результатом трансляции сегмента является линейный адрес. Это адрес линейной (плоской) памяти. Но он необязательно должен совпадать с адресом физической памяти. Все зависит от бита включения механизма подкачки страниц (трансляции страниц) в управляющем регистре СR3. Если он не включен, то линейный адрес является адресом обращения к физической памяти, иначе производится трансляция страниц для формирования физического адреса.
Вопросы для самопроверки:
1. 5 групп двуместных команд.
2. Структура команд МП IA-32 (побайтно).
3. Префикс блокировки шины.
4. Префикс блокировки замены сегмента.
5. Префикс переключения разрядности адреса.
6. Префикс переключения разрядности адреса.
7. Префиксповторения.
8. Поля и назначение постбайта в МП IA-32.
9. Поля и назначение SIB-байта в МП IA-32.
10. Процедура активации сегментов в МП IA-32.
11. Процедура трансляции сегментов в МП IA-32.
12. Определите и расшифруйте коды поля md постбайта в МП IA-32.
13. Определите и расшифруйте коды поля r/r постбайта в МП IA-32.
14. Определите и расшифруйте коды поля r/m постбайта в МП IA-32.
3.3.5. Структура данных
Архитектура IA-32 предполагает наличие не менее двух процессоров, даже если они интегрированы в одном блоке. В поздних моделях МП их называют не процессорами, а модулями обработки данных. Здесь речь идет, скорее, о множестве структур данных, в зависимости от реализованных в процессоре "арифметик".
Основным модулем обработки данных является модуль обработки чисел с фиксированной запятой (точкой). В настоящее время – это целочисленная арифметика, обработка двоично-десятичных чисел и строк символов.
Дополнительным модулем является модуль обработки чисел с плавающей запятой (модуль обработки вещественных чисел).
В МП, начиная с Pentium MMX, используется дополнительный мультимедийный модуль обработки векторных данных.
Модуль обработки чисел с фиксированной запятой использует основной набор регистров общего назначения (РОНы) и следующие форматы данных:
1. Целые числа без знака:
байт диапазон: от 0 до 255,
слово диапазон: от 0 до 65 535,
двойное слово диапазон: от 0 до 4 294 967 295.
2. Целые со знаком:
знак и 7 бит диапазон: от (–128) до 127,
знак и 15 бит диапазон: от (–32 768) до 32 767,
знак и 31 бит диапазон: от (–от 2 147*109) до 2 147 *109.
3. Двоично-десятичные числа.
неупакованный формат BCD – одна беззнаковая цифра в байте; цифровое значение определяется младшим полубайтом; старший полубайт должен быть нулевым при операциях умножения или деления; в других операциях старший полубайт может быть любым,
упакованный формат BCD – две цифры в байте; цифра в старшем полубайте является более значимой; диапазон – от 0 до 99.
4. Близкий указатель – 32-битное смещение в сегменте.
5. Дальний указатель – 48-битный логический адрес; содержит селектор сегмента (16 бит) и смещение в сегменте (32 бита).
6. Строка – непрерывная последовательность байт, слов или двойных слов длиной до 4 Гбайт.
7. Битовое поле – непрерывная последовательность бит, в которой каждый бит рассматривается как независимая переменная. Битовое поле может начинаться с любого бита в любом байте и быть длиной до 32 бит.
8. Битовая строка – непрерывная последовательность бит; может начинаться с любого бита в любом байте и быть длиной до 4 Гбайт.
Модуль обработки чисел с плавающей запятой использует свой набор регистров общего назначения (РОНы), свои команды, свои форматы данных и свой регистр слова состояния FGU модуля (аналог регистра EFLAGS) .
Особенностью модуля с плавающей запятой является то, что набор РОН (восемь 80-битных регистров) организован в виде стека. Указатель стека TOP расположен в регистре слова состояния FGU модуля. Стековая организация РОНов упрощает процедурное программирование, в частности передачу параметров через стек. Структура регистра общего назначения модуля FGU представлена на рис. 3.21.
Регистры содержат три поля: знака, порядка и мантиссы.
Знак – это знак числа и знак мантиссы. Для задания отрицательных значений мантиссы используется прямой код (0 – положительные значения, 1 – отрицательные).
Характеристика – это смещенный (нормализованный) порядок числа (10 бит), диапазон представления чисел: 2±1634 = 10±4932.
Мантисса – нормализованная дробь типа 1,a1,a2, ai…a63, где: аi – двоичная цифра, причем дробная часть мантиссы 0.
79
78
64
63
0
Знак
Характеристика
Мантисса
Рис.3.21. Структура регистра общего назначения FGU модуля
Команды используют числа с плавающей запятой следующих форматов:
обычной точности: знак – 1 бит, порядок – 8 бит, мантисса – 24 бита, первая цифра мантиссы (всегда 1) в поле команды не пишется; всего фиксируются 32 бита.
двойной точности: знак – 1 бит, порядок – 11 бит, мантисса – 53 бита, первая цифра мантиссы (всегда 1) в поле команды не пишется.
расширенной точности: знак – 1 бит, порядок – 15 бит, мантисса – 64 бита, включая первую цифру.
Числа с плавающей запятой в формате обычной и двойной точности при загрузке в модуль обработки автоматически преобразуются в формат расширенной точности. Промежуточные результаты вычислений могут записываться в память в формате расширенной точности. Это предотвращает потери точности при перекодировках чисел.
Мультимедийный модуль
Мультимедийный модуль обработки векторных данных. Этот модуль, появившись в МП Pentium Pro в варианте 57 команд обработки векторных 64-битных данных с фиксированной запятой, в последующих моделях непрерывно совершенствовался.
В моделях МП Pentium 4 стало использоваться второе поколение потоковых команд расширения SSE2 (Streaming SIMD Extensions 2). Набор из 144 команд SSE2 поддерживает новые форматы упакованных данных с использованием 128-разрядных регистров (XMM-регистров) как при операциях с плавающей запятой, так и при операциях с фиксированной запятой.
Вопросы для самопроверки:
1. Диапазон представления чисел без знака в формате байта.
2. Диапазон представления чисел без знака в формате слова.
3. Диапазон представления чисел без знака в формате двойного слова.
4. Диапазон представления чисел со знаком в формате байта.
5. Диапазон представления чисел со знаком в формате слова.
6. Диапазон представления чисел со знаком в формате двойного слова.
7. Неупакованный формат представления двоично-десятичных чисел.
8. Упакованный формат представления двоично-десятичных чисел.
11. Понятие строка.
12. Понятие битовая строка.
13. Понятие битовое поле.
14. Количество и структура РОН для данных в форме с плавающей запятой.