logo
КП_2007

5 Разработка гипотетического микропроцессора

5.1 Разработка структуры микропроцессора

Гипотетический микропроцессор, разрабатываемый в данном курсовом проекте, основан на архитектуре микропроцессора i386. Он содержит: регистры общего назначения, сегментные регистры, микропрограммное устройство управления, устройство управления и синхронизации, 32-разрядное арифметико-логическое устройство, регистры указателей, индексные регистры, регистр команд, регистр флагов, устройство сегментации.

Общая структурная схема микропроцессора приведена на рисунке 5.1.

Рисунок 5.1 – Общая структурная схема микропроцессора

Пояснение к схеме:

К регистрам общего назначения относятся:

Все регистры общего назначения 32-разрядные.

Регистры указателей ESP и EBP используются для работы со стековым сегментом: ESP – содержит адрес вершины стека, EBP – хранит адрес начального элемента массива данных в стековом сегменте. Эти регистры 32-разрядные. Возможно обращение к младшим 2-м байтам: SP – для регистра ESP и BP – для регистра EBP.

Регистры индексов используются для доступа к элементам массива. ESI – регистр индекса источника, хранит смещение адреса для чтения, EDI – регистр индекса приемника, хранит смещение адреса для записи. Эти регистры также 32-разрядные. Возможно обращение к младшим 2-м байтам: SI – для регистра ESI и DI – для регистра EDI.

Сегментные регистры индексируют глобальную дескрипторную таблицу, в записях которой хранятся базовые адреса сегментов. Используется четыре 16-разрядных сегментных регистра для адресации логических частей программы: CS – регистр сегмента команд, косвенно (через глобальную дескрипторную таблицу) адресует сегмент памяти, в котором хранится выполняемая программа, DS – регистр сегмента данных, косвенно адресует сегмент памяти, содержащий обрабатываемые данные, SS – регистр сегмента стека, косвенно адресует сегмент памяти, называемый сегментом, данные в котором хранятся по принципу LIFO, ES – косвенно адресует регистр дополнительного сегмента, в котором может храниться информация.

Регистр адреса команды EIP – хранит 32-разрядный адрес очередной команды, которая должна извлекаться из сегмента команд памяти.

48-разрядный регистр GDTR содержит в младших 32-х битах начальный адрес глобальной дескрипторной таблицы. Старшие 16-ть бит содержат максимальное смещение в глобальной дескрипторной таблице.

Регистр управления CR3 содержит в старших разрядах 20-битный физический базовый адрес каталога страниц и называется регистром базового адреса каталога страниц.

Регистр команд предназначен для хранения кода операции текущей команды. При необходимости из него считывается непосредственное значение операнда или его адрес в памяти.

Регистры BR1 и BR2 используются для временного хранения операндов арифметико-логических операций.

RO – используется для обмена между устройством сегментации и внутренней шиной процессора.

R1, R2 – регистры временного хранения составляющих для вычисления физического адреса.

БА – буферный регистр адреса, БД – буферный регистр данных. Используются для обмена с памятью.

5.2 Система команд микропроцессора

Система команд гипотетического микропроцессора включает такие команды: арифметические – IMUL, ADD, INC, пересылки MOV, XCHG и команду перехода JMP, JC/JNC.

Команда ADD

ADD Сложение целых чисел.

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

Команда ADD выполняет сложение независимо от состояния флага переноса.

Последовательность команд:

14EB:0100 90 NOP

14EB:0101 B80000 MOV AX,0000

14EB: 0104 0440 ADD AL,40

14EB: 0106 1440 ADC AL,40

14EB: 0108 1440 ADC AL,40

14EB: 010A 1440 ADC AL,40

14EB: 010C 1440 ADC AL,40

14EB:010E 90 NOP

Регистры и флаги перед выполнением:

AX=0041 BX=0000 CX=0000 DX=0000 SP=EA04 BP=0000

SI=0000 DI=0000 DS=14EB ES=14EB SS=14EB CS=14EB

IP=0101

NV UP EI PL NZ NA PE NC

14EB:0101 B80000 MOV AX,0000

