- •«Санкт-Петербургский государственный электротехнический университет
- •Вариант задания: 2 (Традиционная архитектура)
- •1. Уточнение структуры системы
- •4. Формат команд.
- •5. Методы адресации:
- •6. Модель памяти и организация виртуальной памяти.
- •7. Реализация механизма прерываний.
- •8. Регистровая модель процессора и сопроцессора.
- •9. Команды процессора и сопроцессора
- •10. Временные диаграммы выполнения основных операций на шине.
- •11. Обобщенные алгоритмы функционирования процессора и сопроцессора.
- •Приложение 1. Руководство пользователя
- •Приложение 2. Текст программы
9. Команды процессора и сопроцессора
Обязательно надо сказать о реакции центрального процессора и сопроцессора на сигнал аппаратного сброса RESET. Вообще, в принципе, можно при сбросе менять только значение PCR и управляющих флагов, а остальные регистры оставлять без изменения. Но для удобства программиста при сбросе я решил инициализировать все регистры.
Арифметические операции с ПТ | ||||||||||||
|
FADD |
Сложение |
<F0><= <F1>+<F2> |
+ |
+ |
+ |
+ |
- |
- |
- |
0111000 |
- |
|
FSUB |
Вычитание |
<F0><= <F1>-<F2> |
+ |
+ |
+ |
+ |
- |
- |
- |
0111001 |
- |
|
FMUL |
Умножение |
<F0><= <F1>*<F2> |
+ |
+ |
+ |
+ |
- |
- |
- |
0111010 |
- |
|
FDIV |
Деление |
<F0><= <F1>/<F2> |
+ |
+ |
+ |
+ |
- |
- |
- |
0111011 |
- |
|
FMOV |
Обмен RG<>RG |
F0<=<F1> |
- |
- |
- |
- |
- |
- |
- |
0111100 |
- |
|
FRDW |
Чтение |
<F0><= <R1>+R2 |
- |
- |
- |
- |
- |
- |
- |
0111101 |
- |
|
FWRW |
Запись |
<F0><= <R1>+R2 |
- |
- |
- |
- |
- |
- |
- |
0111110 |
- |
|
MFC |
Преобр ПТ-ФТ |
<R0><= <F1> |
+ |
+ |
+ |
+ |
- |
- |
- |
0111111 |
- |
|
MCF |
Преобр ФТ-ПТ |
<R0>=> <F1> |
+ |
- |
+ |
+ |
- |
- |
- |
1000000 |
- |
обращения к памяти по чтению и записи:
Эти операции используются для загрузки данных и записи их в память. Поскольку разрядность регистров – 32 разряда, то загрузка 64-х разрядных чисел должна осуществляться посредством выполнения операции загрузки слова дважды для разных адресов. Аналогично поступать и с записью данных в память.
целочисленные арифметические для чисел со знаком и без знака:
Позволяют выполнять все операции над числами с ФТ. Сравнение выполняется программно посредством выполнения операций перехода по меньше нуля и по не меньше нуля.
арифметические с ПТ:
Аналогично допускают выполнение различных операций над числами с ПТ.
логические:
Позволяют выполнять обычные логические операции, а также циклический сдвиг вправо и влево.
условные и безусловные переходы:
Предусмотрены различные способы переходов, в том числе по сравнению признаков или безусловно.
работы с подпрограммами:
Используются вызов подпрограммы, переход в системный режим и возврат из него, а также вызов прерывания.
ввод-вывод:
Ввод-вывод осуществляется при загрузке данных по особым адресам памяти или при чтении из памяти, поскольку работа с портами организована как с обычными ячейками памяти.
управления вычислительным процессом:
Доступны команды смены режима, вызова подпрограмм, программные прерывания, пропуск операции, ожидание захвата шины.
№ |
Name |
Содержание |
Функция |
Флаги |
Код |
Сист. режим | |||||||||||||||||
Z |
C |
S |
O |
I |
T |
U | |||||||||||||||||
Обращение к памяти по чтению и записи | |||||||||||||||||||||||
|
RDW |
Чтение слова |
<R0><= <R1>+R2 |
- |
- |
- |
- |
- |
- |
- |
0000010 |
- | |||||||||||
|
WRW |
Запись слова |
<R0>=> <R1>+R2 |
- |
- |
- |
- |
- |
- |
- |
0000101 |
- | |||||||||||
|
MOV |
Обмен RG<>RG |
<R0><=<R0> |
- |
- |
- |
- |
- |
- |
- |
0000110 |
- | |||||||||||
|
MOVD |
Обмен RG<>RG |
<R0><=<R0> |
- |
- |
- |
- |
- |
- |
- |
0000111 |
- | |||||||||||
|
MOVI |
Запись в регистр значения |
<R0><= R2 |
- |
- |
- |
- |
- |
- |
- |
0001000 |
- | |||||||||||
Арифметические операции с ФТ | |||||||||||||||||||||||
|
ADDS |
Сложение (со знаком) |
<R0><= <R1>+<R2> |
+ |
+ |
+ |
+ |
- |
- |
- |
0001001 |
- | |||||||||||
|
SUBS |
Вычитание (со знаком) |
<R0><= <R1>-<R2> |
+ |
+ |
+ |
+ |
- |
- |
- |
0001010 |
- | |||||||||||
|
MULS |
Умножение (со знаком) |
<R0><= <R1>*<R2> |
+ |
+ |
+ |
+ |
- |
- |
- |
0001011 |
- | |||||||||||
|
DIVS |
Деление (со знаком) |
<R0><= <R1>/<R2> |
+ |
+ |
+ |
- |
- |
- |
- |
0001100 |
- | |||||||||||
|
ADD |
Сложение (без знака) |
<R0><= <R1>+R2 |
+ |
+ |
+ |
+ |
- |
- |
- |
0001101 |
- | |||||||||||
|
SUB |
Вычитание (без знака) |
<R0><= <R1>-R2 |
+ |
+ |
+ |
+ |
- |
- |
- |
0001110 |
- | |||||||||||
|
MUL |
Умножение (без знака) |
<R0><= <R1>*R2 |
+ |
+ |
+ |
+ |
- |
- |
- |
0001111 |
- | |||||||||||
|
DIV |
Деление (без знака) |
<R0><= <R1>/R2 |
+ |
+ |
+ |
- |
- |
- |
- |
0010000 |
- | |||||||||||
Логические оперции с ФТ | |||||||||||||||||||||||
|
AND |
«И» |
<R0><= <R1>&<R2> |
+ |
- |
+ |
- |
- |
- |
- |
0010001 |
- | |||||||||||
|
OR |
«ИЛИ» |
<R0><= <R1>v<R2> |
+ |
- |
+ |
- |
- |
- |
- |
0010010 |
- | |||||||||||
|
XOR |
Искл «ИЛИ» |
<R0><= <R1>^<R2> |
+ |
- |
+ |
- |
- |
- |
- |
0010011 |
- | |||||||||||
|
NOT |
«НЕ» |
<R0><= ~<R1> |
+ |
- |
+ |
- |
- |
- |
- |
0010100 |
- | |||||||||||
|
RCL |
Cдвиг влево |
|
- |
+ |
- |
+ |
- |
- |
- |
0010101 |
- | |||||||||||
|
RCR |
Cдвиг вправо |
|
- |
+ |
- |
+ |
- |
- |
- |
0010110 |
- | |||||||||||
Команды переходов и прерываний | |||||||||||||||||||||||
|
CLI |
Очистить флаг разрешения прерываний |
|
|
|
|
|
0 |
|
|
0010111 |
- | |||||||||||
|
STI |
Разрешить прерывания |
|
|
|
|
|
1 |
|
|
0011000 |
- | |||||||||||
|
INT |
Вызов прерывания |
<R7><=PC <R6><=flags |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
0011001 |
- | |||||||||||
|
IRET |
Возврат из прерывания |
<PC><=R7 flags<=R6 |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
0011010 |
- | |||||||||||
|
CALL |
Вызов подпрограммы |
<R7><=PC PC<=<R1>+R2 |
- |
- |
- |
- |
- |
- |
- |
0011011 |
- | |||||||||||
|
RET |
Возврат из подпрограммы |
<PC><=R7
|
- |
- |
- |
- |
- |
- |
- |
0011100 |
- | |||||||||||
|
JMP |
Безусловный переход |
PC<=<R1>+R2 |
- |
- |
- |
- |
- |
- |
- |
0011101 |
- | |||||||||||
|
JZ |
Переход по нулю |
PC<=<R1>+R2 |
+ |
- |
- |
- |
- |
- |
- |
0011110 |
- | |||||||||||
|
JNZ |
Переход не по нулю |
PC<=<R1>+R2 |
+ |
- |
- |
- |
- |
- |
- |
0011111 |
- | |||||||||||
|
JO |
Переход по переполнению |
PC<=<R1>+R2 |
- |
- |
- |
+ |
- |
- |
- |
0100000 |
- | |||||||||||
|
JNO |
Переход по не переполнению |
PC<=<R1>+R2 |
- |
- |
- |
+ |
- |
- |
- |
0100001 |
- | |||||||||||
|
JC |
Переход по переносу |
PC<=<R1>+R2 |
- |
+ |
- |
- |
- |
- |
- |
0100010 |
- | |||||||||||
|
JNC |
Переход не по переносу |
PC<=<R1>+R2 |
- |
+ |
- |
- |
- |
- |
- |
0100011 |
- | |||||||||||
|
JS |
Переход по меньше нуля |
PC<=<R1>+R2 |
- |
- |
+ |
- |
- |
- |
- |
0100100 |
- | |||||||||||
|
JNS |
Переход по не меньше нуля |
PC<=<R1>+R2 |
- |
- |
+ |
- |
- |
- |
- |
0100101 |
- | |||||||||||
Специальные операции | |||||||||||||||||||||||
|
RFL |
Чтение флагов |
<R1><=Flags |
- |
- |
- |
- |
- |
- |
- |
0100110 |
+ | |||||||||||
|
WFL |
Запись флагов |
<R1>=>Flags |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
0100111 |
+ | |||||||||||
|
RTLB |
Чтение TLBP |
<R1><=TLBP |
- |
- |
- |
- |
- |
- |
- |
0101110 |
+ | |||||||||||
|
WTLB |
Запись TLBP |
<R1>=>TLBP |
- |
- |
- |
- |
- |
- |
- |
0101111 |
+ | |||||||||||
|
RTIN |
Чтение TINT |
<R1><=TINT |
- |
- |
- |
- |
- |
- |
- |
0110000 |
+ | |||||||||||
|
WTIN |
Запись TINT |
<R1>=>TINT |
- |
- |
- |
- |
- |
- |
- |
0110001 |
+ | |||||||||||
|
RFE |
Возврат в пользователя |
|
- |
- |
- |
- |
- |
- |
0 |
0110010 |
+ | |||||||||||
|
SCALL |
Переход в супервизора |
|
- |
- |
- |
- |
- |
- |
1 |
0110011 |
- | |||||||||||
|
NOP |
Нет операции |
PC<=<PC>+1 |
- |
- |
- |
- |
- |
- |
- |
0110101 |
- |