Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Orgevm_Ekzamen.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
998.59 Кб
Скачать

Билет №5 Внутренняя архитектура мп вм86. Программная модель мп вм86.

МП ВМ86 состоит из двух основных блоков:

  • операционного устройства (ОУ);

  • устройства шинного интерфейса (ШИ).

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

Оба этих устройства могут работать параллельно. Такая структура МП позволяет организовать, так называемый, конвейер команд. В процессе выполнения любой команды всегда имеется промежуток времени, когда системная шина оказывается свободна. Длительность этого промежутка зависит от сложности команды. Обычно, чем сложнее команда, тем длиннее данный промежуток. ШИ использует эти промежутки для опережающей выборки команд из памяти. То есть пока одна команда выполняется, другие команды считываются из памяти, поэтому к моменту начала выполнения команды она, как правило, уже находится внутри МП и не надо тратить время на ее выборку из ОП. Таким образом, конвейер команд позволяет повысить общее быстродействие системы. Отметим, что в МП ВМ86 реализован самый простой двухступенчатый конвейер. В современных МП число ступеней конвейера значительно больше (одна команда выполняется, другая выбирается из ОП, третья дешифрируется, для четвертой формируется адрес операнда и. т. д.).

Выбранные с опережением из ОП команды надо где-то внутри МП хранить. С этой целью в состав ШИ введена очередь команд, представляющая из себя стек, реализующий процедуру FIFO и имеющий глубину шесть байт. Машинные команды МП ВМ86 занимают от одного до шести байт (без учета префиксов). Таким образом, в очереди может одновременно находиться от одной до шести команд. Очередь хорошо заполняется, когда МП выполняет сложные команды (умножение, деление) и может оставаться наполовину пустой при выполнении последовательности простых команд.

Если процессор выполняет команду перехода (jmp, call и.т.д.), информация в очереди оказывается ненужной. Поэтому в этом случае МП автоматически очищает очередь команд и начинает заполнять ее заново.

Программная модель мп вм86.

Программная модель ВМ86 представлена на рис. 6. Все регистры ВМ86 можно разбить на группы. Первую группу составляют РОНы, к которым относятся регистры ax, bx, cx и dx. Любой из этих регистров можно рассматриваться и как один шестнадцатиразрядный, и как пара восьмиразрядных регистров. Основное назначение РОНов – временное хранение информации, однако, на каждый из этих регистров в ВМ86 возлагается и ряд специальных функций.

Регистр ax – в нем формируется результат (или его часть) в командах умножения и деления. Кроме того обмен информацией между МП и портами ВУ можно проводить только через регистры ax и al. То есть допустимы команды

out 20h,al и in ax,70h

и недопустимы

out 20h,ah и in bx,70h.

Регистр bx - первый базовый регистр процессора. Это единственный регистр из группы РОНов, который можно использовать для косвенной и базовой адресации. То есть допустимы команды

mov al,[bx] и add [bx +7],dx

и недопустимы

mov al,[ax] и add [bh +7],dx.

Если для адресации используется регистр bx, то, по умолчанию, в качестве сегментного регистра берется регистр ds.

Регистр cx используется в качестве счетчика в команде цикла loop и командах, перед которыми поставлен префикс повторения rep. То есть цикл или команда с префиксом будет повторяться до тех пор, пока сх не обнулится (естественно, после каждого прохода содержимое сх автоматически уменьшается). Кроме того регистр cl используется в командах сдвига для задания числа сдвигов.

Рис. 6

Регистр dx – это единственный регистр МП, который можно использовать для косвенной адресации портов ВУ. То есть допустимы команды

out [dx],ax и in al,[dx].

Регистры bp, sp, si и di составляют группу регистров указателей. Основное их назначение – участвовать в формировании Аэф. Однако если для этой цели они не нужны, их можно использовать в качестве РОНов . Регистры этой группы могут быть только шестнадцатиразрядными.

Регистр bp - второй базовый регистр процессора. Если для адресации используется регистр bp, то, по умолчанию, в качестве сегментного берется регистр ss. Таким образом, использование для адресации регистра bp позволяет обращаться к области стека, как к обычной памяти.

Регистры si и di – индексные регистры процессора. Используются для косвенной и базово-индексной адресации. При этом необходимо соблюдать следующее правило: в любой команде для адресации можно использовать только один базовый и только один индексный регистр. То есть допустимы команды

sub [di],7 и mov cx,[bp + si +7]

и недопустимы

mov [bx+bp],al и mov dh,[si + di].

Регистр sp указатель стека. Использовать его в качестве РОНа не рекомендуется.

