Прикладная архитектура процессора 8086(8088)




ОРГАНИЗАЦИЯ АДРЕСНОГО ПРОСТРАНСТВА.

Минимально адресуемой единицей для процессора 8086 является БАЙТ.

Ячейки ОЗУ размером в байт имеют последовательные адреса, начинающиеся с нулевого (0, 1, 2, и т.д.). Размер адресной шины (то есть, количество разрядов, отводимых для адреса ячейки памяти) для процессора 8086 составляет двадцать разрядов. По этому максимально возможный адрес 220 -1 (1048560-1)(10) или двадцать единиц в двоичном коде или FFFFF(16).

Может адресоваться СЛОВО (два байта). Слово адресуется по адресу своего младшего байта. Младший байт слова хранится по младшему адресу, старший - по старшему.

СЕГМЕНТ - это область памяти, которая начинается на границе параграфа (по адресу кратному 1610 или 10(16)), имеет размер до 64Кбайт и может располагаться в любом месте ОЗУ. Реальный размер сегмента такой, какой требуется для выполнения программы.

Имеются три главных сегмента.

1. Сегмент кодов, в котором хранится программа, которая будет выполняться. Обычно первая выполняемая команда находится в начале этого сегмента и операционная система передает управление по адресу данного сегмента для выполнения программы.

2. Сегмент данных, в котором хранятся данные, константы и рабочие области, необходимые программе.

3. Сегмент стека. Стек - область оперативной памяти, организованная по принципу: записанный последним читается первым. Стек можно представить себе, как стопку тарелок, из которой можно взять только верхнюю тарелку, затем следующую за ней, и так далее. Добавить тарелку в стопку можно только наверх стопки Сегмент стека используется для хранения адресов возврата из процедур, прерываний.

4. Может быть еще дополнительный сегмент (данных).

Адреса начала сегментов хранятся в специальных сегментных регистрах. Сегментные регистры шестнадцатиразрядные. Так как начало сегмента установлено на границе параграфа, младший разряд адреса (в шестнадцатиричном коде) всегда равен нулю. Он не хранится. Таким образом, в сегментном регистре сохраняются старшие 4 разряда (в шестнадцатиричном коде или 16 разрядов в двоичном) адреса начала сегмента или БАЗА.

Внутри программы все адреса относительны к началу сегмента (СМЕЩЕНИЕ относительно начала сегмента).

Смещение составляет 2 байта (от 000016 до FFFF16 или от 0 о 65535 (64К)).

Записывается адрес ячейки памяти база:смещение. Например, запись 1000h:0200h означает, что база соответствующей ячейки памяти 1000h, а смещение – 0200h.

Адрес в программе формируется как сумма содержимого соответствующего сегментного регистра и смещения.

Пусть в сегментном регистре хранится адрес 045Fh, а смещение равно 0032h.

Результирующий адрес (физический 20-разрядный адрес) образуется:

Адрес в сегментном регистре 045F0

Смещение +00032

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

Таким образом, при 16 битах в сегментных регистрах и 16 битах смещения можно адресовать 1 Мбайт памяти.

 

Прикладная архитектура процессора 8086(8088)

ОУ - операционное устройство ШИ - шинный интерфейс

 
 


AX AH AL

BX BH BL

CX CH CL

DX DH DL

SP CS

BP DS

 
SI SS

DI ES

Упр.

шиной

АЛУ 4

УУ 3

Флаговый регистр 2

Указатель команд 1

 

Очередь команд

Рис.4.3. Прикладная архитектура процессора 8086 (8088)

 

Процессор состоит из двух основных частей: операционного устройства (ОУ) и шинного интерфейса (ШИ). ОУ выполняет команды, ШИ подготавливает команды и данные для выполнения. ОУ содержит арифметическо - логическое устройство (АЛУ), устройство управления (УУ) и десять регистров. Эти устройства обеспечивают выполнение команд, арифметические вычисления и логические операции. ШИ состоит из блока управления шиной, очереди команд и сегментных регистров. ШИ выполняет три основные функции:

1) управляет передачей данных на ОУ, в память и на внешние устройства ввода/вывода;

2) четыре сегментных регистра управляют адресацией памяти объемом до 1 Мбайта;

3) осуществляет выборку команд из ОЗУ, очередь команд хранит четыре команды, следующие за выполняемой.

В процессорах 8086/8088 применена конвейерная архитектура, позволяющая выполнять выборку кодов инструкций из памяти и их декодирование во время выполнения внутренних операций. Конвейер повышает производительность процессора за счет сокращения времени простоя его операционных узлов. Конвейер 8086 имеет 6 байтовую внутреннюю очередь инструкций. Блок предварительной выборки при наличии двух свободных байт в очереди старается заполнить ее в то время, когда внешняя шина процессора не занята операциями обмена. Очередь у процессора 8088 сокращена до 4 байт, а предварительная выборка выполняется при наличии одного свободного байта. Эти отличия оптимизирует конвейер с учетом разрядности шины данных. Очередь обнуляется при любой команде передачи управления (даже при переходе (JMP) на следующий адрес). Процессоры 8086/8088 имеют 14 регистров, используемых для управления программой, для адресации памяти, для обеспечения арифметических вычислений.

Регистры имеют длину одно слово (16 бит).

СЕГМЕНТНЫЕ РЕГИСТЫCS,DS,SS,ES.

Сохраняют адрес начала соответствующего сегмента (без младшего нуля):

