logo
Пояснилка

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

3.1 Система команд гипотетического микропроцессора

Система команд гипотетического микропроцессора включает четыре команды: арифметико-логические – NOT и IMUL, посылки PUSH и команду перехода JNS.

3.1.1 Команда NOT

Команда NOT каждый бит операнда (регистр или переменная), равный нулю, устанавливает в единицу, и каждый бит, равный единице, сбрасывает в ноль. Флаги не затрагиваются. Код команды – F6, размер – 1 байт.

Алгоритм работы:

  1. Послать на внутреннюю шину АЛУ (X) инверсные выходы триггеров регистра операнда;

  2. Записать в регистр временного хранения результата (Z) данные, поступающие по шине X;

  3. Выдать в качестве результата содержимое регистра 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 в регистр Р1 АЛУ;

  2. Передать операнд2 в регистр Р2 АЛУ;

  3. Выполнить умножение в АЛУ;

  4. Произвести коррекцию результата если второй операнд отрицателен;

  5. Передать значение регистра РР АЛУ в качестве результата выполнения команды;

  6. Установить флаги.

3.1.3 Команда PUSH

Посылочная команда PUSH помещает содержимое операнда в стек. Операндом может быть регистр, сегментный регистр или переменная. Команда уменьшает SP на размер операнда в байтах (2 или 4) и копирует содержимое источника в память по адресу SS:[SP]. Обычно команда PUSH используется в паре с командой POP (извлечение операнда из стека) для временного хранения переменных.

Код операции – 50, размер команды – 1 байт.

Формат команды: PUSH <операнд>.

Алгоритм работы команды:

  1. скопировать содержимое операнда по адресу памяти SS:[SP];

  2. уменьшить SP на размер операнда в байтах.

3.1.4 Команда JNS

Команда JNS осуществляет короткий относительный переход на указанную метку если нет знака (SF=0). Код операции – 70, размер команды – 2 байта.

Формат команды: JNS <метка>.

Алгоритм выполнения команды:

  1. Извлечь из РК размер перехода (вычисляется относительно текущего положения и положения метки);

  2. Проверить значение флага SF, если SF=1, то конец;

  3. Иначе выполнить переход (IP:= IP + < размер перехода >).

3.2 Структура гипотетического микропроцессора

Поскольку в данном проекте реализуется выполнение лишь ограниченного набора команд, то структура гипотетического микропроцессора значительно упрощается по сравнению со структурой процессора-прототипа i8086. Такая упрощенная структура изображена на рисунке 3.1.

Рисунок 3.1 – Структура гипотетического микропроцессора

На рисунке 3.1 помимо базовых элементов процессора-прототипа (см. п. 1.1) присутствуют дополнительные элементы – таблица глобальных дескрипторов (GDT) и таблица локальных дескрипторов (LDT).