3 Разработка гипотетического микропроцессора
3.1 Система команд гипотетического микропроцессора
Система команд гипотетического микропроцессора включает четыре команды: арифметико-логические – NOT и IMUL, посылки PUSH и команду перехода JNS.
3.1.1 Команда NOT
Команда NOT каждый бит операнда (регистр или переменная), равный нулю, устанавливает в единицу, и каждый бит, равный единице, сбрасывает в ноль. Флаги не затрагиваются. Код команды – F6, размер – 1 байт.
Алгоритм работы:
Послать на внутреннюю шину АЛУ (X) инверсные выходы триггеров регистра операнда;
Записать в регистр временного хранения результата (Z) данные, поступающие по шине X;
Выдать в качестве результата содержимое регистра Z.
3.1.2 Команда IMUL
Команда IMUL – умножение со знаком. В данном проекте реализуется умножение операнда1 (Р1) на операнд2 (Р2). Размер операндов – 16 бит (регистр операнда1 (Р1) – множимого, содержит 32 разряда, так как это необходимо для реализации умножения по алгоритму Б), размер регистра результата (РР) – 32 бита. Код операции 69, размер команды – 2 байта.
Если в результате выполнения команды произошло переполнение регистра результата, то флаги OF и CF установятся в единицу, в противном случае они сброшены. Значения флагов SF, ZF, AF, PF после выполнения команды IMUL не изменяются.
Формат команды: IMUL <РР >,<операнд1>,<операнд2>
Алгоритм выполнения:
Передать операнд1 в регистр Р1 АЛУ;
Передать операнд2 в регистр Р2 АЛУ;
Выполнить умножение в АЛУ;
Произвести коррекцию результата если второй операнд отрицателен;
Передать значение регистра РР АЛУ в качестве результата выполнения команды;
Установить флаги.
3.1.3 Команда PUSH
Посылочная команда PUSH помещает содержимое операнда в стек. Операндом может быть регистр, сегментный регистр или переменная. Команда уменьшает SP на размер операнда в байтах (2 или 4) и копирует содержимое источника в память по адресу SS:[SP]. Обычно команда PUSH используется в паре с командой POP (извлечение операнда из стека) для временного хранения переменных.
Код операции – 50, размер команды – 1 байт.
Формат команды: PUSH <операнд>.
Алгоритм работы команды:
скопировать содержимое операнда по адресу памяти SS:[SP];
уменьшить SP на размер операнда в байтах.
3.1.4 Команда JNS
Команда JNS осуществляет короткий относительный переход на указанную метку если нет знака (SF=0). Код операции – 70, размер команды – 2 байта.
Формат команды: JNS <метка>.
Алгоритм выполнения команды:
Извлечь из РК размер перехода (вычисляется относительно текущего положения и положения метки);
Проверить значение флага SF, если SF=1, то конец;
Иначе выполнить переход (IP:= IP + < размер перехода >).
3.2 Структура гипотетического микропроцессора
Поскольку в данном проекте реализуется выполнение лишь ограниченного набора команд, то структура гипотетического микропроцессора значительно упрощается по сравнению со структурой процессора-прототипа i8086. Такая упрощенная структура изображена на рисунке 3.1.
Рисунок 3.1 – Структура гипотетического микропроцессора
На рисунке 3.1 помимо базовых элементов процессора-прототипа (см. п. 1.1) присутствуют дополнительные элементы – таблица глобальных дескрипторов (GDT) и таблица локальных дескрипторов (LDT).