- •Отчёт по курсовой работе.
- •1. Уточнение структуры системы.
- •2. Проектирование структуры внешних выводов.
- •3. Форматы данных
- •4. Организация памяти
- •5. Формат команды
- •6. Система команд
- •7. Внутренняя организация
- •8. Алгоритмы исполнения отдельных операций
- •8.1. Выборка команды
- •8.2. Обработка адресной части команды.
- •8.3. Выполнение арифметических и логических операций
6. Система команд
Все команды подразделяются на 3 группы:
1. Команды пересылки. Их опкоды занимают диапазон 00h – 04h.
2. Команды арифметических и логических операций. Их опкоды занимают диапазон 05h – 12h.
3. Команды передачи управления. Их опкоды занимают диапазон 13h – 18h.
Структура системы команд приведена в таблице ниже:
№ |
опкод |
мнемоника |
семантика |
флаги |
название | |||
Z |
C |
O |
S | |||||
1 |
00h |
NOP |
PC := PC+1 |
na |
na |
na |
na |
No OPeration |
2 |
01h |
MOV |
DST <- #const |
na |
na |
a |
na |
MOVe operand |
DST <- OP1 | ||||||||
DST <- &OP1 + OP2 | ||||||||
3 |
02h |
IN |
[DST] -> OP1 |
na |
na |
a |
na |
INput from port |
4 |
03h |
OUT |
[DST] <-OP1 |
na |
na |
a |
na |
OUTput to port |
5 |
04h |
XCNG |
DST <-> OP1 |
na |
na |
a |
na |
eXChaNGe registers |
6 |
05h |
ADD |
DST <- OP1 + OP2 |
a |
a |
a |
a |
integer ADDition |
7 |
06h |
SUB |
DST <- OP1 - OP2 |
a |
a |
a |
a |
integer SUBstraction |
8 |
07h |
MUL |
DST <- OP1 * OP2 |
a |
a |
na |
a |
integer MULtiplication |
9 |
08h |
DIV |
DST <- OP1 / OP2 |
a |
a |
a |
a |
integer DIVision |
10 |
09h |
FADD |
DST <- OP1 + OP2 |
a |
a |
a |
a |
Float ADDition |
11 |
0Ah |
FSUB |
DST <- OP1 - OP2 |
a |
a |
a |
a |
Float SUBstraction |
12 |
0Bh |
FMUL |
DST <- OP1 * OP2 |
a |
a |
na |
a |
Flaot MULtiplication |
13 |
0Ch |
FDIV |
DST <- OP1 / OP2 |
a |
a |
a |
a |
Float DIVision |
14 |
0Dh |
AND |
DST <- OP1 && OP2 |
a |
na |
na |
na |
logical AND |
15 |
0Eh |
OR |
DST <- OP1 || OP2 |
a |
na |
na |
na |
logical OR |
16 |
0Fh |
XOR |
DST <- OP1 +2 OP2 |
a |
na |
na |
na |
eXclusive OR |
17 |
10h |
NOT |
DST <- ! DST |
a |
na |
na |
na |
logical NOT |
18 |
11h |
RR |
DST <- DST >> OP1 |
a |
a |
na |
na |
Rotate Right |
19 |
12h |
RL |
DST <- DST << OP1 |
a |
a |
na |
na |
Rotate Left |
20 |
13h |
JMP |
PC <- {OP1} |
na |
na |
na |
na |
unconditional JuMP |
21 |
14h |
JC |
PC <- {OP1} |
na |
u |
na |
na |
Jump if Carry set |
22 |
15h |
JZ |
PC <- {OP1} |
u |
na |
na |
na |
Jump if Zero set |
23 |
16h |
JNZ |
PC <- {OP1} |
u |
na |
na |
na |
Jump if Not Zero set |
24 |
17h |
CALL |
R0 <- PC;PC <- {OP1} |
na |
na |
na |
na |
procedure CALL |
25 |
18h |
RET |
PC <- R0 |
na |
na |
na |
na |
RETurn from procedure |
26 |
19h |
IRET |
PC <- R0 ; eflags <- R1 |
na |
na |
na |
na |
Interrupt RETurn |
27 |
1Ah |
INT |
PC <- R0; eflags <- R1; PC <- {OP1} |
na |
na |
na |
na |
INTerrupt |
Пояснения:
команда MOV может использоваться для пересылки данных между регистрами, регистром и памятью, памятью и регистром.
na – Not Affected – команда не изменяет флаги
a – Affected – команда изменяет флаги
u – Used – значение флага используется для принятия решения внутри команды