§ Набор инструкции

Это учебный процессор с очень ограниченным набором инструкции. Стека нет.
  • Регистры: 00=A, 01=B, 10=X, 11=Y
  • Условия: 00=JNC, 01=JC, 10=JNZ, 11=JZ

§ Таблица инструкции

00
MOV
A,A
01
MOV
B,A
02
MOV
X,A
03
MOV
Y,A
04
MOV
A,B
05
MOV
B,B
06
MOV
X,B
07
MOV
Y,B
08
MOV
A,X
09
MOV
B,X
0A
MOV
X,X
0B
MOV
Y,X
0C
MOV
A,Y
0D
MOV
B,Y
0E
MOV
X,Y
0F
MOV
Y,Y
10
MOV
A,[A]
11
MOV
B,[A]
12
MOV
X,[A]
13
MOV
Y,[A]
14
MOV
A,[B]
15
MOV
B,[B]
16
MOV
X,[B]
17
MOV
Y,[B]
18
MOV
A,[X]
19
MOV
B,[X]
1A
MOV
X,[X]
1B
MOV
Y,[X]
1C
MOV
A,[Y]
1D
MOV
B,[Y]
1E
MOV
X,[Y]
1F
MOV
Y,[Y]
20
MOV
[A],A
21
MOV
[B],A
22
MOV
[X],A
23
MOV
[Y],A
24
MOV
[A],B
25
MOV
[B],B
26
MOV
[X],B
27
MOV
[Y],B
28
MOV
[A],X
29
MOV
[B],X
2A
MOV
[X],X
2B
MOV
[Y],X
2C
MOV
[A],Y
2D
MOV
[B],Y
2E
MOV
[X],Y
2F
MOV
[Y],Y
30
MOV
[A],[A]
31
MOV
[B],[A]
32
MOV
[X],[A]
33
MOV
[Y],[A]
34
MOV
[A],[B]
35
MOV
[B],[B]
36
MOV
[X],[B]
37
MOV
[Y],[B]
38
MOV
[A],[X]
39
MOV
[B],[X]
3A
MOV
[X],[X]
3B
MOV
[Y],[X]
3C
MOV
[A],[Y]
3D
MOV
[B],[Y]
3E
MOV
[X],[Y]
3F
MOV
[Y],[Y]
40
MOV
A,*
41
MOV
B,*
42
MOV
X,*
43
MOV
Y,*
44
MOV
A,[*]
45
MOV
B,[*]
46
MOV
X,[*]
47
MOV
Y,[*]
48
MOV
[A],*
49
MOV
[B],*
4A
MOV
[X],*
4B
MOV
[Y],*
4C
MOV
[A],[*]
4D
MOV
[B],[*]
4E
MOV
[X],[*]
4F
MOV
[Y],[*]
50
ADD
A,*
51
ADD
B,*
52
ADD
X,*
53
ADD
Y,*
54
CMP
A,*
55
CMP
B,*
56
CMP
X,*
57
CMP
Y,*
58
MOV
[*],A
59
MOV
[*],B
5A
MOV
[*],X
5B
MOV
[*],Y
5C
MOV
[*],[A]
5D
MOV
[*],[B]
5E
MOV
[*],[X]
5F
MOV
[*],[Y]
60
ROR
A,A
61
ROR
B,A
62
ROR
X,A
63
ROR
Y,A
64
ROR
A,B
65
ROR
B,B
66
ROR
X,B
67
ROR
Y,B
68
ROR
A,X
69
ROR
B,X
6A
ROR
X,X
6B
ROR
Y,X
6C
ROR
A,Y
6D
ROR
B,Y
6E
ROR
X,Y
6F
ROR
Y,Y
70
TST
A,*
71
TST
B,*
72
TST
X,*
73
TST
Y,*
74
ORI
A,*
75
ORI
B,*
76
ORI
X,*
77
ORI
Y,*
78
AND
A,*
79
AND
B,*
7A
AND
X,*
7B
AND
Y,*
7C
XOR
A,*
7D
XOR
B,*
7E
XOR
X,*
7F
XOR
Y,*
80
ADD
A,A
81
ADD
B,A
82
ADD
X,A
83
ADD
Y,A
84
ADD
A,B
85
ADD
B,B
86
ADD
X,B
87
ADD
Y,B
88
ADD
A,X
89
ADD
B,X
8A
ADD
X,X
8B
ADD
Y,X
8C
ADD
A,Y
8D
ADD
B,Y
8E
ADD
X,Y
8F
ADD
Y,Y
90
SUB
A,A
91
SUB
B,A
92
SUB
X,A
93
SUB
Y,A
94
SUB
A,B
95
SUB
B,B
96
SUB
X,B
97
SUB
Y,B
98
SUB
A,X
99
SUB
B,X
9A
SUB
X,X
9B
SUB
Y,X
9C
SUB
A,Y
9D
SUB
B,Y
9E
SUB
X,Y
9F
SUB
Y,Y
A0
AND
A,A
A1
AND
B,A
A2
AND
X,A
A3
AND
Y,A
A4
AND
A,B
A5
AND
B,B
A6
AND
X,B
A7
AND
Y,B
A8
AND
A,X
A9
AND
B,X
AA
AND
X,X
AB
AND
Y,X
AC
AND
A,Y
AD
AND
B,Y
AE
AND
X,Y
AF
AND
Y,Y
B0
XOR
A,A
B1
XOR
B,A
B2
XOR
X,A
B3
XOR
Y,A
B4
XOR
A,B
B5
XOR
B,B
B6
XOR
X,B
B7
XOR
Y,B
B8
XOR
A,X
B9
XOR
B,X
BA
XOR
X,X
BB
XOR
Y,X
BC
XOR
A,Y
BD
XOR
B,Y
BE
XOR
X,Y
BF
XOR
Y,Y
C0
JNC
*
C1
JC
*
C2
JNZ
*
C3
JZ
*
C4
JMP
A
C5
JMP
B
C6
JMP
X
C7
JMP
Y
C8
JMP
*
C9
HLT
CA
CLC
CB
CMC
CC
JMP
A,*
CD
JMP
B,*
CE
JMP
X,*
CF
JMP
Y,*
D0
INC
A
D1
INC
B
D2
INC
X
D3
INC
Y
D4
DEC
A
D5
DEC
B
D6
DEC
X
D7
DEC
Y
D8
ROR
A,*
D9
ROR
B,*
DA
ROR
X,*
DB
ROR
Y,*
DC
ROR
A,[*]
DD
ROR
B,[*]
DE
ROR
X,[*]
DF
ROR
Y,[*]
E0

