Скачиваний:
26
Добавлен:
01.05.2014
Размер:
640.51 Кб
Скачать

6. Регистровая модель процессора

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

количество – 16;

универсальные;

разрядность – 32.

FLAGS

R0

R1

R2

R30

R31

Z C S O I T U

Рис.3

В соответствии с техническим заданием необходимо реализовать тридцать два 32-разрядных универсальных регистра общего назначения R0-R31. Эти регистры доступны для пользователя как на чтение, так и на запись.

Регистры PC, BVA, Flags, TLBP, TINT – являются системными.

PC - 32-x разрядный счетчик команд. При сбросе ЦП PC принимает нулевое состояние, который, таким образом, является адресом первой исполняемой команды, иначе говоря, выполнение программы начинается с нулевой ячейки. Содержимое программного счетчика после выборки очередной команды из памяти автоматически инкрементируется, так что в PC появляется адрес следующей команды. C его помощью устройство выборки команд считывает слова, начиная с адреса записанного в PC.

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

Flags – 8-разрядный регистр флажков. Если происходит одно из событий, которые могут отражаться в этом регистре, то происходит установка того или иного флажка.

Z- признак нулевого результата;

C- признак переноса из старшего разряда;

S- знак результата ;

O- признак переполнения результата;

I- разрешения прерывания;

T- пошаговый режим;

U- флаг супервизор- пользователь;

TLBP- 32-разрядный регистр указатель на таблицу переадресации.

TINT – 32-разрядный регистр указатель на таблицу векторов прерываний.

Masks – 8-разрядный регистр маскирования прерываний.

Любой из РОН может использоваться для хранения числа любого из заданных форматов. Размещение чисел с ПТ можно, начиная с любого РОН.

IR – регистр команд.

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

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

Тип операции

Примеры

Арифметические и логические

Целочисленные арифметические и логические операции: сложение, вычитание, логическое сложение, логическое умножение и т.д.

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

Операции сложения, вычитания, умножения и деления над вещественными числами

Пересылки данных

Операции загрузки/записи

Управление потоком команд

Безусловные и условные переходы, вызовы процедур и возвраты

Системные операции

Системные вызовы, команды управления виртуальной памятью и т.д.

Десятичные операции

Десятичное сложение, умножение, преобразование форматов и т.д.

Операции над строками

Пересылки, сравнения и поиск строк

Система команд разрабатываемого ЦП приведена в таблице 1.

Если в результате команды происходит установка каких либо флажков, то в соответствующей клетке таблицы находится знак +, в противном случае -.

Назначение полей DEST, SRC1, SRC2 описано в разделе «Формат команд».

Если какое-то значение берётся не из SRC1 или SRC2, а из ячейки регистровой памяти, адрес которой содержится в SRC1 или SRC2, то соответствующие поля записываются в [x]-ых скобках. В <x>-ых скобках указывается значения по заданному адресу ОП. В командах сдвига SHL и SHR, содержимое регистра SRC1 сдвигается на SRC2 разряда, после чего результат записывается в регистр DEST. Способ адресации указывается в формате команды полем AMD. Если используется относительная адресация, то номер регистра, содержащего базовый адрес, записывается в SRC1, а непосредственно смещение или номер регистра индекса в SRC2.

Таблица 1

N

Мне-моника

Название

Содержание

Флажки

КОП

C

Z

S

O

T

I

U

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

1

ldb

Загрузить байт

[DEST] <= <[SRC1]+SRC2>

-

-

-

-

-

-

-

0000000

2

ldh

Загрузить слово

[DEST] <= <[SRC1]+SRC2>

-

-

-

-

-

-

-

0000001

3

ldd

Загрузить двойное слово

[DEST] <= <[SRC1]+SRC2>

-

-

-

-

-

-

-

0000010

4

svb

Сохранить байт

<[SRC1]+SRC2> <= [DEST]

-

-

-

-

-

-

-

0000011

5

svh

Сохранить слово

<[SRC1]+SRC2> <= [DEST]

-

-

-

-

-

-

-

0000100

6

svd

Сохранить двойное слово

<[SRC1]+SRC2> <= [DEST]

-

-

-

-

-

-

-

0000101

7

ldf

Загрузить число с ПТ

[DEST] <= <[SRC1]+SRC2>

-

-

-

-

-

-

-

0000110

8

svf

Сохранить число с ПТ

<[SRC1]+SRC2> <= [DEST]

-

-

-

-

-

-

-

0000111

9

mov

Переслать число

[DEST] <= [SRC2]

-

-

-

-

-

-

-

0001000

10

movf

Переслать число с ПТ

[DEST] <= [SRC2]

-

-

-

-

-

-

-

0001001

Целочисленные арифметические для чисел со знаком и без знака

11

add

