
- •Введение
- •1 Постановка задачи
- •2 Анализ предметной области
- •3 Разработка арифметико-логического устройства
- •4 Разработка гипотетического микропроцессора
- •5 Разработка структуры микро-эвм на базе гипотетического микропроцессора
- •6 Разработка программы эмуляции работы микро-эвм на базе гипотетического микропроцессора
3 Разработка арифметико-логического устройства
3.1 Общие положения разработки
В соответствии с заданием, арифметико-логическое устройство проектировалось как автомат с закрепленными микрооперациями. Данная структура АЛУ позволяет уменьшить сложность при разработке АЛУ, так как для выполнения каждой команды (SBB, IMUL и SAL) разрабатывается свой операционный автомат. Поскольку в АЛУ гипотетического микропроцессора должны выполняться только три команды, то и структурная схема конкретного АЛУ будет проще. Схема данного АЛУ будет отличаться от стандартной схемы АЛУ, синтезированного по способу ОМО.
3.2 Разработка ОА и микропрограммы операции SBB
Команда SBB - выполняет вычитание с займом. Данная команда аналогична SUB, но она вычитает из приемника значение источника и дополнительно вычитает значение флага CF. Ее можно использовать для вычитания 64-битных чисел в EDX:EAX и EBX:ECX аналогично ADD/ADC:
sub eax, ecx
sbb edx, ebx
Формат команды: SBB приемник, источник.
Размер команды: 2 байта.
Схема операционного автомата операции SBB приведена на рисунке 3.1.
Рисунок 3.1 – Схема ОА выполнения микрооперации SBB
Состав:
РП |
- регистр приемник |
РИ |
- регистр источник |
РР |
- регистр результата |
РФ |
- регистр флага |
БКЗ |
- блок контроля знака операндов |
ФК |
- формирователь кода |
КСМ |
- комбинационный сумматор |
Перечень шин: |
|
ШД |
- шина данных |
Перечень осведомительных сигналов:
X1 : |
БКЗ |
- переполнение (перенос/заем) |
Перечень микро-операций:
Y1 : |
РИ:= ОП2 |
загрузка в регистр ОП2 |
Y2 : |
РП:= CF |
загрузка в регистр РП флага переполнения |
Y3 : |
КСМ:= РИ + РП |
суммирование |
Y4 : |
ФК:=PP |
загрузка в ФК значения PP |
Y5 : |
РИ:= ОП1 |
загрузка в регистр ОП1 |
Y6 : |
КСМ:= РИ + ФК |
сложение |
Y7 : |
РР:= КСМ |
загрузка в РР результата |
Y8 : |
CF:= БКЗ |
установка флага переноса |
Микропрограмма автомата операции SBB, построенная по схеме рисунка 3.1, приведена на рисунке 3.2.
3.3 Разработка ОА и микропрограммы операции IMUL
Команда IMUL – умножение чисел со знаком. Источник (регистр или переменная) умножается на AL, AX или EAX (в зависимости от размера операнда), и результат располагается в AX, DX:AX или EDX:EAX соответственно. Результат может занимать в два раза больше места, чем размер источника. В данном случае приемник автоматически оказывается очень большим. Флаги OF и CF будут равны единице, если это произошло, и нулю, если результат умножения поместился целиком в младшую половину приемника. Значения SF, ZF, AF и PF после команды IMUL не определены.
Формат команды: IMUL источник.
Размер команды: 2 байта.
Схема операционного автомата операции IMUL приведена на рисунке 3.3.
Рисунок 3.2- Микропрограмма выполнения команды SBB
Рисунок 3.3 – Схема ОА микрооперации IMUL
Состав:
РП |
- регистр приемник |
РИ |
- регистр источник |
РЧС |
- регистр частичных сумм |
СЧ |
- счетчик |
БКЗ |
- блок контроля знака операндов |
ФК |
- формирователь кода |
КСМ |
- комбинационный сумматор |
CДВ |
- регистр сдвига |
Перечень шин |
|
ШД |
- шина данных |
Перечень осведомительных сигналов
X1 : |
CЧ = 0 |
- СЧ равен 0 - 1, не равен 0 |
X2 : |
РИ[n] = 0 |
- множимое положителен |
X3 : |
СЧ = 1 |
- СЧ равен 1 - 1, не равен 0 |
X4 : |
РП[n-1] = 0 |
- старший бит множителя равен 0 |
Перечень микроопераций
Y1 : |
РП := ОП2 |
Загрузка в регистр РП значения ОП2 |
Y2 : |
РИ := ОП1 |
Загрузка в регистр БР значения ОП1 |
Y3 : |
РЧС := 0 |
обнуление регистра РЧС |
Y5 : |
СДВ := РИ |
Заносим в СДВ содержимое РИ |
Y6 : |
L := L1(СДВ).0 |
сдвиг влево СДВ на 1 |
Y7 : |
РИ := СДВ |
Заносим содержимое СДВ в РИ |
Y8 : |
СДВ := РИ |
Заносим в СДВ содержимое РИ |
Y9 : |
РП := СДВ |
Заносим содержимое СДВ в РП |
Y10 : |
КСМ := РП + РЧС |
выполнить сложение |
Y11 : |
СДВ := РИ |
занести результат в СДВ |
Y12 : |
РИ := СДВ |
занести результат в РИ |
Y13 : |
РЧС := КСМ |
занести результат в РЧС |
Y14 : |
ФК:= РИ |
занести в ФК значение РИ |
Y15 : |
ФК:= РП |
занести в ФК значение РП |
Y16 : |
КСМ:=ФК+РЧС |
выполнить сложение ФК и РЧС |
Y17 : |
CЧ:= n - 1 |
установить начальное значение счетчика |
Y18 : |
ШД:= РЧС[07] |
Передать на шину данных младший байт результата |
Y19 : |
ШД:= РЧС[815] |
Передать на шину данных старший байт результата |
Y20 : |
R := 0.R1( СДВ) |
сдвиг вправо СДВ на 1 |
Микропрограмма автомата операции IMUL, построенная по схеме рисунка 3.3, приведена на рисунке 3.4.
3.4 Разработка ОА и микропрограммы операции SAL
Команда SAL выполняет арифметический сдвиг влево.
Формат команды: SAL приемник, счетчик.
Размер команды: 2 байта.
Схема операционного автомата операции SAL приведена на рисунке 3.5.
Рисунок 3.5- Схема ОА микрооперации SAL
Рисунок 3.6 – Микропрограмма автомата команды SAL
Состав:
РП |
- регистр приемник |
СF |
- флаг переноса |
L |
- ячейка спадающего разряда |
СЧ |
- счетчик |
РР |
- регистр результата |
СДВ |
- сдвигающий регистр |
Перечень шин |
|
ШД |
- шина данных |
Перечень осведомительных сигналов
X1 : |
m |
- количество циклов |
X2 : |
СЧ := 0 |
- счетчик равен 0 |
Перечень микроопераций
Y1 : |
РП := ОП1 |
- загрузка в регистр ОП1 |
Y2 : |
СЧ := 1 |
- установка счетчика |
Y3 : |
X := СЧ |
- присвоение значения счетчика переменной |
Y4 : |
СДВ := РП |
- заносим ОП в сдвигающий регистр |
Y5 : |
L:= СДВ |
- выполняем сдвиг вправо |
Y6 : |
СF := СДВ[n] |
- устанавливаем регистр флагов |
Y7 : |
СДВ[0] := 0 |
- возвращаем в младший бит СДВ значение 0 |
Y8 : |
РР:= СДВ |
- запоминаем результат операции |
Y9 : |
КСМ:=Х+1 |
- увеличиваем значение сумматора на 1 |
Y10 : |
СЧ:=КСМ |
- передаем счетчику значение сумматора |
Рисунок 3.4- Микропрограмма автомата команды IMUL
3.5 Структурная схема ОА АЛУ
АЛУ представляет собой ОА с ОМО, способный выполнять требуемые микрооперации SBB, SAL и IMUL. Он содержит в себе элементы, на которых выполняются эти операции, ОА которых представлены на рисунках 3.2, 3.4 и 3.6. Структурная схема операционного автомата АЛУ с ОМО представлена на рисунке 2.7.
Рисунок 3.7 – Схема ОА АЛУ
Состав АЛУ:
КЧ – комбинационная часть (представляет собой набор элементов, выполняющих МО);
Р1 – регистр хранения первого операнда;
Р2 – регистр хранения второго операнда;
Р3 – регистр результата.
Р1: Р3 – составляют запоминающую часть (ЗЧ) ОА.
Перечень шин:
А – шина внешних данных;
X, Y – входные шины КЧ;
Z – выходная шина КЧ;
AZ – входная шина запоминающей части.
Набор микроопераций:
yAZ
: AZ:=
{yi} : множество микроопераций КЧ;
{
}
: множество
микроопераций над входной шиной X
КЧ;
{
}
: множество
микроопераций над входной шиной Y
КЧ;
yA : прием сигналов с входной шины A
Осведомительные сигналы:
Xi: осведомительные сигналы результата (знак, переполнение, нечетность) – флаг переполнения OF, флаг нечетности PF, флаг знака SF, флаг переноса CF.
3.6 Микропрограмма работы АЛУ
Микропрограмма работы АЛУ представлена на рисунке 3.8; объединенный ОА АЛУ представлен на рисунке 3.9.
Рисунок 3.8 - Микропрограмма работы АЛУ
На основании ОА для выполнения заданных операций разработаем структуру обобщенного АЛУ, синтезированного по способу обобществленных микроопераций. Синтезированная структура АЛУ показана на рисунке 3.9 .
Рисунок 3.9 - Схема общего ОА АЛУ
В состав общего ОА АЛУ включены:
РП |
- регистр приемник |
РИ |
- регистр источник |
РР |
- регистр результата |
РФ |
- регистр флагов |
ФК |
- формирователь кода |
КСМ |
- комбинационный сумматор |
CДВ |
- двунаправленный регистр сдвига |
L и R |
- ячейки спадающих разрядов |
БФКР |
- блок формирования коррекции результата |
Перечень шин |
|
ШД |
- шина данных (является логическим продолжением А-шины процессора |
В состав общего ОА АЛУ включены следующие микрооперации:
Y1 : |
РП := ШД(ОП1) |
загрузка в регистр РП значения ОП2 |
Y2 : |
РИ := ШД(ОП2) |
загрузка в регистр РИ значения ОП1 |
Y3 : |
ФК := РП |
загрузка в ФК значения РП |
Y4 : |
ФК := РИ |
загрузка в ФК значения РИ |
Y5 : |
СЧ := n |
запись в счетчик значения n |
Y6 : |
СЧ := СЧ - 1 |
операция инкремента счетчика |
Y7 : |
РИ := РФ |
копирование регистра флагов в РИ |
Y8 : |
РИ := РФ |
копирование регистра результата в РИ |
Y9 : |
СДВ := КСМ |
передача данных в сдвиговый регистр |
Y10 : |
R := 1(СДВ).0 |
сдвиг вправо СДВ на 1 |
Y11 : |
L := 1(СДВ).0 |
сдвиг влево СДВ на 1 |
Y12 : |
- |
набор микроопераций корректировки результата при выполнении алгебраического сложения |
Y13 : |
- |
набор микроопераций корректировки результата при выполнении умножения |
Y14 : |
РФ (СF) := L |
запись случаев переноса или займа |
Y15 : |
РР(0) := L |
возврат в младший бит РР при циклических сдвигах |
Y16 : |
PP(n) := R |
возврат в старший бит РР при циклических сдвигах |
Y17 : |
ШД := РР |
возврат на внешнюю шину данных результата из РР |
Y18 : |
РР := СДВ |
передача данных в РР из сдвигающего регистра |
Y19 : |
АЛУ:=0 |
указание что АЛУ занято |
Y20 : |
АЛУ:=1 |
указание что АЛУ свободно |
Перечень осведомительных сигналов полностью повторяет осведомительные сигналы разработанные в ОА для выполнения заданного перечня операций.
Последовательность микроопераций опишем микрофункциями повторяющими микропрограммы, разработанные для отдельных операций и разместим их в микропрограммном устройстве управления (МУУ). В ММУ разместим также схему, формирующую укрупненные осведомительные сигналы. Приведем перечень осведомительных сигналов общего АЛУ:
X1 : |
Пуск АЛУ |
|
X2 : |
SAL |
- выполнение операции SAL |
X3 : |
SBB |
- выполнение операции SBB |
X4 : |
IMUL |
- выполнение операции IMUL |