Сегментные регистры и трансляция сегментов
При использовании сегментированной математической памяти необходима процедура преобразования адреса сегментированной (математической памяти) в адреса линейной физической памяти при каждом обращении к памяти. Адрес объекта в сегментированной памяти задается двумя компонентами базовым адресом сегмента и смещением в сегменте. В команде задается только смещение в сегменте. Базовый адрес сегмента задается содержимым одного из четырех сегментных регистров (рис. 2.3).
МП IA-16 содержали 4 сегментных регистров по 16 бит: · ES – дополнительного сегмента данных, · CS – сегмента кода, · SS – сегмента стека, · DS – сегмента данных,
Использование регистров 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), и трансляции сегмента (вычисление линейного адреса в несегментированной памяти) представлена на рис.2.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.
|