Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методочка лаба 3_1.doc
Скачиваний:
4
Добавлен:
05.12.2018
Размер:
124.93 Кб
Скачать

2.2. Выбор системы команд

2.2.1 Определение минимального набора операций в алу

Из приведенной блок-схемы видно, что минимальный набор операций в АЛУ должен быть следующим: арифметические операции - сложение, вычитание, умножение, деление, операции специальной арифметики - изменение знака числа, выделение абсолютной величины числа.

Далее составим полный список операций, с учетом дополнительных, связанных с ограничениями на кол-во операндов и место нахождения результата.

Операция

Операнд 1

Операнд 2

Результат

Примечание

1

Загрузка из памяти значений X1

x

Адрес в ОЗУ

x

2

Деление на Х2

x

Адрес в ОЗУ

x

3

Загрузка I

I

1

I

4

Пересылка

t

x

t

5

Пересылка

c

x

c

6

Изменение знака

c

-

c

7

Умножение

c

x

c

8

Умножение

c

x

c

9

Сложение

I

1

I

10

Деление

c

I

c

11

Cложение

I

1

I

12

Деление

c

I

c

13

Переход по условию равенства 0

c=0

Адрес команды

переход

14

Изменение знака

c

-

c

15

Сложение

t

c

t

16

Запись в память

t

Запись в ОЗУ

Цветом выделены неповторяющиеся операции, в данном частном случае их получилось 8. В случае одноадресной команды добавляются предварительные пересылки операнда 1 в аккумулятор и при необходимости копирование результата (пересылка из аккумулятора) в другой регистр, но общее количество неповторяющихся операций останется прежним. Таким образом, под код операции необходимо выделить log28=3 бита. И оставшиеся 5 бит можно использовать для адресации к 4 регистрам общего назначения (по 2 бита на определение регистра для каждого операнда), которое могут быть введены в СПВВ. Тогда переменные (t, I, c, Х) можно хранить в регистрах.

2.2.2. Выбор способа адресации команд

Для задания адреса операнда можно использовать следующие способы:

  1. непосредственная адресация, когда в адресном поле непосредственно содержится сам операнд;

  2. прямая адресация, когда указывается адрес ячейки памяти хранения операнда. Если операнд хранится в ОЗУ, то для доступа к нему необходимо 8-бит для его произвольного размещения в ОЗУ.

  3. косвенная адресация, когда указывается адрес ячейки, содержащих полноразрядный адрес операнда. Что возможно реализовать, за счет выделения начальных адресов памяти под хранение адресов операндов, находящихся по произвольным адресам.

  4. регистровая адресация - это прямая с указанием регистра, в котором хранится операнд. (Эта адресация является наиболее подходящей, так как для реализации поставленной задачи достаточно переменных. И для адресации одного из 4 регистров потребуется 2 бита).

Использовать адресацию со смещением для такой простой задачи с небольшим адресным пространством смысла не имеет.

Для задания адреса перехода используется относительнуя адресация относительно счетчика команд, когда в адресном поле команды указывается смещение относительно текущего адреса команды (для программы имеющей 16 команд, см. табл. 1, 4 бита на смещение и 1 бит под направление переход: назад или вперед).

Минимальная разрядность команды получиться при регистровой адресации для операнда и косвенной регистровой для команды перехода (4бита), но в таком случае необходимы дополнительные аппаратные ресурсы (выделение дополнительного регистра для постоянного хранения адреса перехода). Поэтому лучше отказаться от данного варианта.

Таким образом, возможна следующая система команд.

Команда

Код команды

Примечание

1

2

3

4

5

6

7

8

МЕМ

0

*

*

*

*

*

*

*

Взять адрес из памяти

ADD

1

0

0

1

R1

R2

Сложение

MUL

1

0

1

0

R1

R2

Целочисленное умножение

DIV

1

0

1

1

R1

R2

Без знаковое деление

IFGO

1

1

0

0

смещение

Переход по истине

IFTO

1

1

0

1

смещение

Переход по лжи

NEG

1

1

1

0

0

0

R2

Изменение знака

INC

1

1

1

0

0

1

R2

Инкремент

MOV

1

1

1

1

R1

R2

Пересылка

пустые

1

1

1

0

1

0

*

*

1

1

1

0

1

1

*

*

1

0

0

0

*

*

*

*

Данная система команд использует одну команду для записи и чтения из памяти. Поэтому для того чтобы определить запись или чтение необходимо дополнительное условие – значение регистра, выделенного под переменную I (счетчик итераций) = 0 – выполняется операция чтения из памяти, >0 – выполняется операция запись в память.