Регистр ip не относится ни к какой группе и называется указателем команд. По своей сути – это программный счетчик. В нем всегда формируется смещение в кодовом сегменте и, таким образом, ip всегда задает адрес следующей команды программы. Сменить содержимое ip можно только командами перехода, то есть командами jmp, call, ret и др.

Регистры cs, ss, ds и es составляют группу сегментных регистров.

Регистр cs всегда используется вместе с регистром ip при формировании адреса следующей команды программы. Данный адрес формируется следующим образом:

Аф = (cs)×16 + (ip).

То есть содержимое cs задает начальный адрес сегмента кода.

Сегментный регистр ss задает начальный адрес сегмента стека и всегда используется вместе с регистром sp для формирования Аф при обращении к стеку:

Аф = (ss)×16 + (sp).

Содержимое сегментного регистра ds задает начальный адрес сегмента данных. В командах, оперирующих с данными, при формировании физического адреса ОП в качестве сегментного регистра по умолчанию (кроме случая, когда в качестве базового используется регистр bp) берется ds. Однако при этом мы всегда имеем возможность сменить сегмент, прямо указав сегментный регистр, который должен использоваться для формирования Аф, с помощью префикса замены сегмента. Например:

mov [bx],ax

Аф = (ds)×16 + (bx);

mov ss:[bx],ax

Аф = (ss)×16 + (bx).

Содержимое сегментного регистра es задает начальный адрес дополнительного сегмента. По умолчанию этот регистр используется только при формировании физического адреса приемника в строковых командах. В остальных случаях использование es задается с помощью префикса замены сегмента.

В таблице 3 показаны все возможные случаи формирования Аф и компоненты, принимающие участие в этом процессе

Регистр f – регистр флагов. Его формат приведен на рис. 7. В этом регистре определены следующие флаги:

cf (carry) – флаг переноса. Этот флаг устанавливается в единицу, если в процессе операции возникает перенос из старшего разряда (или был заем в старший разряд при вычитании). С этим флагом работают некоторые команды условных переходов. Программист может непосредственно влиять на значение этого флага, используя команды stc, clc и cmc (установить , сбросить, инвертировать).

pf (parity)– флаг четности. Устанавливается в единицу, если в младшем байте результата получилось четное число единиц. Флаг можно использовать для организации «контроля по четности», с ним работают некоторые команды условных переходов.

af (adjust) – флаг межтетрадного переноса. Устанавливается в единицу, если в процессе операции возникает перенос из 3-го бита в 4-й (или при заеме из 4-го бита при вычитании). С флагом работают команды коррекции для двоично-десятичной (BCD) арифметики.

Таблица 3

Вид операции

Сегментный регистр по умолчанию

Возможность смены сегментного регистра с помощью префикса

Внутрисегментное смещениие

Выборка команды

cs

нет

ip

Стековая операция

ss

нет

sp

Обращение к памяти (кроме bp в качестве базового регистра)

ds

cs, ss, es

Аэф

Обращение к памяти при bp в качестве базового регистра

ss

cs, ds, es

Аэф

Источник в строковой команде

ds

cs, ss, es

si

Приемник в строковой команде

es

нет

di

Обращение к ВУ

нет

нет

dx или прямая адресация

Рис. 7

zf (zero) – флаг нулевого результата. Устанавливается в единицу, если результат операции оказался равен нулю. С флагом работают некоторые команды условных переходов.

sf (sign)– флаг знака. Устанавливается в единицу, если в старшем разряде результата получилась единица, то есть результат является отрицательным числом. С флагом работают некоторые команды условных переходов.

of (overflow)– флаг переполнения. Устанавливается в единицу, если в результате выполнения арифметической операции произошло переполнение разрядной сетки. С флагом работает единственная команда into – «прерывание, если установлен флаг of».

tf (trap)– флаг трассировки. Если этот флаг установлен в единицу, программа выполняется в «пошаговом режиме», так как после каждой команды МП автоматически генерирует прерывание типа 1. Таким образом этот флаг используется для отладки. У программиста нет в распоряжении команд, влияющих на этот флаг. Поэтому изменить значение флага tf можно только косвенным образом, через стек. Например, следующий фрагмент программы сбрасывает tf в ноль:

pushf

mov bp,sp

and [bp],0feffh

popf

if (interrupt enable)– флаг разрешения внешних прерываний. Если этот флаг установлен в ноль МП игнорирует запросы на прерывание, приходящие на вход INTR. Для работы с этим флагом есть две команды:

sti - if1разрешить внешние прерывания;

cli - if0запретить внешние прерывания.

df (direction)– флаг направления, задает автоинкремент или автодекремент регистров si и di в строковых командах. Программист имеет возможность влиять на этот флаг с помощью команд std и cld.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]