Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник по Микропроцессорам_МИА.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.67 Mб
Скачать

Организация основной памяти и средства аппаратной поддержки управления памятью

Рассмотрим организация памяти в микропроцессорах i8086, i386 и више.

Организация основной памяти в микропроцессоре i8086. В микропроцессоре i8086 для адресации основной памяти предусматриваются 20-битовые адреса, что позволяет работать с основной памятью до 1 Мбайта [35].

Минимальной адресуемой единицей основной памяти ПЭВМ является байт, состоящий из 8 бит. Доступ к байтам основной памяти осуществляется по номерам (номер байта является его физическим адресом в устройстве памяти).

Физический адрес в микропроцессоре i8086 формируется из 16-битового смещения и содержимого 16-битового сегментного регистра, сдвинутого влево на 4 бита (рис. 3.2).

Для размещения программ и данных в основной памяти выделяются специальные области - сегменты. Адреса этих областей хранятся в специальных сегментных регистрах [35].

Каждый из четырех сегментных регистров используется для хранения адреса определенного сегмента (рис. 3.3):

сегмента кодов, т. е. области программ;

сегмента данных, т. е. области размещения данных;

дополнительного сегмента данных, используемого некоторыми командами;

сегмента стека, т.е. области размещения стека.

Стек – эта специальным образом организованная область оперативной памяти [34, 37], допускающую последовательную запись элементов данных длиной 2 байта (слово) и чтение их в порядке, обратном порядку записи, т.е по принципу «последним вошел - первым вышел» (LIFO). Байты программы в оперативной памяти располагаются последовательно по нарастающим адресам. Стек заполняется по последовательно убывающим адресам. Во избежание перекрытия этих двух областей памяти стек обычно располагается в старших адресах.

Начальный адрес стека, называемый дном (bottom) записывается в регистр SP командой MOV SP,0fffeh. Вместо 0fffeh - адрес предпоследнего байта сегмента, может быть другое значение, но выравненное по двухбайтовым, т. е. четным адресам. Текущее значение содержимого SP называется, также адресом вершины стека (top). Если адрес вершины совпадает с адресом дна - стек считается пустым. Рассмотрим механизм помещения в стек и извлечения из него данных на примере команд PUSH AX и POP BX. Пусть начальное значение аккумулятора AX равно 8а4c.

Команда PUSH выполняется в четыре этапа:

Адрес в SP уменьшается на 1: (SP) =(SP) - 1.

По этому адресу помещается старший байт : ((SP)) = (AH).

Содержимое SP снова уменьшается на 1: (SP)=(SP) - 1.

По полученному адресу загружается младший байт 4c: ((SP)) = (AL).

Действие команды POP аналогично описанному процессу, но в происходит в обратном порядке:

(BL) = ((SP)),

(SP) = (SP) + 1,

(BH) = ((SP)),

(SP) =(SP) + 1.

Байты в стек помещаются по правилу "старший байт по старшему адресу". Преимущество стека в том, что программисту не нужно заботиться об абсолютных значениях адресов переменных, но в этом таится и опасность, если текущее содержимое указателя стека будет потеряно, при неаккуратных действиях программиста, то работа компьютера станет непредсказуемой и он, как говорят в таких случаях, «зависнет».

В программах стек используется для:

1) сохранения и извлечения адреса возврата из подпрограмм командами ассемблера CALL и RET (IRET),

2) хранения локальных переменных,

3) передачи фактических параметров подпрограммам (трансляторами с языков высокого уровня),

4) временного хранения содержимого регистров фоновой программы при ее прерывании.

Формат команд микропроцессора 8086

Формат команд микропроцессора 8086 позволяет указывать в команде только один операнд, размещенный в основной памяти, т. е. одной командой нельзя, например, сложить содержимое двух ячеек памяти. С форматами команд микропроцессоров i386, i486 и Pentium можно ознакомиться по работам [33, 34] или при изучении раздела 2.2 данной работы

Принципиально допускается 8 способов задания смещения (исполнительного адреса) операндов, размещенных в основной памяти [35]:

SI + <индексное смещение>

DI + <индексное смещение>

BP + <индексное смещение>

BХ + <индексное смещение>

BP + SI + < индексное смещение>

BP + DI +< индексное смещение>

BX + SI + <индексное смещение>

BX + DI + <индексное смещение>

Во всех случаях исполнительный адрес операнда определяется как сумма содержимого указанных регистров и индексного смещения, представляющего собой некоторое число (одно- или двухбайтовое).