Сложение с ФТ

[DEST] <= [SRC1]+[SRC2]

+

+

+

+

-

-

-

0001010

12

sub

Вычитание с ФТ

[DEST] <= [SRC1]-[SRC2]

+

+

+

+

-

-

-

0001011

13

mul

Умножение с ФТ

[DEST] <= [SRC1]*[SRC2]

+

+

+

+

-

-

-

0001100

14

div

Деление с ФТ

[DEST] <= [SRC1]/[SRC2]

+

+

+

+

-

-

-

0001101

Арифметические с ПТ

15

addf

Сложение с ПТ

[DEST] <= [SRC1]+[SRC2]

+

+

+

+

-

-

-

0001110

16

subf

Вычитание с ПТ

[DEST] <= [SRC1]-[SRC2]

+

+

+

+

-

-

-

0001111

17

mulf

Умножение с ПТ

[DEST] <= [SRC1]*[SRC2]

+

+

+

+

-

-

-

0010000

18

divf

Деление с ПТ

[DEST] <= [SRC1]/[SRC2]

+

+

+

+

-

-

-

0010001

Логические

19

and

И

[DEST] <= [SRC1]&[SRC2]

-

+

+

-

-

-

-

0010010

20

or

ИЛИ

[DEST] <= [SRC1] | [SRC2]

-

+

+

-

-

-

-

0010011

21

xor

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

[DEST] <= [SRC1]^[SRC2]

-

+

+

-

-

-

-

0010100

22

not

Инвертирование

[DEST] <= ![SRC1]

-

+

+

-

-

-

-

0010101

Сдвигов на произвольное число тактов

23

shr

Сдвиг вправо

[DEST] <= [SRC1]>>[SRC2]

+

-

-

+

-

-

-

0010110

24

shl

Сдвиг влево

[DEST] <= [SRC1]<<[SRC2]

+

-

-

+

-

-

-

0010111

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

25

jmp

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

PC <= [SRC1]+SRC2

-

-

-

-

-

-

-

0011000

26

jz

Условный переход по флагу Z=0

PC <= [SRC1]+SRC2

-

-

-

-

-

-

-

0011001

27

jnz

Условный переход по флагу Z=1

PC <= [SRC1]+SRC2

-

-

-

-

-

-

-

0011010

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

28

call

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

Rt <= PC, PC <= [SRC1]+SRC2

-

-

-

-

-

-

-

0011011

29

ret

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

PC <= Rt

-

-

-

-

-

-

-

0011100

Ввода вывода

30

in

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

[DEST] <= port([SRC1]+SRC2])

-

-

-

-

-

-

-

0011111

31

out

Запись байта в порт

port([SRC1]+SRC2]) <= [DEST]

-

-

-

-

-

-

-

0100000

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

32

di

Запрет прерывания

-

-

-

-

-

1

-

0100001

33

ei

Разрешение прерывания

-

-

-

-

-

0

-

0100010

34

int

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

Rt <= PC, PC <= [SRC1]+SRC2

-

-

-

-

-

1

-

0100011

35

iret

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

PC <= Rt

-

-

-

-

-

0

-

0100100

36

frd

Чтение флагов

[DEST] <= Flags

-

-

-

-

-

-

-

0100101

37

fwr

Запись флагов

Flags <= [DEST]

+

+

+

+

+

+

+

0100110

38

trd

Чтение TLBP

[DEST] <= TINT

-

-

-

-

-

-

-

0100111

39

twr

Запись TLBP

TINT <= [DEST]

-

-

-

-

-

-

-

0101000

40

ird

Чтение TINT

[DEST] <= TINT

-

-

-

-

-

-

-

0101001

41

iwr

Запись TINT

TINT <= [DEST]

-

-

-

-

-

-

-

0101010

42

scall

Переход в супервизора

-

-

-

-

-

-

1

0101011

43

rfe

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

-

-

-

-

-

-

0

0101100

44

etr

Пошаговый режим

-

-

-

-

1

-

-

0101101

45

dtr

Выход из пошагового р.

-

-

-

-

0

-

-

0101110

46

nop

Нет операции

PC <= PC+1

-

-

-

-

-

-

-

0101111

Логика установки флажков

Регистр флажков содержит информацию о признаках результатов арифметических или логических операций, выполняемых в АЛУ.

  • Если в результате предыдущей операции получился 0, то флаг Z устанавливается в единицу, в противном случае в 0.

  • Если в результате предыдущей операции произошло переполнение, то флаг O устанавливается в 1, в противном случае в 0.

  • Если в результате предыдущей операции произошёл перенос из старшего разряда, то флаг C устанавливается в 1, в противном случае в 0.

  • Если в результате предыдущей операции получено отрицательное число, то флаг S устанавливается в 1, в противном случае в 0.