- •1. Техническое задание
- •1.1. Предмет проектирования
- •1.2. Общие требования к разрабатываемому процессору
- •1.3. Исходные данные для курсового проектирования
- •Есть поддержка графики
- •1.4. Средства реализации модели
- •1.5. Результаты проектирования
- •2. Последовательность выполнения курсового проекта
- •2.1. Общая последовательность
- •2.2. Разработка архитектуры цп
- •2.2.1. Уточнение структуры системы
- •2.2.2. Разработка архитектуры внешних выводов
- •2.2.3. Выбор форматов данных
- •2.2.4. Определение модели памяти и структуры регистровой памяти Виртуальная память
- •2.2.5. Выбор форматов команд
- •2.2.6. Разработка системы команд
- •2.2.7. Внутренняя организация
- •2.2.8. Основные алгоритмы функционирования
- •Алгоритм функционирования сопроцессора
- •2.2.9. Алгоритмы выполнения отдельных операций
- •2.2.10. Разработка алгоритмов выполнения основных операций на шине
2.2.6. Разработка системы команд
Система команд включает следующие команды:
1) обращения к памяти по чтению и записи;
2) целочисленные арифметические для чисел со знаком и без знака (сложение, вычитание, умножение, деление, сравнение);
3) арифметические с ПТ (сложение, вычитание, умножение, деление, сравнение);
4) логические (поразрядное “И”, “ИЛИ” и “Исключающее ИЛИ”);
5) сдвигов на произвольное число тактов;
6) условных и безусловных переходов;
7) работы с подпрограммами;
8) загрузки в регистры непосредственных операндов;
9) ввода-вывода;
10) управления вычислительным процессом.
№ |
Мнемоника |
Название |
Содержание |
Флаги |
Код |
Форматы команд | ||||||||||||||||||||||||||||||
Z |
C |
S |
O |
I |
T |
|
| |||||||||||||||||||||||||||||
Арифметические операции с целыми числами | ||||||||||||||||||||||||||||||||||||
1 |
ADD |
Сложение |
R1<-R1+R2 |
+ |
+ |
+ |
+ |
- |
- |
0000001 |
1.1 | |||||||||||||||||||||||||
2 |
ADDC |
Сложение с учетом переноса |
R1<-R1+R2+C |
+ |
+ |
+ |
+ |
- |
- |
0000010 |
1.1 | |||||||||||||||||||||||||
3 |
SUB |
Вычитание |
R1<-R1-R2 |
+ |
+ |
+ |
+ |
- |
- |
0000011 |
1.1 | |||||||||||||||||||||||||
4 |
SUBC |
Вычитание с учетом переноса |
R1<-R1-R2-C |
+ |
+ |
+ |
+ |
- |
- |
0000100 |
1.1 | |||||||||||||||||||||||||
5 |
MUL |
Умножение без знака |
R2,R1<-R1*R2 |
+ |
+ |
- |
- |
- |
- |
0000101 |
1.1* | |||||||||||||||||||||||||
6 |
DIV |
Деление без знака |
R2,R1<-R1\R2 |
+ |
+ |
- |
- |
- |
- |
0000110 |
1.1* | |||||||||||||||||||||||||
7 |
CP |
Сравнение |
R1-R2 |
+ |
+ |
+ |
- |
- |
- |
0000111 |
1.1 | |||||||||||||||||||||||||
Арифметические операции с числами с плавающей точкой |
| |||||||||||||||||||||||||||||||||||
8 |
FADD |
Сложение |
F1<-F1+F2 |
+ |
- |
+ |
+ |
- |
- |
1000001 |
1.1 | |||||||||||||||||||||||||
9 |
FSUB |
Вычитание |
F1<-F1-F2 |
+ |
- |
+ |
+ |
- |
- |
1000010 |
1.1 | |||||||||||||||||||||||||
10 |
FMUL |
Умножение |
F1<-F1*F2 |
+ |
- |
+ |
+ |
- |
- |
1000011 |
1.1 | |||||||||||||||||||||||||
12 |
FDIV |
Деление |
F1<-F1/F2 |
+ |
- |
+ |
+ |
- |
- |
1000100 |
1.1 | |||||||||||||||||||||||||
Логические операции |
| |||||||||||||||||||||||||||||||||||
13 |
AND |
Поразрядное «И» |
R1<-R1&R2 |
+ |
- |
+ |
- |
- |
- |
0001000 |
1.1 | |||||||||||||||||||||||||
14 |
OR |
Поразрядное «ИЛИ» |
R1<-R1|R2 |
+ |
- |
+ |
- |
- |
- |
0001001 |
1.1 | |||||||||||||||||||||||||
15 |
XOR |
Поразрядное «Исключающее ИЛИ» |
R1<-R1xorR2 |
+ |
- |
+ |
- |
- |
- |
0001010 |
1.1 | |||||||||||||||||||||||||
16 |
CPL |
Инверсия |
R1<-~R1 |
+ |
- |
+ |
- |
- |
- |
0001011 |
1.3 | |||||||||||||||||||||||||
17 |
SLL |
Логический сдвиг влево |
|
+ |
+ |
+ |
- |
- |
- |
0001100 |
1.3 | |||||||||||||||||||||||||
18 |
SRL |
Логический сдвиг вправо |
|
+ |
+ |
+ |
- |
- |
- |
0001101 |
1.3 | |||||||||||||||||||||||||
19 |
SRA |
Арифметический сдвиг вправо |
|
+ |
+ |
+ |
- |
- |
- |
0001110 |
1.3 | |||||||||||||||||||||||||
Переходы |
| |||||||||||||||||||||||||||||||||||
20 |
JMP |
Безусловный переход |
PC<=<R1> |
- |
- |
- |
- |
- |
- |
0001111 |
1.4 | |||||||||||||||||||||||||
21 |
JZ |
Переход по нулю |
if (R1 = 0) PC <- <R1> + K else PC <- PC + 1 |
- |
- |
- |
- |
- |
- |
0010000 |
2.2 | |||||||||||||||||||||||||
22 |
JNZ |
Переход не по нулю |
if (R1 != 0) PC <- <R1> + K else PC <- PC + 1 |
- |
- |
- |
- |
- |
- |
0010001 |
2.2 | |||||||||||||||||||||||||
23 |
JO |
Переход по переполнению |
if (O = 1) PC <- <R1>+ K else PC <- PC + 1 |
- |
- |
- |
- |
- |
- |
0010010 |
2.2 | |||||||||||||||||||||||||
24 |
JNO |
Переход не по переполнению |
if (O= 0) PC <- <R1> + K else PC <- PC + 1 |
- |
- |
- |
- |
- |
- |
0010011 |
2.2 | |||||||||||||||||||||||||
25 |
JC |
Переход по переносу |
if (C = 1) PC <- PC + K else PC <- PC + 1 |
- |
- |
- |
- |
- |
- |
0010100 |
2.2 | |||||||||||||||||||||||||
26 |
JNC |
Переход не по переносу |
if (C = 0) PC <- PC + K else PC <- PC + 1 |
- |
- |
- |
- |
- |
- |
0010101 |
2.2 | |||||||||||||||||||||||||
27 |
JE |
Переход, если равны |
if (R1 = R2) PC <- PC + 1 |
- |
- |
- |
- |
- |
- |
0010110 |
2.1 | |||||||||||||||||||||||||
28 |
JNE |
Переход, если не равны |
if (R1 != R2) PC <- PC + 1 |
- |
- |
- |
- |
- |
- |
0010111 |
2.1 | |||||||||||||||||||||||||
Команды работы с памятью |
| |||||||||||||||||||||||||||||||||||
29 |
LDDW |
Загрузка двойного слова |
R1<-<R2> |
+ |
- |
+ |
- |
- |
- |
0011000 |
1.4 | |||||||||||||||||||||||||
30 |
LDW |
Загрузка слова |
R1<-<R2> |
+ |
- |
+ |
- |
- |
- |
0011001 |
1.4 | |||||||||||||||||||||||||
31 |
LDB |
Загрузка байта |
R1<-<R2> |
+ |
- |
+ |
- |
- |
- |
0011010 |
1.4 | |||||||||||||||||||||||||
32 |
STDW |
Запись двойного слова |
R1<-<R2> |
- |
- |
- |
- |
- |
- |
0011011 |
1.4 | |||||||||||||||||||||||||
33 |
STW |
Запись слова |
R1<-<R2> |
- |
- |
- |
- |
- |
- |
0011100 |
1.4 | |||||||||||||||||||||||||
34 |
STB |
Запись байта |
R1<-<R2> |
- |
- |
- |
- |
- |
- |
0011101 |
1.4 | |||||||||||||||||||||||||
Специальные |
| |||||||||||||||||||||||||||||||||||
35 |
MOV |
Запись в регистр значения |
R1<=R2 |
+ |
- |
+ |
- |
- |
- |
0011110 |
1.4 | |||||||||||||||||||||||||
36 |
SFLG |
Запись регистра флагов |
R1<=F1 |
|
|
|
|
|
|
0011111 |
1.4 | |||||||||||||||||||||||||
37 |
LFLG |
Загрузка регистра флагов |
F1<=R1 |
|
|
|
|
|
|
0100000 |
1.4 | |||||||||||||||||||||||||
38 |
NOP |
Нет операции |
PC<=PC+1 |
- |
- |
- |
- |
- |
- |
0100001 |
1.2 | |||||||||||||||||||||||||
39 |
CALL |
Вызов подпрограммы |
<PC><=R3 |
|
|
|
|
|
|
0100010 |
1.4 | |||||||||||||||||||||||||
40 |
RET |
Возврат из подпрограммы |
|
|
|
|
|
|
|
0100011 |
1.4 | |||||||||||||||||||||||||
41 |
IN |
Ввод из порта |
R2<=<R1> |
|
|
|
|
|
|
0100100 |
1.4 | |||||||||||||||||||||||||
42 |
OUT |
Вывод в порт |
<R1><=R2 |
|
|
|
|
|
|
0100101 |
1.4 | |||||||||||||||||||||||||
43 |
INT |
Вызов прерывания |
<PC><=R3 F1<=R4 |
- |
- |
- |
- |
- |
+ |
0100110 |
1.4 | |||||||||||||||||||||||||
45 |
RETI |
Возврат из прерывания |
|
|
|
|
|
|
|
0100111 |
1.4 | |||||||||||||||||||||||||
46 |
WAIT |
Ожидать завершения вычисления сопроцессора |
|
|
|
|
|
|
|
0101000 |
1.4 |
Пояснения к таблице
1.1* - при умножении и делении результат записывается не только в содержимое регистра R1, но и в содержимое регистра R2
Пояснения к командам
IN R2, R1 – прочитать из порта R1 в регистр R2.
OUT R1, R2 – записать в порт R1 значение регистра R2.
Команды сопроцессора
Все команды сопроцессора делятся на группы:
Команды записи и чтения в регистры сопроцессора.
Арифметические команды с плавающей точкой.
сложение, вычитание, умножение, деление
Графические команды
Сопроцессор следит за операциями, поступающими на процессор, и если операция не предназначена сопроцессору, то он её игнорирует, иначе операция исполняется. Результат вместе с исключениями синхронно передается в центральный процессор.
Сопроцессор может генерировать исключения:
Переполнение
Деление на ноль
Неверная операция