- •Кафедра вычислительной техники
- •Санкт-Петербург
- •1. Техническое задание
- •2. Структурная схема разрабатываемой системы
- •3. Описание архитектуры на регистровом уровне
- •3.1. Центральный процессор
- •3.2. Сопроцессор
- •3.3. Форматы данных
- •3.4. Форматы команд
- •3.5. Способы адресации
- •3.6. Система команд
- •3.7. Команды сопроцессора
- •3.8. Организация виртуальной памяти
- •4. Структура выводов кристаллов
- •5. Временные диаграммы выполнения основных операций на шине
- •6. Описание функционирования автоматов
3.5. Способы адресации
В курсовой работе необходимо реализовать следующие способы адресации:
Непосредственная, при которой в команде требуется присутствие константы, задаваемой непосредственным операндом.
Относительная, при которой для получения адреса операнда, используется суммирование хранимого в регистре адреса и смещения задаваемого непосредственным операндом.
Прямая, при которой операнд (регистр) явно указывается в команде.
3.6. Система команд
Все команды делятся на команды центрального процессора (табл. 2) и команды сопроцессора.
Среди команд центрального процессора выделяют следующие типы команд:
Команды обращения к памяти по чтению и записи.
Арифметические команды с фиксированной точкой.
Логические команды.
Команды сдвигов.
Команды условных и безусловных переходов.
Команды загрузки в регистр непосредственных операндов и копирование значений из одних регистров в другие.
Команды ввода-вывода.
Команды управления вычислительным процессом.
3.6.1. Команды обращения к памяти
В эту группу включено 8 команд:
LB REC, <SR1 + Imm> –осуществляет чтение байта из памяти по адресу <SR1 + Imm> и записывает его в один из 32-х регистров, заполняя неиспользуемые разряды его знаком.
LBU REC, <SR1 + Imm> –осуществляет чтение байта из памяти по адресу <SR1 + Imm> и записывает его в один из 32-х регистров. Неиспользуемые биты заполняются нулями.
LWU REC, <SR1 + Imm> –читает слово, расположенное по адресу <SR1 + Imm> и записывает значение в биты 31-0 одного из 32-х регистров. Биты 63-32 заполняются нулями.
LW REC, <SR1 + Imm> –аналогична предыдущей команде, только биты 63-32 заполняются знаком слова.
LDW REC, <SR1 + Imm> –читает двойное слово, расположенное по адресу <SR1 + Imm> и записывает старший его разряд в регистр REC, а младший – в регистр SR2.
SDW <SR1 + Imm>, SR2 – записывает содержимое регистра SR2 в память по адресу
<SR1 + Imm>.
SW <SR1 + Imm>, SR2 – записывает биты 31-0 регистра SR2 в память по адресу
<SR1 + Imm>.
SB <SR1 + Imm>, SR2 – записывает биты 8-0 регистра SR2 в память по адресу
<SR1 + Imm>.
Команды этой группы не оказывают воздействия на флажки и доступны как в режиме супервизора, так и в режиме пользователя. Команды этой группы используют формат команд представленный на рис.5. Поле P используется как биты 9 и 10 непосредственного операнда.
3.6.2. Арифметические команды с фиксированной точкой
Группа арифметических команд состоит из 10 команд:
ADD REC, SR1, SR2 – к содержимому регистра SR1 прибавляет содержимоеSR2, результат заносится вREC. По результату выполнения команды изменяются флажкиZ, C, S, O.
ADDC REC, SR1, SR2 (ADDC REC, SR1, Imm) – действует аналогичноADD, отличие заключается в прибавлении к результату значения флага С.
SUB REC, SR1, SR2 – из регистра SR1 вычитается SR2, если SR2 указывает на регистр отличный от REC. Результат заносится в регистр REC. При выполнении команды изменяются флажки Z, C, S, O.
SUBB REC, SR1, SR2 – аналогична команде SUB, но из результата получаемого командойSUBвычитается значение флажка С до выполнения операции.
MUL SR3:REC, SR1, SR2 – реализует операцию умножения без знака регистров SR1 иSR2. Младшее слово результата заносится в регистрREC, старшее слово результата вSR3.Если оно совпадает сREC,то старший байт не сохраняется. Флажки С и S устанавливаются в случае если старшее слово результата отлично от нуля. Кроме этих флажков при выполнении команды может измениться значение флажковZ, O.
MULS SR3:REC, SR1, SR2 – аналогична операцииMUL, но выполняет знаковое умножение. Флажки С иS сбрасываются, кроме случая, когда старшее слово заполнено всеми нулями, так же в случае если старшее слово содержит все единицы.
DDIV REC, SR4, SR1: SR2, SR3 (DDIV REC, SR1: SR2, SR3) – выполняет деление128-битного числа, хранимого в паре регистровSR1-SR2,наSR3. Остаток может заносится вSR4,еслиSR4не совпадает сREC.Если делится64-битное число, тоSR2содержит номер регистраSR1. Если результат деления не помещается в регистреREC, то устанавливается флагO. Если производится деление на ноль, то устанавливается флагC.
DDIVS REC, SR4, SR1: SR2, SR3 (DDIVS REC, SR1: SR2, SR3) – выполняет деление со знаком.
DIV REC, SR1, SR2 – делит 64-разрядное число, хранимое в SR1 на значениеSR2, результат заносится в регистрREC. Остаток не вычисляется. Флаги С иO устанавливаются при делении на ноль.
DIVS REC, SR1, SR2 – выполняет деление с учетом знака. Логика установки флажковZ, C, S иO, такая же как и предыдущей команде.
3.6.3. Логические команды
В разрабатываемый процессор включены четыре логические команды AND REC,SR1,SR2; OR REC,SR1,SR2; XOR REC,SR1,SR2; NOR REC,SR1,SR2. Все команды используют два аргументаSR1 и SR2. После выполнения команды флажкиC иO устанавливаются в 0, флажкиZ иS могут изменяться.
3.6.4. Команды сдвига
Используется четыре типа команд сдвига:
SLL REC,SR1,SR2 – логический сдвиг влево.
SAL REC,SR1,SR2 (SALU REC,SR1,SR2) – арифметический сдвиг влево.
SLR REC,SR1,SR2 – логический сдвиг вправо.
SAR REC,SR1,SR2 (SAR REC,SR1,SR2) – арифметический сдвиг вправо
Старший бит P показывает, что сдвиг значения SR1 осуществляется на значение SR2, младший бит P используется только при арифметическом сдвиге и задает сдвиг: при 0 без знака, при 1 со знаком. При логическом сдвиге сдвиг осуществляется через флажок С. В результате выполнения команды изменяется значения флажков Z, S, C. Флажок С содержит бит, выдвигаемый за пределы регистра.
3.6.5. Команды условных и безусловных переходов
Команды условных и безусловных переходов состоят из двух команд:
J SR1 (JZ SR1; JNZ SR1; JC SR1; JNC SR1; JS SR1; JNS SR1; JO SR1; JNO SR1; JFB SR1; JNFB SR1; JFZ SR1; JNFZ SR1; JFS SR1; JNFS SR1; JFO SR1; JNFO SR1) – переход по адресу хранимому в регистре, дополнительные параметры задаются в полеREC.
JIImm (JIZ Imm; JINZ Imm; JIC Imm; JINC Imm; JIS Imm; JINS Imm; JIO Imm; JINO Imm; JIFB Imm; JINFB Imm; JIFZ Imm; JINFZ Imm; JIFS Imm; JINFS Imm; JIFO Imm; JINFO Imm) – переход на 20-битный непосредственный операнд вперед или назад, дополнительные параметры задаются в поле С. Направление перехода задается знакомImm.
Дополнительный параметр содержит 5 бит:
-
V
0
С
4
3
2
0
Рис. 8
Где:
V – содержит значение флажка, при котором должен осуществляться переход.
C– задает код флажка, по которому производится переход:
000 – Z ЦП;
001 – C ЦП;
010 – S ЦП;
011 – O ЦП;
100 – B сопроцесора;
101 – Z сопроцесора;
110 – S сопроцесора;
110 – O сопроцесора.
3.6.6. Команды загрузки в регистр непосредственных операндов и копирование значений из одних регистров в другие
Команды загрузки в регистр непосредственных операндов и копирование значений из одних регистров в другие. Эта группа состоит из трех команд:
MOV REC, SR1, которая копирует операнд вRECсодержимое регистраSR1.
MOVH REC, Imm, копирующая непосредственный операнд в биты 32-63 регистраREC.
MOVL REC, Imm, копирующая непосредственный операнд в биты 0-31 регистраREC.
Выполнение команды этой группы не влияет на флажки.
3.6.7. Команды ввода-вывода
Группа состоит из двух команд:
OUT SR1, SR2 – записать в порт SR1значение регистраSR2.
IN REC, SR1 – прочитать из портаSR1в регистрREC.
Эти команды не воздействуют на флажки, но их выполнение возможно только в режиме супервизора.
3.6.8. Команды управления вычислительным процессом
Состоят из команд загрузки системных регистров,чтение содержимого системных регистров, системных вызовов:
MFFL REC – возвращает регистр флажков.
MTFL SR1 – записывает число в регистр флажков. ПриU=1 невозможна запись в младшие 4 разряда.
LTR SR1 – загружает указатель наTSS текущей задачи по адресуSR1.
LIDT SR1 – загружает указатель на таблицу дискрипторов прерывания (IDT) изSR1.
SIDT REC – копирует указатель наIDT в регистр REC.
OTSS REC – записывает вREC TSS задачи, работающей перед текущей.
MOVLNK – записывает вREC адрес, с которого осуществлен переход.
EAR REC – прочитать неправильный адрес виртуальной памяти, на котором сгенерировано прерывание
INT SR1 – вызов прерывания, номер которого хранится вSR1. Устанавливает флажкиIиT центрального процессора.
WAIT– ожидание конца вычислений сопроцессора.
Значения символов обозначающих состояния флажков следующие:
+ значение флажка может измениться в результате выполнения команды;
значение не изменяется;
?значение флажка влияет на работу команды.
0 для выполнения команды требуется чтобы флажок был в0;
1 для выполнения команды требуется чтобы флажок был в 1.
Таблица 2. Команды ЦП
№ |
Мнемоника |
Название |
Содержание |
Флажок |
Код | ||||||
Z |
C |
S |
O |
I |
T |
U | |||||
1 |
LB |
Прочитать байт |
REC <SR1+Imm> |
|
|
|
|
|
|
|
17 |
2 |
LBU |
Прочитать байт без знака |
REC <SR1+Imm> |
|
|
|
|
|
|
|
18 |
3 |
LW |
Прочитать слово |
REC <SR1+Imm> |
|
|
|
|
|
|
|
19 |
4 |
LWU |
Прочитать слово без знака |
REC <SR1+Imm> |
|
|
|
|
|
|
|
20 |
5 |
LDW |
Прочитать двойное слово |
REC <SR1+Imm> |
|
|
|
|
|
|
|
21 |
6 |
SDW |
Записать двойное слово |
<SR1+Imm> SR2 |
|
|
|
|
|
|
|
22 |
7 |
SW |
Записать слово |
<SR1+Imm> SR2 |
|
|
|
|
|
|
|
23 |
8 |
SB |
Записать байт |
<SR1+Imm> SR2 |
|
|
|
|
|
|
|
24 |
9 |
ADD |
Сложение |
REC SR1 + SR2 |
+ |
+ |
+ |
+ |
|
|
|
03 |
10 |
ADDС |
Сложение с переносом |
REC SR1 + SR2 |
+ |
?+ |
+ |
+ |
|
|
|
04 |
Таблица 2. Команды ЦП (продолжение)
№ |
Мнемоника |
Название |
Содержание |
Флажок |
Код | ||||||
Z |
C |
S |
O |
I |
T |
U | |||||
11 |
SUB |
Вычитание |
REC SR1 – SR2 |
+ |
+ |
+ |
+ |
|
|
|
05 |
12 |
SUBB |
Вычитание с заемом |
REC SR1 – SR2 |
+ |
?+ |
+ |
+ |
|
|
|
06 |
13 |
MUL |
Беззнаковое умножение |
SR3 : REC SR1 * SR2 |
+ |
+ |
+ |
+ |
|
|
|
07 |
14 |
MULS |
Умножение со знаком |
SR3 : REC SR1 * SR2 |
+ |
+ |
+ |
+ |
|
|
|
08 |
15 |
DDIV |
Беззнаковое деление |
REC SR3 : SR1 / SR2 |
+ |
+ |
+ |
+ |
|
|
|
09 |
16 |
DDIVS |
Деление со знаком |
REC SR3 : SR1 / SR2 |
+ |
+ |
+ |
+ |
|
|
|
10 |
17 |
DIV |
Беззнаковое деление |
REC SR1 / SR2 |
+ |
+ |
+ |
+ |
|
|
|
11 |
18 |
DIVS |
Деление со знаком |
REC SR1 / SR2 |
+ |
+ |
+ |
+ |
|
|
|
12 |
19 |
AND |
Логическое И |
REC SR1 & SR2 |
+ |
0 |
+ |
0 |
|
|
|
13 |
20 |
OR |
Логическое ИЛИ |
REC SR1 or SR2 |
+ |
0 |
+ |
0 |
|
|
|
14 |
21 |
XOR |
Логическое Исключающее ИЛИ |
REC SR1 xor SR2 |
+ |
0 |
+ |
0 |
|
|
|
15 |
22 |
NOR |
НЕ-ИЛИ |
REC not (SR1 or SR2) |
+ |
0 |
+ |
0 |
|
|
|
16 |
23 |
SLL |
Логический cдвиг влево на SR2 |
|
+ |
+ |
+ |
|
|
|
|
25 |
24 |
SAL |
Арифметический сдвиг влево на SR2 |
|
+ |
+ |
+ |
|
|
|
|
26 |
25 |
SLR |
Логический сдвиг вправо на SR2 |
|
+ |
+ |
+ |
|
|
|
|
27 |
26 |
SAR |
Арифметический сдвиг вправо на SR2 |
|
+ |
+ |
+ |
|
|
|
|
28 |
27 |
MOV |
Переслать данные |
REC SR1 |
|
|
|
|
|
|
|
02 |
28 |
MOVL |
Записать непосредственный операнд в четверть, определяемую P, нижнюю половину (биты 0-31) регистра REC |
REC Imm |
|
|
|
|
|
|
|
00 |
29 |
MOVH |
Записать непосредственный операнд в четверть, определяемую P, верхнюю половину (биты 32-63) регистра REC |
REC Imm |
|
|
|
|
|
|
|
01 |
30 |
J |
Переход, код условия задается вместо REC. |
PC SR1 |
? |
? |
? |
? |
|
|
+ |
29 |
31 |
JI |
Относительный переход |
PC PC + Imm |
? |
? |
? |
? |
|
|
|
30 |
32 |
IN |
Прочитать значение из порта SR1 в регистр REC |
|
|
|
|
|
|
|
1 |
31 |
33 |
OUT |
Записать в порт SR1 значение из SR2 |
|
|
|
|
|
|
|
1 |
32 |
34 |
MFFL |
Прочитать состояние регистра флажков |
REC FL |
? |
? |
? |
? |
? |
? |
? |
33 |
35 |
MTFL |
Записать состояние регистра флажков |
FL SR1 |
+ |
+ |
+ |
+ |
+ |
+ |
?+ |
34 |
36 |
LTR |
Загрузить указатель на TSS текущей задачи по адресу SR1 |
<SR1> TSS |
|
|
|
|
|
|
1 |
35 |
37 |
LIDT |
Загрузить указатель на таблицу дискрипторов прерывания (IDT) из SR1 |
IDT SR1 |
|
|
|
|
|
|
1 |
36 |
38 |
OTSS |
Записывает в REC TSS задачи, работающей перед текущей |
REC TSS |
|
|
|
|
|
|
1 |
37 |
39 |
MOVLNK |
Чтение данных из регистра Link |
REC Link |
|
|
|
|
|
|
|
38 |
40 |
EAR |
Прочитать неправильный адрес виртуальной памяти |
REC |
|
|
|
|
|
|
1 |
39 |
41 |
WAIT |
Ожидать завершения вычисления сопроцессора |
|
|
|
|
|
|
|
|
40 |
42 |
INT |
Вызов прерывания |
|
|
|
|
|
+ |
+ |
|
41 |