E1

E2

E3

E4

E5

E6

E7

E8

E9

EA

EB

EC

ED

EE

EF

F0

F1

F2

F3

F4

F5

F6

F7

F8

F9

FA

FB

FC

FD

FE

FF


Перемещения
# Регистр-регистр
0000_ssdd MOV d,s
0001_ssdd MOV d,[s]
0010_ssdd MOV [d],s
0011_ssdd MOV [d],[s]

# Регистр-Память
0100_00dd MOV d,u
0100_01dd MOV d,[u]
0100_10dd MOV [d],u
0100_11dd MOV [d],[u]

# Память-Регистр
0101_10dd MOV [u],d
0101_11dd MOV [u],[d]
Арифметика и логика
0101_00dd ADD d,u   -- сложить регистр с операндом
0101_01dd CMP d,u   -- сравнить регистр
0110_ssdd ROR d,s   -- цикличный вправо сдвиг регистра D на количество шагов S
0111_00dd TST d,u   -- операция AND без записи результата
0111_01dd ORI d,u   -- операция OR с операндом
0111_10dd AND d,u   -- операция AND с операндом
0111_11dd XOR d,u   -- операция XOR с операндом
1000_ssdd ADD d,s   -- сложить регистр D минус S и поместить в D
1001_ssdd SUB d,s   -- вычесть регистр D минус S и поместить в D
1010_ssdd AND d,s   -- операция AND над регистрами D,S
1011_ssdd XOR d,s   -- операция XOR над регистрами D,S
1101_00dd INC d     -- +1 к регистру D
1101_01dd DEC d     -- -1 к регистру D
1101_10dd ROR d,u   -- Циклический сдвиг регистра на u позиции
1101_10dd ROR d,[u]
Переходы
1100_00cc Jcc, метка   -- условный переход к метке
1100_01dd JMP d        -- переход к метке, которая в регистре D
1100_1000 JMP метка    -- безусловный переход
1100_11dd JMP d, метка -- безусловный переход, но в D сохранить PC
Разное
1100_1001 HLT  -- останов
1100_1010 CLC  -- сброс флага CF=0
1100_1011 CMC  -- флаг CF = !CF
Память совмещенная, 256 байт на код и данные. Здесь JMP d, m работает так же как JMP, но в регистр d записывается следующий PC.