Скачиваний:
63
Добавлен:
03.06.2014
Размер:
617.98 Кб
Скачать

2.5. Выбор форматов команд

В соответствии с вариантом задания было выбрано четыре формата команд. Размер каждой команды равен 32 бита, что удобно при размещении команд в основной памяти и регистрах команд.

  1. Команды для работы с памятью.

Данный формат используется в командах записи в ОП и чтения из нее. В поле RG0 хранится 3-разрядный номер регистра, содержащий в зависимости от кода операции либо адрес для сохранения значения ячейки ОП по адресуAddrв регистре, либо записи значения изRG0 в ячейку ОП с адресомAddr.

Код операции

RG0

Addr

32 27 26 24 23 8 7 0

2) Команды для арифметических операций с непосредственной адресацией 8-разрядных операндов.

Данный формат команд включает трехразрядное поле с номером регистра (RG1), сохраняющего результат операции, и два восьмиразрядных константных операндаOP1 иOP2.

Код операции

RG1

OP1

OP2

32 27 26 24 23 16 15 9 8 0

3) Команды для арифметических операций с прямой адресацией операндов.

Данный формат используется для арифметических операций с операндами, хранящимися в регистрах RG3 иRG4. Результат записывается в регистрRG2.

Код операции

RG2

RG3

RG4

32 27 26 24 23 21 20 18 17 0

4) Команды условных переходов.

Команды данного формата имеют только два поля: код операции и смещение (DISP). При выполнении данных команд к счетчику командPCприбавляется значение поляDISP. Таким образом, данная команда реализует косвенную адресацию относительно базы – значения в регистреPC.

Код операции

DISP

32 27 26 11 10 0

Все пустые поля в форматах команд зарезервированы (не используются).

2.6. Разработка системы команд

Результаты проектирования приведены в таблице.

Таблица 6

Система команд

N

Мне-мони-ка

Название

Содержание

Флаги

Формат команды

Код

C

O

S

Z

T

I

Обращение к памяти по чтению и записи

0

RDBC

Чтение байта ОП по константному адресу

RG0<=ram(Addr)

1

000000

1

RDHC

Чтение полуслова ОП по константному адресу

RG0<=ram(Addr)

1

000001

2

WRBHC

Запись байта в ОП (старшая часть регистра) по константному адресу

RG0=>ram(Addr)

1

000010

3

WRBLC

Запись байта в ОП (младшая часть регистра) по константному адресу

RG0=>ram(Addr)

1

000011

4

WRHC

Запись полуслова в ОП по константному адресу

RG0=>ram(Addr)

1

000100

53

RDBR

Чтение байта ОП по адресу из регистра

RG2 <= ram(RG3)

3

110101

54

RDHR

Чтение полуслова ОП по адресу из регистра

RG2 <= ram(RG3)

3

110110

55

WRBHR

Запись байта в ОП (старшая часть регистра) по адресу из регистра

RG2 => ram(RG3)

3

110101

56

WRBLR

Запись байта в ОП (младшая часть регистра) по адресу из регистра

RG2 => ram(RG3)

3

111000

57

WRHR

Запись полуслова в ОП по адресу из регистра

RG2 => ram(RG3)

3

111001

5

MOV

Запись регистр/регистр

RG2<=RG3

3

000101

6

MOVC

Запись регистр/константа

RG1<=OP1.OP2

1

000110

7

IN

Чтение из порта

RG0<=Addr

1

001000

8

OUT

Запись в порт

RG0=>Addr

1

001001

Арифметические операции без знака

9

ADDR

Сложение рг/рг

RG2<=RG3+RG4

+

+

+

+

3

001010

10

SUBR

Вычитание рг/рг

RG2<=RG3-RG4

+

+

+

+

3

001011

11

MULR

Умножение рг/рг

RG2<=RG3*RG4

+

+

+

+

3

001100

12

DIVR

Деление рг/рг

RG2<=RG3/RG4

+

+

+

+

3

001101

13

ADDC

Сложение const/const

RG1<=OP1+OP2

+

+

2

001101

14

SUBC

Вычитание const/const

RG1<=OP1-OP2

+

+

2

001110

15

MULC

Умножение const/const

RG1<=OP1*OP2

+

+

2

001111

16

DIVC

Деление const/const

RG1<=OP1/OP2

+

+

2

010000

Арифметические операции со знаком

17

ADDSR

Сложение рг/рг

RG2<=RG3+RG4

+

+

+

+

3

001110

18

SUBSR

Вычитание рг/рг

RG2<=RG3-RG4

+

+

+

+

3

001111

19

MULSR

Умножение рг/рг

RG2<=RG3*RG4

+

+

+

+

3

010000

20

DIVSR

Деление рг/рг

RG2<=RG3/RG4

+

+

+

+

3

010001

21

ADDSC

Сложение const/const

RG1<=OP1+OP2

+

+

2

010101

22

SUBSC

Вычитание const/const

RG1<=OP1-OP2

+

+

2

010110

23

MULSC

Умножение const/const

RG1<=OP1*OP2

+

+

2

010111

24

DIVSC

Деление const/const

RG1<=OP1/OP2

+

+

2

011000

Логические операции

25

ANDR

Логическое умножение рг/рг

RG2<=RG3 & RG4

+

3

010010

26

ORR

Логическое сложение рг/рг

RG2<=RG3 | RG4

+

3

010011

27

XORR

Исключающее ИЛИ рг/рг

RG2<=XOR(RG3,RG4)

+

3

010100

28

NOTR

Инверсия рг

RG2<=~RG3

+

3

010101

29

RLCR

Циклический сдвиг влево рг

RG2<=RG3<<1

3

010110

30

RRCR

Циклический сдвиг вправо рг

RG2<=RG3>>1

3

010111

31

ANDC

Логическое умножение const/const

RG1 <= OP1 & OP2

2

011111

32

ORC

Логическое сложение const/const

RG1 <= OP1 v OP2

2

100000

33

XORC

Исключающее ИЛИ const/const

RG1 <= XOR(OP1, OP2)

2

100001

34

NOTC

Инверсия const

2

100010

Команды переходов

37

CALL

Вызов подпрограммы

R7<=PC

PC<=PC+DISP

4

011000

38

RET

Возврат из подпрограммы

PC<=R7

4

011001

39

JMP

Безусловный переход

PC<=PC+DISP

4

011010

40

JZ

Переход по нулю

PC<=PC+DISP

+

4

011011

41

JNZ

Переход не по нулю

PC<=PC+DISP

+

4

011100

42

JO

Переход по переполнению

PC<=PC+DISP

+

4

011101

43

JNO

Переход по не переполнению

PC<=PC+DISP

+

4

011110

44

JC

Переход по переносу

PC<=PC+DISP

+

4

011111

45

JNC

Переход не по переносу

PC<=PC+DISP

+

4

100000

46

JS

Переход по меньше нуля

PC<=PC+DISP

+

4

100001

47

JNS

Переход по не меньше нуля

PC<=PC+DISP

+

4

100010

Прерывания

48

RI

Сбросить флаг разрешения прерывания

I <= 0

+

4

100011

49

SI

Установить флаг разрешения прерывания

I <= 1

+

4

100100

50

INT

Вызов прерывания

PCI<=PC

FI<=F

+

+

+

+

+

4

100101

51

IRET

Возврат из прерывания

PC<=PCI

F<=FI

+

+

+

+

+

4

100110

Специальные операции

52

NOP

Нет операции

4

101001