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

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

Способы адресации

  1. Непосредственная.

КОП

Операнд

  1. Относительная.

КОП

База

Индекс

Смещение

  1. Прямая.

КОП

Исполнительный адрес

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

Согласно заданию команды имеют максимальную адресность – 3.

Команды делятся на несколько типов:

  1. Арифметические команды.

КОП

R1

R2

  1. Логические команды.

КОП

R1

[R2]

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

КОП

R1, [Addr]

Addr, [R2]

  1. Переходы.

КОП

Addr, [R1], {R1}

[Addr], {R2}

{Addr}

  1. Специальные.

КОП

R1, [Addr]

R2, [Addr]

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

Мнемоника

Название

Содержание

Флаги

Код

Z

C

S

O

I

T

U

Арифметические операции с целыми числами

1

ADD

Сложение

R1<=R1+R2

+

+

+

+

-

-

-

000001

2

ADDC

Сложение с учетом переноса

R1<=R1+R2+C

+

+

+

+

-

-

-

000010

3

SUB

Вычитание

R1<=R1-R2

+

+

+

+

-

-

-

000011

4

SUBC

Вычитание с учетом переноса

R1<=R1-R2-C

+

+

+

+

-

-

-

000100

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

5

AND

Поразрядное «И»

R1<=R1&R2

+

-

+

-

-

-

-

000101

6

OR

Поразрядное «ИЛИ»

R1<=R1|R2

+

-

+

-

-

-

-

000110

7

XOR

Поразрядное «Исключающее ИЛИ»

R1<=R1xorR2

+

-

+

-

-

-

-

000111

8

CPL

Инверсия

R1<=~R1

+

-

+

-

-

-

-

001000

9

SLL

Логический сдвиг влево

+

+

+

-

-

-

-

001001

10

SRL

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

+

+

+

-

-

-

-

001010

11

SRA

Арифметический сдвиг вправо

+

+

+

-

-

-

-

001011

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

12

LDDW

Загрузка двойного слова

R1<=<R2>

+

-

+

-

-

-

-

001100

13

LDW

Загрузка слова

R1<=<R2>

+

-

+

-

-

-

-

001101

14

LDH

Загрузка полуслова

R1<=<R2>

+

-

+

-

-

-

-

001110

15

LDB

Загрузка байта

R1<=<R2>

+

-

+

-

-

-

-

001111

16

STDW

Запись двойного слова

R1<=<R2>

-

-

-

-

-

-

-

010000

17

STW

Запись слова

R1<=<R2>

-

-

-

-

-

-

-

010001

18

STH

Запись полуслова

R1<=<R2>

-

-

-

-

-

-

-

010010

19

STB

Запись байта

R1<=<R2>

-

-

-

-

-

-

-

010011

Переходы

20

JMP

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

PC<=<R1>+R2

-

-

-

-

-

-

-

010100

21

JZ

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

PC<=<R1>+R2

-

-

-

-

-

-

-

010101

22

JNZ

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

PC<=<R1>+R2

-

-

-

-

-

-

-

010110

23

JO

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

PC<=<R1>+R2

-

-

-

-

-

-

-

010111

24

JNO

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

PC<=<R1>+R2

-

-

-

-

-

-

-

011000

25

JC

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

PC<=<R1>+R2

-

-

-

-

-

-

-

011001

26

JNC

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

PC<=<R1>+R2

-

-

-

-

-

-

-

011010

27

JE

Переход, если равны

PC<=<R1>+R3

-

-

-

-

-

-

-

011011

28

JNE

Переход, если не равны

PC<=<R1>+R3

-

-

-

-

-

-

-

011100

Специальные

29

CALL

Вызов процедуры

<SP><=PC

PC<=<R1>+R2

-

-

-

-

-

-

-

011101

30

RET

Возврат из процедуры

<PC><=SP

-

-

-

-

-

-

-

011110

31

MOV

Запись в регистр значения

R1<=R2

+

-

+

-

-

-

-

011111

32

MOVI

Запись в регистр значения

R1<=<R2>

+

-

+

-

-

-

-

100000

33

NOP

Нет операции

PC<=PC+1

-

-

-

-

-

-

-

000000

34

IN

Ввод из порта

R1<=<R2>

+

-

+

-

-

-

-

100001

35

OUT

Вывод в порт

<R1><=R2

-

-

-

-

-

-

-

100010

36

INT

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

<SP><=PC

-

-

-

-

+

+

+

100011

37

RETI

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

<PC><=SP

-

-

-

-

-

-

-

100100

38

HALT

Ожидание прерывания

-

-

-

-

-

-

-

100101

39

SU

Переход в режим суперпользователя

-

-

-

-

-

-

-

100110

40

RETU

Возврат в режим пользователя

-

-

-

-

-

-

-

100111

41

LFLG

Загрузка регистра флагов

R1<=Flags

-

-

-

-

-

-

-

101000

42

SFLG

Запись регистра флагов

Flags<=R1

-

-

-

-

+

+

+

101001

Арифметические операции с числами в форме с плавающей точкой

43

FADD

Сложение

F1<=F1+F2

+

-

+

+

-

-

-

101010

44

FSUB

Вычитание

F1<=F1-F2

+

-

+

+

-

-

-

101011

45

FMUL

Умножение

F1<=F1*F2

+

-

+

+

-

-

-

101100

46

FDIV

Деление

F1<=F1/F2

+

-

+

+

-

-

-

101101

47

FMOV

Обмен между регистрами

F1<=F2

+

-

+

-

-

-

-

101110

48

FRLD

Загрузка регистров

F1<=R1

+

-

+

-

-

-

-

101111

49

FRST

Запись из регистров

R1<=F1

+

-

+

-

-

-

-

110000

Полученная система команд является функциональной полностью и включает следующие наборы команд:

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

  2. Целочисленные арифметические для чисел (сложение, вычитание, с учетом и без учета переноса, сравнение);

  3. Арифметические с плавающей точкой (сложение, вычитание, умножение, деление);

  4. Логические (поразрядные «И», «ИЛИ», «Исключающее ИЛИ», инверсия);

  5. Сдвигов на 1 бит;

  6. Условных и безусловных переходов;

  7. Работы с подпрограммами;

  8. Загрузки в регистры непосредственно операндов;

  9. Ввода-вывода;

  10. Управления вычислительным процессом.

В данной архитектуре специально не использованы некоторые команды. Например, целочисленное умножение, деление, сравнение с ПТ, сдвиги на произвольное число тактов. Сделано это так, поскольку мы разрабатываем RISCпроцессор и для реализации этих команд потребуется написание несложных подпрограмм на основе реализованных команд. Эти подпрограммы можно как возложить на программиста, так и внести их в специальное хранилище этих подпрограмм и за счет этого получить расширенный набор команд.

Учитывая таблицу с командами и вышеописанный факт, можно однозначно сказать, что система команд – полнофункциональна.