
- •Введение
- •1 Постановка задачи
- •2 Анализ предметной области
- •3 Разработка арифметико-логического устройства
- •4 Разработка гипотетического микропроцессора
- •5 Разработка структуры микро-эвм на базе гипотетического микропроцессора
- •6 Разработка программы эмуляции работы микро-эвм на базе гипотетического микропроцессора
4 Разработка гипотетического микропроцессора
4.1 Система команд гипотетического микропроцессора
Система команд гипотетического микропроцессора включает такие команды: арифметические операции SBB, IMUL, посылочные MOV, SAHF, команды перехода JPM, JL и логические/специальные SAL, CLC.
4.1.1 Команда SBB
Формат команды: SBB [приемник], [источник]
Команда SBB - выполняет вычитание с займом. Данная команда аналогична SUB, но она вычитает из приемника значение источника и дополнительно вычитает значение флага CF. Ее можно использовать для вычитания 64-битных чисел в EDX:EAX и EBX:ECX аналогично ADD/ADC:
sub eax, ecx
sbb edx, ebx
Алгоритм выполнения SBB EAX, EBX:
Извлечь из кода команды коды регистров или регистра;
занести в A первый операнд;
если в качестве второго операнда выступают данные из памяти, то извлечь из кода команды адрес второго операнда;
выполнить команду вычитания;
записать результат в регистр, который является результирующим;
занести значение регистра результата в качестве первого операнда;
в качестве второго – значение флага CF;
выполнить команду вычитания;
записать результат в регистр, который является результирующим;
занести значение регистра результата в EAX;
сформировать флаги.
4.1.2 Команда IMUL
Формат команды: IMUL [источник]
Команда IMUL – умножение чисел со знаком. Источник (регистр или переменная) умножается на AL, AX или EAX (в зависимости от размера операнда), и результат располагается в AX, DX:AX или EDX:EAX соответственно. Результат может занимать в два раза больше места, чем размер источника. В данном случае приемник автоматически оказывается очень большим. Флаги OF и CF будут равны единице, если это произошло, и нулю, если результат умножения поместился целиком в младшую половину приемника. Значения SF, ZF, AF и PF после команды IMUL не определены.
Алгоритм выполнения IMUL EAX, ECX:
Извлечь из EAX значение А в первый операнд;
извлечь из ECX значение B во второй операнд;
произвести операцию перемножения между А и В;
занести результат в регистр результата;
сформировать флаги;
записать из результат регистра результата в EAX .
4.1.3 Команда CLC
Формат команды: CLC.
Команда CLC выполняет сброс флага переноса.
Алгоритм выполнения CLC:
Извлечь значение из CF в первый операнд;
во второй операнд заносим значение «0»;
заменяем значение первого операнда на второй;
помещаем ответ в регистр результата;
сформировать флаги;
поместить в CF значение регистра результата, то есть всегда 0.
4.1.4 Команда MOV
Формат команды: MOV [приемник], [источник]
Базовая команда пересылки данных. Копирует содержимое источника в приемник, источник не изменяется. Команда MOV действует аналогично операторам присваивания из языков высокого уровня, за исключением того, что команда ассемблера позволяет работать не только с переменными в памяти, но и со всеми регистрами процессора.
В качестве источника для MOV могут использоваться: число, регистр общего назначения, сегментный регистр или переменная; в качестве приемника: регистр общего назначения, сегментный регистр (кроме CS) или переменная. Оба операнда должны быть одного и того же размера – байт, слово или двойной слово.
Алгоритм выполнения MOV EAX, EBX:
Извлечь значение из EBX;
заменить значение регистра EAX на значение регистра EBX.
4.1.5 Команда JMP
Формат команды: JMP [addr]
Команда перехода JMP осуществляет безусловный переход на метку. Адрес метки может быть как 8 так и 16 разрядным.
Алгоритм выполнения JMP [addr] представляет переход по адресу, который получается путем CS+[addr].
4.1.6 Команда SAHF
Формат команды: SAHF
Команда SAHF загружает флаги SF, ZF, AF, PF и CF из регистра AH значениями битов 7, 6, 4, 2 и 0 соответственно. Зарезервированные биты 1, 3 и 5 регистра флагов не изменяются.
Алгоритм выполнения SAHF:
Извлечь значение из регистра AH;
значение флага SF становится равным 7 биту регистра AH;
значение флага ZF становится равным 6 биту регистра AH;
значение флага AF становится равным 4 биту регистра AH;
значение флага PF становится равным 2 биту регистра AH;
значение флага CF становится равным 0 биту регистра AH.
4.1.7 Команда JL
Формат команды: JL [addr]
Команда перехода JL осуществляет переход по условию на метку (SF<OF, если меньше). Данная команда относится к набору команд Jcc, выполняющих переход (типа short или near), если удовлетворяется соответствующее условие, которым в каждом случае реально является состояние тех или иных флагов. Но, когда команда из набора Jcc используется сразу после CMP, условия приобретают формулировки, соответствующие отношениям между операндами CMP [приемник], [источник]. Например, если приемник меньше источника, то команда JL, выполненная сразу после CMP, осуществит переход. Операнд для всех команд из набора Jcc – 8-битное или 32-битное смещение относительно текущей команды.
Команды Jcc не поддерживают дальних переходов, поэтому, если требуется выполнить условный переход на дальнюю метку, необходимо использовать команду из набора Jcc с обратным условием и дальний JMP.
Алгоритм выполнения JL [addr]:
Выполняется команда сравнения CMP [приемник], [источник];
если приемник меньше источника, то выполняется команда JL, иначе – следующая команда за JL.
4.1.8 Команда SAL
Формат команды: SAL [приемник], [счетчик]
Операция сдвига. Данная команда выполняет двоичный сдвиг приемника (регистр или переменная) влево (в сторону старшего бита) на значение счетчика (число или регистр CL, из которого учитываются только младшие 5 бит, принимающие значения от 0 до 31). Операция сдвига на 1 эквивалентна умножению (сдвиг влево) или делению (сдвиг вправо) на 2. Команда SAL – на каждый шаг сдвига старший бит заносится в CF, все биты сдвигаются влево на одну позицию, и младший бит обнуляется.
Алгоритм выполнения SAL:
Извлечь значение из CL;
выполнить такое число сдвигов, которое равно значению, извлеченному из CL.
4.2 Структура гипотетического микропроцессора
Система команд гипотетического микропроцессора составляет только 5 команды, поэтому его структурная схема значительно проще, чем структурная схема микропроцессора-прототипа. Многие элементы микропроцессора-прототипа вообще не используются, поэтому они не входят в разработанную схему. Получившаяся в результате упрощений структурная схема приведена на рисунке 4.1.
Состав схемы на рисунке 4.1:
УУ – устройство управления;
РК – регистр команд;
РР – регистр результата АЛУ
РА – регистр адреса;
ОП1, ОП2 – регистры операндов АЛУ;
РФ – регистры флагов (OF, IF, TF, SF, ZF, CF, PF, AF);
МУУ – местное устройство управления;
РОН – регистры общего назначения (AX, BX, CX, DX);
АЛУ – арифметико-логическое устройство;
СФА – сумматор физического адреса;
БАД – буфер адреса данных
ОЗУ – оперативно-запоминающее устройство;
ОК – очередь команд;
СР+ – сегментные регистры (CS, DS, ES, SS);
БВЭА – блок вычисления эффективного адреса.
Рисунок 4.1- Структурная схема гипотетического микропроцессора
4.3 Микропрограмма выполнения команд
На одинаковых элементах микропроцессора часто выполняются разные операции это зависит от выполняемой команд. За правильностью выполнения работы процессора следит устройство управления, которое синхронизирует работу устройств и направляет потоки данных управляющими сигналами. Эти сигналы вырабатываются как ответ на осведомительные сигналы каждого из элементов микропроцессора, который посылает их по завершении выполнения очередной операции. Осведомительные сигналы в устройстве управления активизируют те или иные ветви микропрограммы работы устройства управления. Микропрограмма выполнения команд гипотетического микропроцессора приведена на рисунке 4.2.
0
0 1
1 0
1
0
0 1
1
0
0
0
1 1
0 1
Рисунок 4.2 – Микропрограмма выполнения команд