- •1. Техническое задание
- •1.1. Предмет проектирования
- •1.2. Общие требования
- •1.3. Исходные данные
- •2. Разработка архитектуры цп
- •2.1. Уточнение структуры системы
- •2.2. Архитектура внешних выводов
- •2.3. Выбор форматов данных
- •2.4. Выбор формата команд
- •2.5. Определение модели памяти
- •2.6. Разработка системы команд
- •2.7. Внутренняя организация
- •2.8 Структура кэш-памяти
- •Кэш команд
- •Кэш данных
- •2.9 Структурно-функциональная схема процессора
2.5. Определение модели памяти
Структура регистровой памяти представляет собой
восемь 16-разрядных функционально-ориентированных (ФО) регистров R0…R7;
один 16-разрядный регистр PC– счётчик команд, а также один 16-разрядный регистрPCI, хранящий адрес команды, выполнение которой было прервано при прерывании;
два 6-разрядных регистра FиFI, хранящих флаги, один из которых (FI) необходим для сохранения флагов при прерывании;
РК– регистр команд;
РД– регистр данных;
РА– регистр адреса;
АР1, АР2, АР3– внутренние регистры АЛУ, хранящие 1, 2 операнды и результат;
2.6. Разработка системы команд
В соответствии с выбранными форматами команд были выбраны сами команды. Результат проектирования – в таблице ниже.
Как было указано в предыдущем пункте, номер формата команды состоит из значений полей Пi, т.е. из следующих значений:
0 – операнд не используется;
1 – непосредственная;
2 – прямая;
3 – относительная;
Флаги, описывающие состояние процессора хранятся в регистре F (при прерывании –FI):
Z – признак нулевого результата;
C– признак переноса из старшего разряда;
S– знак результата;
O– признак переполнения результата;
I– разрешение прерывания;
T– пошаговый режим;
Таблица 2.6.1
№ |
Мнемо-ника |
Описание |
Содержание |
Флаги |
ФК |
КОП | |||||
Z |
C |
S |
O |
I |
T | ||||||
Прерывания Маска: 0000XX | |||||||||||
00 |
INT |
Вызов прерывания |
PCI ← PC FI ← F |
Z |
C |
S |
O |
|
T |
О-3 |
000000 |
01 |
CLI |
Запретить прерывания (сбросить флаг) |
IF ← 0 |
|
|
|
|
I |
|
А-0 |
000001 |
02 |
STI |
Разрешить прерывания (установить флаг) |
IF ← 1 |
|
|
|
|
I |
|
А-0 |
000010 |
03 |
IRET |
Возврат из прерывания |
PCI → PC FI → F |
Z |
C |
S |
O |
|
T |
А-0 |
000011 |
Чтение / Запись Маски: 0001XX, 0010XX, 0011XX | |||||||||||
04 |
MOV |
Передача данных из источника в приёмник |
A1 ← A2 |
|
|
|
|
|
|
А-2 |
000100 |
05 |
IN |
Чтение из порта |
A1 ← [address] |
|
|
|
|
|
|
А-2 |
000101 |
06 |
OUT |
Запись в порт |
A2 → [address] |
|
|
|
|
|
|
А-2 |
000110 |
07 |
STS |
Запись в ОП |
[address] ← A1 |
|
|
|
|
|
|
A-2 |
000111 |
08 |
LDS |
Чтение из ОП |
A2 → [address] |
|
|
|
|
|
|
A-2 |
001000 |
09 |
|
|
|
|
|
|
|
|
|
|
|
Логические операции Маски: 010XXX | |||||||||||
16 |
AND |
Побитовое логическое «И» |
A3 ← A2 & A1 |
Z |
|
|
|
|
|
А-3 |
010000 |
17 |
OR |
Побитовое логическое «ИЛИ» |
A3 ← A2 | A1 |
Z |
|
|
|
|
|
А-3 |
010001 |
18 |
XOR |
Побитовое логическое «исключающее ИЛИ» |
A3 ← A2 ^ A1 |
Z |
|
|
|
|
|
А-3 |
010010 |
19 |
NOT |
Инверсия операнда |
A2 → NOT A1 |
Z |
|
|
|
|
|
А-3 |
010011 |
20 |
EQ |
Равно |
A3 ← A1 == A2 |
Z |
|
|
|
|
|
А-3 |
010100 |
21 |
NEQ |
Не равно |
A3 ← A1 != A2 |
Z |
|
|
|
|
|
А-3 |
010101 |
Переходы Маски: 011XXX, 1000XX | |||||||||||
24 |
CALL |
Вызов подпрограммы |
A ← A1 |
|
|
|
|
|
|
A-1 |
011000 |
25 |
RET |
Возврат из подпрограммы |
A ← [stack] |
|
|
|
|
|
|
A-0 |
011001 |
26 |
JMP |
Безусловный переход |
A ← A1 |
|
|
|
|
|
|
A-1 |
011010 |
27 |
JZ |
Переход если Z=1 |
A ← A1 |
|
|
|
|
|
|
A-1 |
011011 |
28 |
JNZ |
Переход если Z=0 |
A ← A1 |
|
|
|
|
|
|
A-1 |
011100 |
29 |
JO |
Переход если O=1 |
A ← A1 |
|
|
|
|
|
|
A-1 |
011101 |
30 |
JNO |
Переход если O=0 |
A ← A1 |
|
|
|
|
|
|
A-1 |
011110 |
31 |
JC |
Переход если C=1 |
A ← A1 |
|
|
|
|
|
|
A-1 |
011111 |
32 |
JNC |
Переход если C=0 |
A ← A1 |
|
|
|
|
|
|
A-1 |
100000 |
33 |
JS |
Переход если S=1 |
A ← A1 |
|
|
|
|
|
|
A-1 |
100001 |
34 |
JNS |
Переход если S=0 |
A ← A1 |
|
|
|
|
|
|
A-1 |
100010 |
Арифметические операции c ФТ Выполняются на АЛУ Маски: 10XXXX | |||||||||||
36 |
ADD |
Сложение |
A3 ← A1 + A2 |
Z |
C |
S |
|
|
|
A-3 |
100100 |
37 |
SUB |
Вычитание |
A3 ← A1 - A2 |
Z |
C |
S |
|
|
|
A-3 |
100101 |
38 |
MUL |
Умножение |
A3 ← A1 * A2 |
Z |
C |
S |
|
|
|
A-3 |
100110 |
39 |
DIV |
Деление |
A3 ← A1 / A2 |
Z |
C |
S |
|
|
|
A-3 |
100111 |
40 |
SHR |
Логический сдвиг вправо |
A2← SHR A1 |
Z |
C |
|
|
|
|
A-2 |
101000 |
41 |
SHL |
Логический сдвиг влево |
A2← SHL A1 |
Z |
C |
|
|
|
|
A-2 |
101001 |
42 |
SAL |
Арифметический сдвиг влево |
A2← SAL A1 |
Z |
C |
|
|
|
|
A-2 |
101010 |
43 |
SAR |
Арифметический сдвиг вправо |
A2← SAR A1 |
Z |
C |
|
|
|
|
A-2 |
101011 |
44 |
LR |
Меньше |
A3 ← A1 < A2 |
Z |
C |
S |
|
|
|
А-3 |
101100 |
45 |
GR |
Больше |
A3 ← A1 > A2 |
Z |
C |
S |
|
|
|
А-3 |
101101 |
Арифметические операции с ПТ Выполняются на арифметическом сопроцессоре Маски: 110XXX | |||||||||||
48 |
FADD |
Сложение |
A3 ← A1 + A2 |
Z |
C |
S |
|
|
|
A-3 |
110000 |
49 |
FSUB |
Вычитание |
A3 ← A1 - A2 |
Z |
C |
S |
|
|
|
A-3 |
110001 |
50 |
FMUL |
Умножение |
A3 ← A1 * A2 |
Z |
C |
S |
|
|
|
A-3 |
110010 |
51 |
FDIV |
Деление |
A3 ← A1 / A2 |
Z |
C |
S |
|
|
|
A-3 |
110011 |
52 |
FLR |
Меньше |
A3 ← A1 < A2 |
Z |
C |
S |
|
|
|
А-3 |
110100 |
53 |
FGR |
Больше |
A3 ← A1 > A2 |
Z |
C |
S |
|
|
|
А-3 |
110101 |
Разное Маски: 1111XX | |||||||||||
60 |
CLC |
Очистка флага переноса |
СF ← 0 |
|
C |
|
|
|
|
A-0 |
111100 |
61 |
STC |
Установка флага переноса |
СF ← 1 |
|
C |
|
|
|
|
A-0 |
111101 |
62 |
BREAK |
Приостановка программы |
|
|
|
|
|
|
|
А-0 |
111110 |
63 |
NOP |
Нет операции |
|
|
|
|
|
|
|
А-0 |
111111 |
Маски, приведённые в таблице, используются для определения той или иной группы операций дешифратором. Например, команды математического сопроцессора должны обрабатываться устройством управления сопроцессора, в отличие от других арифметических команд, обрабатываемых АЛУ.