AX=0000 BX=0000 CX=0000 DX=0000 SP=EA04 BP=0000

SI=0000 DI=0000 DS=14EB ES=14EB SS=14EB CS=14EB

IP=0104

NV UP EI PL NZ NA PE NC

14EB: 0104 0440 ADD AL,40

AX=0040 BX=0000 CX=0000 DX=0000 SP=EA04 BP=0000

SI=0000 DI=0000 DS=14EB ES=14EB SS=14EB CS=14EB

IP=0106

NV UP EI PL NZ NA PO NC

*

Команда ADD устанавливает нечетность флага четности, потому что число установленных битов в младших 8 разрядах нечетно.

14EB: 0106 0440 ADD AL,40

AX=0080 BX=0000 CX=0000 DX=0000 SP=EA04 BP=0000

SI=0000 DI=0000 DS=14EB ES=14EB SS=14EB CS=14EB

IP=0108

OV UP EI NG NZ NA PO NC

* *

Поскольку результат сложения как знаковое 8-разрядное число не помещается в регистр AL, устанавливается флаг переполнения. Знаковый бит числа также устанавливается, в результате флаг знака делается отрицательным.

14EB: 0108 0440 ADD AL,40

AX=00С0 BX=0000 CX=0000 DX=0000 SP=EA04 BP=0000

SI=0000 DI=0000 DS=14EB ES=14EB SS=14EB CS=14EB

IP=010А

NV UP EI NG NZ NA PE NC

*

Основное изменение в состоянии флагов заключается в сбросе флага переполнения: теперь результат как знаковая величина помещается в регистре-приемнике. В младших 8 разрядах установлено 2 бит, поэтому флаг четности устанавливается четным.

14EB: 010А 0440 ADD AL,40

AX=0000 BX=0000 CX=0000 DX=0000 SP=EA04 BP=0000

SI=0000 DI=0000 DS=14EB ES=14EB SS=14EB CS=14EB

IP=010С

NV UP EI PL ZR NA PE CY

* *

В результате выполнения этой команды ADD возникает перенос из регистра-приемника. Устанавливается флаг переноса. Поскольку знаковый бит результата сброшен, флаг знака делается положительным. Результат равен 0, поэтому устанавливается флаг нуля.

14EB: 010C 0440 ADD AL,40

AX=0040 BX=0000 CX=0000 DX=0000 SP=EA04 BP=0000

SI=0000 DI=0000 DS=14EB ES=14EB SS=14EB CS=14EB

IP=010E

NV UP EI PL NZ NA PO NC

* * *

Эта команда ADD изменяет состояние флага нуля на ненулевое значение, сбрасывает флаг переноса и сбрасывает флаг четности.

Исключения для реального режима:

Прерывание 13 генерируется, если любая часть операнда в памяти имеет эффективный адрес больший, чем FFFFh в сегментах СS, DS, ЕS, FS, или GS. Если любая часть операнда памяти имеет эффективный адрес больший, чем FFFFh в стековом сегменте SS, то генерируется прерывание 12.

Исключения для защищенного режима:

Общая исключительная ситуация защиты (13) генерируется с кодом ошибки 0000h для операндов, расположенных в сегментах СS, DS, ЕS, FS, или GS в случае, если принимающий операнд расположен в сегменте, запись в который запрещена, или передающий операнд расположен в сегменте, из которого запрещено считывание, а также если любая часть операнда расположена по эффективному адресу выше границы сегмента. Стековая исключительная ситуация (12) с кодом ошибки 0000h для операндов, расположенных в стековом сегменте, генерируется в случае, если любая часть операнда имеет эффективный адрес выше границы сегмента. Стековая исключительная ситуация с кодом ошибки селектора сегмента возникает, если операнд в памяти находится в стековом сегменте SS, который помечен как отсутствующий в памяти. Исключительная ситуация отсутствия с кодом ошибки селектора сегмента возникает в случае, если операнд памяти находится в каком - либо из сегментов DS, ЕS, FS, GS, отмеченном как несуществующий. Может возникнуть исключительная ситуация потери страницы (14) с кодом ошибки потери линейным адресом ошибки страницы в регистре СR2.