![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
РОНы МП 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 (по возрастанию адресов).
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 – регистр сегмента данных,
№ | Базовые адреса сегментов | |||||
ES– Доп. сегмент данных | ||||||
CS – Сегмент кода | ||||||
SS – Сегмент стека | ||||||
DS – Сегмент данных | ||||||
Рис.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 – трансляция страниц (виртуальная память) не реализована.
Дата публикования: 2014-11-03; Прочитано: 634 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!