CS - кодового сегмента;

DS - сегмента данных;

SS - сегмента стека;

ES - дополнительного сегмента.

РЕГИСТРЫОБЩЕГО НАЗЕАЧЕНИЯ (РОН) AX,BX,CX,DX.

Могут адресоваться как 16-битовые, так и как два однобайтовых.

АХ - 16-битовый регистр, АН – его старшая часть (левый байт), АL - младшая (правый байт).

Назначение РОН.

AX - используется как сумматор, во всех операция ввода-вывода, некоторых операциях над строками и некоторых арифметических операциях.

BX - базовый регистр. Единственный РОН, который может использоваться как индекс для расширенной адресации. Используется также для вычислений.

CX - регистр-счетчик. Используется для управления количеством циклов и сдвигов. Также применяется для вычислений.

DX - регистр данных. Используется в некоторых операциях ввода-вывода, в операциях умножения и деления больших чисел.

РЕГИСТРОВЫЕ УКАЗАТЕЛИ SP, BP.

Обеспечивают доступ к данным в стеке.

SP - указывает на смещение относительно SS вершины стека.

BP - указывает на смещение относительно SS данных внутри стека.

С помощью регистра SP организуется принцип “записанный последним читается первым”. Как работает стек в процессоре 8086? Стек оперирует только словами. Заполняется стек от старших адресов к младшим. То есть сначала записывается слово по максимальному адресу в сегменте стека, потом по адресу на два (так как стек работает со словами) меньше и так далее. Регистр SP называется указателем на вершину стека. Вершина стека – это последнее записанное в стек слово. Указатель на вершину стека – это адрес (точнее смещение относительно сегментного регистра SS) последнего записанного в стек слова. Как происходит запись слова в стек. При записи слова в стек содержимое регистра SP уменьшается на два и по полученному смещению записывается слово (на рис. 4. 4 б – это слово A0B5). При повторной записи слова содержимое SP опять уменьшается на два и по полученному смещению записывается новое слово (на рис. 4.4. в – это число C601).

 

 

 
 

 


При чтении слова из стека слово считывается по смещению, содержащемуся в SP, а после этого содержимое SP увеличивается на два, то есть указывает на предыдущее записанное в стек слово (рис.4.5.а). При чтении следующего слова считывается слово, смещение которого находится в SP, и содержимое SP опять увеличивается на два (рис. 4.5.б). Таким образом, SP всегда содержит смещение последнего записанного в стек слова. Изменение SP происходит автоматически при записи и чтении слов.

 
 

 

 


Регистр BP позволяет прочитать или записать слово по произвольному

смещению внутри стека. Он содержит смещение слова относительно регистра SS.

ИНДЕКСНЫЕ РЕГИСТРЫSI, DI.

Используются для расширенной адресации и в операциях со строками.

SI - является индексом источника и используется совместно с DS для некоторых операций над строками.

DI - является индексом приемника и используется совместно с ES для некоторых операций над строками.

УКАЗАТЕЛЬ КОМАНД (СЧЕТЧИК КОМАНД) IP.

Содержит смещение (относительно СS) команды, которая должна быть выполнена (то есть следующей за выполняемой). С помощью IP осуществляется управление порядком выполнения команд вашей программы. Когда команда загружается в устройство управления для выполнения, IP увеличивается на число соответствующее количеству байт, занимаемых данной командой, и таким образом формирует адрес следующей команды (при последовательном выполнении команд). При выполнении команд перехода смещение команды, на которую нужно передать управление, заносится в IP.

ФЛАГОВЫЙ РЕГИСТР.

Хранит в виде битовых полей результаты выполнения операций (признаки нулевого, отрицательного результата, переполнения разрядной сетки и др.)

 

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

X X X X OF DF IF TF SF ZF X AF X PF X CF

 

Рис.4.6. Формат флагового регистра

 

CF (Carry Flag) - флаг переноса. Содержит значения переносов (0 или 1) из старшего разряда при арифметических операциях и операциях сдвига и циклического сдвига.

PF (Parity Flag) - флаг четности. Проверяет младшие 8 битов операций над данными. Нечетное число единиц приводит к установке этого флага в 0, четное - в 1. Не следует путать этот флаг с битом контроля на четность.

AF (Auxiliary Carry Flag) - вспомогательный флаг переноса. Устанавливается в 1, если арифметическая операция приводит к переносу из третьего бита в регистровой однобайтовой команде. Данный флаг используется в арифметических операциях над числами в ASCII- и BCD-формате.

ZF (Zero Flag) - флаг нуля. Устанавливается в качестве результата арифметических команд и команд сравнения. При нулевом результате - 1, при ненулевом - 0.

SF (Sign Flag) - флаг знака. Устанавливается в соответствии со знаком результата (старшего бита) после арифметических операций. При положительном результате - 0, при отрицательном - 1.

TF (Trap Flag) - флаг трассировки. Если этот флаг установлен в единичное состояние, то процессор переходит в режим пошагового выполнения команд.

IF (Interrupt Flag) - флаг прерывания. При нулевом состоянии этого флага прерывания запрещены, при единичном - разрешены (управляет только маскируемыми аппаратными прерываниями).

DF (Direction Flag) – флаг направления. Используется в строковых операциях для определения направления передачи данных.

OF (Overflow Flag) - флаг переполнения. Фиксирует арифметическое переполнение, т.е. перенос в (из) старший (знаковый) разряд при знаковых арифметических операциях.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-10-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: