1. 综合实验的调试
1.1 实验目的
1、通过使用调试软件,了解程序编译、加载的过程。
2、通过微单步、单拍调试,理解模型机中的数据流向。
1.2 实验连线
各模块控制信号连接表:(或者使用提供的连线板)
1.3 指令系统
指令助记符 |
指令功能 |
指令编码 |
微周期 |
微操作 |
取指微指令 |
T0: |
PC->地址总线->RAM RAM->数据总线->IR1 |
||
ADD A,R0 ADD A,R1 ADD A,R2 ADD A,R3 |
(A)+(Ri)->A |
0C 0D 0E 0F |
T0: T1: T2: T3: |
A->数据总线->DR1 Ri->数据总线->DR2 ALU->数据总线->A、置CY 取指微指令 |
SUB A,R0 SUB A,R1 SUB A,R2 SUB A,R3 |
(A)-(Ri)->A |
1C 1D 1E 1F |
T0: T1: T2: T3: |
A->数据总线->DR1 Ri->数据总线->DR2 ALU->数据总线->A、置CY 取指微指令 |
MOV A,@R0 MOV A,@R1 MOV A,@R2 MOV A,@R3 |
(Ri)->A |
2C 2D 2E 2F |
T0: T1: T2: |
Ri->数据总线->IR2 IR2->地址总线->RAM->A 取指微指令 |
MOV A,R0 MOV A,R1 MOV A,R2 MOV A,R3 |
(Ri)->A |
3C 3D 3E 3F |
T0: T1: |
Ri->数据总线->A 取指微指令 |
MOV R0,A MOV R1,A MOV R2,A MOV R3,A |
(A)->Ri |
4C 4D 4E 4F |
T0: T1: |
A->数据总线->Ri 取指微指令 |
MOV A,#data |
Data->A |
5F |
T0: T1: |
RAM->数据总线->A 取指微指令 |
MOV R0,#data MOV R1,#data MOV R2,#data MOV R3,#data |
Data->Ri |
6C 6D 6E 6F |
T0: T1: |
RAM->数据总线->A 取指微指令 |
LDA addr |
(addr)->A |
7F |
T0: T1: T2: |
RAM->数据总线->IR2 IR2->地址总线,RAM->A 取指微指令 |
STA addr |
(A)->addr |
8F |
T0: T1: T2: |
RAM->数据总线->IR2 IR2->地址总线,A->RAM 取指微指令 |
RLC A |
C、A左移1位 |
AF |
T0: T1: |
A<<1、置CY 取指微指令 |
RRC A |
C、A右移1位 |
9F |
T0: T1: |
A>>1、置CY 取指微指令 |
JZ addr |
A=0 ,Addr->PC |
B3 |
T0: T1: |
条件成立:RAM->PC 取指微指令 |
JC addr |
Cy=0,Addr->PC |
B7 |
T0: T1: |
条件成立:RAM->PC 取指微指令 |
JMP addr |
Addr->PC |
BF |
T0: T1: |
RAM->PC 取指微指令 |
ORL A,#data |
(A)或data->A |
CF |
T0: T1: T2: T3: |
A->数据总线->DR1 RAM->数据总线->DR2 ALU->数据总线->A 取指微指令 |
ANL A,#data |
(A) 与data->A |
DF |
T0: T1: T2: T3: |
A->数据总线->DR1 RAM->数据总线->DR2 ALU->数据总线->A 取指微指令 |
HALT |
停机 |
FF |
T0: |
停机 |
1.4 微指令表
指令助记符 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
微地址 |
MLD |
WM |
RM |
EIR1 |
EIR2 |
IR2-O |
PC-O |
ELP |
RR |
WR |
HALT |
X0 |
X1 |
ERA |
RA-O |
EDR1 |
EDR2 |
ALU-O |
CN |
M |
S3 |
S2 |
S1 |
S0 |
16进制 |
|
有效值 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
* |
* |
0 |
0 |
0 |
0 |
0 |
* |
* |
* |
* |
* |
* |
||
00H |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4DFFFF |
|
取指微指令 |
01H |
|||||||||||||||||||||||||
02H |
||||||||||||||||||||||||||
ADD A,RI |
03H |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
FFFCF9 |
04H |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
FF7F79 |
|
05H |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
FFFBA9 |
|
06H |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4DFFFF |
|
SUB A,RI |
07H |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
FFFCD6 |
08H |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
FF7F56 |
|
09H |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
FFFB86 |
|
0AH |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4DFFFF |
|
MOV A,@RI |
0BH |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
F77FFF |
0CH |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
DBFBFF |
|
0DH |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4DFFFF |
|
0EH |
||||||||||||||||||||||||||
MOV A,RI |
0FH |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
FF7BFF |
10H |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4DFFFF |
|
11H |
||||||||||||||||||||||||||
12H |
||||||||||||||||||||||||||
MOV RI,A |
13H |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
FFBDFF |
14H |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4DFFFF |
|
15H |
||||||||||||||||||||||||||
16H |
指令助记符 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
微地址 |
MLD |
WM |
RM |
EIR1 |
EIR2 |
IR2-O |
PC-O |
ELP |
RR |
WR |
HALT |
X0 |
X1 |
ERA |
RA-O |
EDR1 |
EDR2 |
ALU-O |
CN |
M |
S3 |
S2 |
S1 |
S0 |
16进制 |
|
有效值 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
* |
* |
0 |
0 |
0 |
0 |
0 |
* |
* |
* |
* |
* |
* |
||
MOV A,#data |
17H |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
DDFBFF |
18H |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4DFFFF |
|
19H |
||||||||||||||||||||||||||
1AH |
||||||||||||||||||||||||||
MOV Ri,#data |
1BH |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
DDBFFF |
1CH |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4DFFFF |
|
1DH |
||||||||||||||||||||||||||
1EH |
||||||||||||||||||||||||||
LDA A,addr |
1FH |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
D5FFFF |
20H |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
DBFBFF |
|
21H |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4DFFFF |
|
22H |
||||||||||||||||||||||||||
STA addr |
23H |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
D5FFFF |
24H |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
BBFDFF |
|
25H |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4DFFFF |
|
26H |
||||||||||||||||||||||||||
RRC |
27H |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
FFF1EF |
28H |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4DFFFF |
|
29H |
||||||||||||||||||||||||||
2AH |
||||||||||||||||||||||||||
RLC |
2BH |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
FFE9EF |
2CH |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4DFFFF |
|
2DH |
||||||||||||||||||||||||||
2EH |
||||||||||||||||||||||||||
指令助记符 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
微地址 |
MLD |
WM |
RM |
EIR1 |
EIR2 |
IR2-O |
PC-O |
ELP |
RR |
WR |
HALT |
X0 |
X1 |
ERA |
RA-O |
EDR1 |
EDR2 |
ALU-O |
CN |
M |
S3 |
S2 |
S1 |
S0 |
16进制 |
|
有效值 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
* |
* |
0 |
0 |
0 |
0 |
0 |
* |
* |
* |
* |
* |
* |
||
JZ addr |
2FH |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
D4FFFF |
JC addr |
30H |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4DFFFF |
JMP addr |
31H |
|||||||||||||||||||||||||
32H |
||||||||||||||||||||||||||
ORL A,#data |
33H |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
FFFCFE |
34H |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
DDFF7E |
|
35H |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
FFFBBE |
|
36H |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4DFFFF |
|
ANL A,#data |
37H |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
FFFCFB |
38H |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
DDFF7B |
|
39H |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
FFFBBB |
|
3AH |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4DFFFF |
|
3BH |
||||||||||||||||||||||||||
3CH |
||||||||||||||||||||||||||
3DH |
||||||||||||||||||||||||||
3EH |
||||||||||||||||||||||||||
HALT |
3FH |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
FFDFFF |
1.5 程序调试
(实验程序要使用16进制的数字后必须带H,不然程序会默认是10进制的)
实验一:实现普通的加、减法指令
在软件HKCPT中,输入以下程序,并且编译、加载到实验平台中。
或通过键盘(键盘使用方法见第四章)输入微程序及以下程序:
内存地址 |
指令助记符 |
指令码或立即数 |
说明 |
00H |
MOV A,#55 |
5FH |
立即数55H->A |
01H |
55H |
||
02H |
MOV R0,#66 |
6CH |
立即数66H->寄存器R0 |
03H |
66H |
||
04H |
ADD A,R0 |
0CH |
A内容+R0内容->A |
05H |
MOV R1,#33 |
6DH |
立即数33H->寄存器R1 |
06H |
33H |
||
07H |
SUB A,R1 |
1DH |
A内容-R1内容->A |
08H |
STA 10 |
8FH |
将A内容写入RAM地址10H |
09H |
10H |
||
0AH |
HALT |
FFH |
停机 |
运行结果为:RAM 10H单元中的内容为88H
运行程序:通过软件HKCPT的微单步功能可观察各个变量的变化。
微单步运行过程显示如下:
微地址 |
数据流程 |
数据总线 |
地址总线 |
操作寄存器 |
00H |
取指微指令 RAM->BUS->IR1 |
5FH |
00H |
IR1=5FH |
MOV A,#55 |
||||
17H |
BUS-> A |
55H |
01H |
A=55H |
18H |
取指微指令 RAM->BUS->IR1 |
6CH |
02H |
IR1=6CH |
MOV R0,#66 |
||||
1BH |
RAM->寄存器R0 |
66H |
03H |
寄存器R0=66H |
1CH |
取指微指令 RAM->BUS->IR1 |
0CH |
04H |
IR1=0CH |
ADD A,R0 |
||||
03H |
A->锁存器DR1 |
55H |
无效 |
DR1=55H |
04H |
寄存器R0->锁存器DR2 |
66H |
无效 |
DR2=66H |
05H |
ALU-> A |
BBH |
无效 |
A=BBH |
06H |
取指微指令 RAM->BUS->IR1 |
6DH |
05H |
IR1=6DH |
MOV R1,#33 |
||||
1BH |
RAM->寄存器R1 |
33H |
06H |
寄存器R1=33 |
1CH |
取指微指令 RAM->BUS->IR1 |
1DH |
07H |
IR1=1DH |
SUB A,R1 |
||||
07H |
A->锁存器DR1 |
BBH |
无效 |
DR1=BBH |
08H |
寄存器R1->锁存器DR2 |
33H |
无效 |
DR2=33H |
09H |
ALU->A |
88H |
无效 |
A=88H |
0AH |
取指微指令 RAM->BUS->IR1 |
8FH |
08H |
IR1=8FH |
STA 10 |
||||
23H |
RAM->BUS->IR2 |
10H |
09H |
IR2=10H |
24H |
A->RAM(10H) |
88H |
10H |
RAM(10)=88H |
25H |
取指微指令 RAM->BUS->IR1 |
7FH |
0AH |
IR1=7FH |
1FH |
10H |
0BH |
||
20H |
88H |
10H |
||
21H |
FFH |
0CH |
IR1=FFH |
|
HALT |
||||
3FH |
置模型机为停止状态 |
无效 |
无效 |
置停止状态 |
如果在运行微单步时,发现有错误或对微单步中的时序过程不清楚,可用时序单元中的按钮来手动给出4个节拍。
微周期 |
数据流程 |
节拍 |
数据总线 |
地址总线 |
操作寄存器 |
T0: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址清零 PLS2:置模型机运行 PLS3:取指微指令输出 PLS4:BUS->IR1 |
无效 无效 5FH 5FH |
无效 无效 00H 00H |
微地址:00H PC=00H 锁存微指令 IR=5FH |
MOV A,#55 |
|||||
T0: |
BUS->A |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->A |
5FH 5FH 55H 55H |
00H 00H 01H 01H |
微地址:17H PC=01H 锁存微指令 A=55H |
T1: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC+1 PLS3:取指微指令输出 PLS4:BUS->IR1 |
55H 55H 6CH 6CH |
01H 01H 02H 02H |
微地址:18H PC=02H 锁存微指令 IR1=6CH |
MOV R0,#66 |
|||||
T0: |
RAM->寄存器R0 |
PLS1:置微地址 PLS2:PC+1 PLS3:取指微指令输出 PLS4:BUS->寄存器R0 |
6CH 6CH 66H 66H |
02H 02H 03H 03H |
微地址:1BH PC=03H 锁存微指令 寄存器R0=66H |
T1: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC+1 PLS3:取指微指令输出 PLS4:BUS->IR1 |
66H 66H 0CH 0CH |
03H 03H 04H 04H |
微地址:1CH PC=04H 锁存微指令 IR1=0CH |
ADD A,R0 |
|||||
T0: |
A->锁存器DR1 |
PLS1:置微地址 PLS2:PC+1 PLS3:取指微指令输出 PLS4:BUS->锁存器DR1 |
0CH 0CH 55H 55H |
04H 04H 无效 无效 |
微地址:03H PC=05H 锁存微指令 DR1=55H |
T1: |
寄存器R0->锁存器DR2 |
PLS1:微地址+1 PLS2:PC不变 PLS3:微指令输出 PLS4:BUS->锁存器DR2 |
55H 55H 66H 66H |
无效 无效 无效 无效 |
微地址:04H PC=05H 锁存微指令 DR2=66H |
T2: |
ALU->A |
PLS1:微地址+1 PLS2:PC不变 PLS3:微指令输出 PLS4:BUS->A |
66H 66H BBH BBH |
无效 无效 无效 无效 |
微地址:05H PC=05H 锁存微指令 A=BBH |
T3: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC不变 PLS3:微指令输出 PLS4:BUS->IR1 |
BBH BBH 6DH 6DH |
无效 无效 05H 05H |
微地址:06H PC=05H 锁存微指令 IR1=6DH |
MOV R1,#33 |
|||||
T0: |
RAM->寄存器R1 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->IR1 |
6DH 6DH 33H 33H |
05H 05H 06H 06H |
微地址:1BH PC=06H 锁存微指令 寄存器R1=33 |
T1: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->IR1 |
33H 33H 1DH 1DH |
06H 06H 07H 07H |
微地址:1CH PC=07H 锁存微指令 IR1=1DH |
SUB A,Ri |
|||||
T0: |
A->锁存器DR1 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->DR1 |
1DH 1DH BBH BBH |
07H 07H 无效 无效 |
微地址:07H PC=08H 锁存微指令 DR1=BBH |
T1: |
寄存器R1->锁存器DR2 |
PLS1:微地址+1 PLS2:PC不变 PLS3:微指令输出 PLS4:BUS->DR2 |
BBH BBH 33H 33H |
无效 无效 无效 无效 |
微地址:08H PC=08H 锁存微指令 DR2=33H |
T2: |
ALU->A |
PLS1:微地址+1 PLS2:PC不变 PLS3:微指令输出 PLS4:ALU->A |
33H 33H 88H 88H |
无效 无效 无效 无效 |
微地址:09H PC=08H 锁存微指令 A=88H |
T3: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC不变 PLS3:微指令输出 PLS4:BUS->IR1 |
88H 88H 8FH 8FH |
无效 无效 08H 08H |
微地址:0AH PC=08H 锁存微指令 IR1=8FH |
STA 10 |
|||||
T0: |
RAM->BUS->IR2 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->IR2 |
8FH 8FH 10H 10H |
08H 08H 09H 09H |
微地址:23H PC=09H 锁存微指令 IR2=10H |
T1: |
A->RAM(10H) |
PLS1:微地址+1 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->RAM |
10H 10H 88H 88H |
09H 09H 10H 10H |
微地址:24H PC=0AH 锁存微指令 RAM(10)=88H |
T2: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC不变 PLS3:微指令输出 PLS4:BUS->IR1 |
88H 88H FFH FFH |
10H 10H 0AH 0AH |
微地址:25H PC=0AH 锁存微指令 IR1=FFH |
HALT |
|||||
T0: |
置模型机为停止状态 |
PLS1:置微地址 PLS2:停机 PLS3:微指令输出 PLS4:BUS->IR2 |
FFH 无效 |
0AH 无效 |
微地址:3FH PC=0BH |
实验二:带进位运算的模型机
(实验程序要使用16进制的数字后必须带H,不然程序会默认是10进制的。)
本实验提供了4条带进位的运算指令:RRC(带进位的右移),RLC(带进位的左移),ADD A,Ri(加法指令,可有进位溢出),JC addr (条件跳转),JMP addr(无条件跳转)。
RRC A 将A寄存器中的内容带进位位一起循环右移。
RLC A 将A寄存器中的内容带进位位一起循环左移
ADD A,Ri 将A寄存器的内容与Ri的内容相加,如果加法溢出将进位到CY。
JC addr 条件跳转指令,如果进位位CY溢出,跳转到addr。
JMP addr 无条件跳转指令,跳转到addr
本实验的指令如下:
用软件HKCPT来编辑、编译、加载实验平台,或通过键盘(键盘使用方法见第四章)把以下程序以16进制输入程序存储器,在调试时请关注进位位CY、A寄存器中的值。
内存地址 |
指令助记符 |
指令码 |
说明 |
00H |
MOV A,#81 |
5FH |
立即数81H->A |
01H |
81H |
||
02H |
RRC A |
9FH |
A >>1 |
03H |
MOV A,#18 |
5FH |
立即数18H-> A |
04H |
18H |
||
05H |
RLC A |
AFH |
A<<1 |
06H |
MOV R0,#40 |
6CH |
立即数40H->寄存器R0 |
07H |
40H |
||
08H |
MOV A,#18 |
5FH |
立即数18H-> A |
09H |
18H |
||
0AH |
RLC A |
AFH |
A<<1 |
0BH |
ADD A,R0 |
0CH |
(A)+(R0)->A |
0CH |
JC 10 |
B7H |
CY有进位 跳转到0FH |
0DH |
10H |
||
0EH |
JMP 0A |
BFH |
跳转到0AH |
0FH |
0AH |
||
10H |
STA 20 |
8FH |
将A内容写入RAM地址20H |
11H |
20H |
||
12H |
HALT |
FFH |
停机 |
运行结果为:RAM 20H单元中的内容为20H
运行程序:
通过软件HKCPT的微单步功能可观察各个变量的变化。
微单步运行过程显示如下:
微地址 |
数据流程 |
数据总线 |
地址总线 |
操作寄存器 |
00H |
取指微指令 RAM->BUS->IR1 |
5FH |
00H |
IR1=5FH |
MOV A,#81 |
||||
17H |
BUS-> A |
81H |
01H |
A=81H |
18H |
取指微指令 RAM->BUS->IR1 |
9FH |
02H |
IR1=9FH |
RRC A |
||||
27H |
A>>1 |
40H |
无效 |
A=40,CY溢出 |
28H |
取指微指令 RAM->BUS->IR1 |
5FH |
03H |
IR1=5FH |
MOV A,#18 |
||||
17H |
BUS-> A |
18H |
04H |
A=18H |
18H |
取指微指令 RAM->BUS->IR1 |
AFH |
05H |
IR1=AFH |
RLC A |
||||
2BH |
A<<1 |
31H |
无效 |
A=31H CY无溢出 |
2CH |
取指微指令 RAM->BUS->IR1 |
6CH |
06H |
IR1=6CH |
MOV R0,#40 |
||||
1BH |
BUS->寄存器R0 |
40H |
07H |
R0=40H |
1CH |
取指微指令 RAM->BUS->IR1 |
5FH |
08H |
IR1=5FH |
MOV A,#18 |
||||
17H |
BUS-> A |
18H |
09H |
A=18H |
18H |
取指微指令 RAM->BUS->IR1 |
AFH |
0AH |
IR1=AFH |
RLC A |
||||
2BH |
(A)<<1 |
30H |
无效 |
A=30H |
2CH |
取指微指令 RAM->BUS->IR1 |
0CH |
0BH |
IR1=0CH |
ADD A,R0 |
||||
03H |
A->锁存器DR1 |
30H |
无效 |
DR1=30H |
04H |
寄存器R0->锁存器DR2 |
40H |
无效 |
DR2=40H |
05H |
ALU-> A |
70H |
无效 |
ALU=70 CY无溢出 |
06H |
取指微指令 RAM->BUS->IR1 |
B7H |
0CH |
IR1=B7H |
JC 0F |
||||
2FH |
RAM->BUS->IR2 |
10H |
0DH |
IR2=10H |
30H |
取指微指令 RAM->BUS->IR1 |
BFH |
0EH |
IR1=BFH CY无溢出 |
JMP 0A |
||||
2FH |
RAM->BUS->IR2 |
0AH |
0FH |
IR2=0AH |
30H |
取指微指令 RAM->BUS->IR1 |
AFH |
0AH |
IR1=AFH 跳转0AH |
RLC A |
||||
2BH |
(A)<<1 |
E0H |
无效 |
A=E0H |
2CH |
取指微指令 RAM->BUS->IR1 |
0CH |
0BH |
IR1=0CH |
ADD A,R0 |
||||
03H |
A->锁存器DR1 |
E0H |
无效 |
DR1=E0H |
04H |
寄存器R0->锁存器DR2 |
40H |
无效 |
DR2=40H |
05H |
ALU-> A |
20H |
无效 |
ALU=20H CY有溢出 |
06H |
取指微指令 RAM->BUS->IR1 |
B7H |
0CH |
IR1=B7H |
JC 0F |
||||
2FH |
RAM->BUS->IR2 |
10H |
0DH |
IR2=10H |
30H |
取指微指令 RAM->BUS->IR1 |
8FH |
10H |
IR1=8FH CY有溢出 |
STA 20 |
||||
23H |
RAM->BUS->IR2 |
20H |
11H |
IR2=20H |
24H |
A->RAM(20H) |
20H |
20H |
RAM(20)=20 |
25H |
取指微指令 RAM->BUS->IR1 |
FFH |
12H |
IR1=FFH |
HALT |
||||
3FH |
置模型机为停止状态 |
无效 |
无效 |
置停止状态 |
如果在运行微单步时,发现有错误或对微单步中的时序过程不清楚,可用时序单元中的按钮来手动给出4个节拍。
微周期 |
数据流程 |
节拍 |
数据总线 |
地址总线 |
操作寄存器 |
T0: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址清零 PLS2:置模型机运行 PLS3:取指微指令输出 PLS4:BUS->IR1 |
无效 无效 5FH 5FH |
无效 无效 00H 00H |
微地址:00H PC=00H 锁存微指令 IR=5FH |
MOV A,#81 |
|||||
T0: |
BUS-> A |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS-> A |
5FH 5FH 81H 81H |
00H 00H 01H 01H |
微地址:17H PC=01H 锁存微指令 A=81H |
T1: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC+1 PLS3:取指微指令输出 PLS4:BUS->IR1 |
55H 55H 9FH 9FH |
01H 01H 02H 02H |
微地址:18H PC=02H 锁存微指令 IR1=9FH |
RRC A |
|||||
T0: |
A>>1 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->寄存器R0 |
9FH 9FH 无效 无效 |
03H 03H 无效 无效 |
微地址:27H PC=03H 锁存微指令 A=40H CY=1 |
T1: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC+1 PLS3:取指微指令输出 PLS4:BUS->IR1 |
无效 无效 5FH 5FH |
无效 无效 03H 03H |
微地址:28H PC=03H 锁存微指令 IR1=5FH |
MOV A,#18 |
|||||
T0: |
RAM->BUS->A |
PLS1:置微地址 PLS2:PC+1 PLS3:取指微指令输出 PLS4:BUS->锁存器DR1 |
5FH 5FH 18H 18H |
03H 03H 04H 04H |
微地址:17H PC=04H 锁存微指令 A=18H |
T1: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->锁存器DR2 |
18H 18H AFH AFH |
04H 04H 05H 05H |
微地址:18H PC=05H 锁存微指令 IR1=AFH |
RLC A |
|||||
T0: |
A<<1 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->IR1 |
AFH AFH 无效 无效 |
05H 05H 无效 无效 |
微地址:2BH PC=06H 锁存微指令 A=31H |
T1: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC不变 PLS3:微指令输出 PLS4:BUS->IR1 |
无效 无效 6CH 6CH |
无效 无效 06H 06H |
微地址:2CH PC=06H 锁存微指令 IR1=6CH |
MOV R0,#40 |
|||||
T0: |
RAM->BUS->寄存器R0 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->DR1 |
6CH 6CH 40H 40H |
06H 06H 07H 07H |
微地址:1BH PC=07H 锁存微指令 A=40H |
T1: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->DR2 |
40H 40H 5FH 5FH |
07H 07H 08H 08H |
微地址:1CH PC=08H 锁存微指令 IR1=5FH |
MOV A,#18 |
|||||
T0: |
RAM->BUS-> A |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->A |
8FH 8FH 18H 18H |
08H 08H 09H 09H |
微地址:17H PC=09H 锁存微指令 A=18H |
T1: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->RAM |
18H 18H AFH AFH |
09H 09H 0AH 0AH |
微地址:18H PC=0AH 锁存微指令 IR1=AFH |
RLC A |
|||||
T0: |
A>>1 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->A |
AFH AFH 无效 无效 |
0AH 0AH 无效 无效 |
微地址:2BH PC=0BH 锁存微指令 A=30H |
T1: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC不变 PLS3:微指令输出 PLS4:BUS->RAM |
无效 无效 0CH 0CH |
无效 无效 0BH 0BH |
微地址:2CH PC=0BH 锁存微指令 IR1=0CH |
ADD A,R0 |
|||||
T0: |
A->BUS->锁存器DR1 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->A |
0CH 0CH 30H 30H |
0BH 0BH 无效 无效 |
微地址:03H PC=0CH 锁存微指令 DR1=30H |
T1: |
R0->BUS->锁存器DR2 |
PLS1:微地址+1 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->RAM |
30H 30H 40H 40H |
无效 无效 无效 无效 |
微地址:04H PC=0CH 锁存微指令 DR2=40H |
T2: |
ALU->BUS->A |
PLS1:置微地址 PLS2:停机 PLS3:微指令输出 PLS4:BUS->IR2 |
40H 40H 70H 70H |
无效 无效 无效 无效 |
微地址:05H PC=0CH 锁存微指令 A=70 CY=0 |
T3: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC不变 PLS3:微指令输出 PLS4:BUS->RAM |
70H 70H B7H B7H |
无效 无效 0CH 0CH |
微地址:06H PC=0CH 锁存微指令 A=70 CY=0 |
JC 10 |
|||||
T0: |
RAM->BUS->IR2 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->IR2 |
B7H B7H 10H 10H |
0CH 0CH 0DH 0DH |
微地址:2FH PC=0DH 锁存微指令 IR2=10H |
T1: |
因CY=0 不跳转 取指 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->A |
10H 10H BFH BFH |
0DH 0DH 0EH 0EH |
微地址:30H PC=0EH 锁存微指令 无操作 |
JMP 0A |
|||||
T0: |
RAM->BUS->IR2 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->IR2 |
BFH B7H 0AH 0AH |
0EH 0EH 0FH 0FH |
微地址:2FH PC=0FH 锁存微指令 IR2=0AH |
T1: |
取指微指令 RAM->BUS->IR1 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->IR2 |
0AH 0AH AFH AFH |
0FH 0FH 0AH 0AH |
微地址:30H PC=0AH 锁存微指令 IR1=AFH |
RLC A |
|||||
T1: |
A<<1 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->IR2 |
0AH 0AH AFH AFH |
0FH 0FH 0AH 0AH |
微地址:2BH PC=0BH 锁存微指令 IR1=E0H |
T2: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC不变 PLS3:微指令输出 PLS4:BUS->RAM |
70H 70H B7H B7H |
无效 无效 0CH 0CH |
微地址:2CH PC=0BH 锁存微指令 A=70 CY=0 |
ADD A,R0 |
|||||
T0: |
A->BUS->锁存器DR1 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->A |
0CH 0CH 30H 30H |
0BH 0BH 无效 无效 |
微地址:03H PC=0CH 锁存微指令 DR1=E0H |
T1: |
R0->BUS->锁存器DR2 |
PLS1:微地址+1 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->RAM |
30H 30H 40H 40H |
无效 无效 无效 无效 |
微地址:04H PC=0CH 锁存微指令 DR2=40H |
T2: |
ALU->BUS->A |
PLS1:置微地址 PLS2:停机 PLS3:微指令输出 PLS4:BUS->IR2 |
40H 40H 70H 70H |
无效 无效 无效 无效 |
微地址:05H PC=0CH 锁存微指令 A=20 CY=1 |
T3: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC不变 PLS3:微指令输出 PLS4:BUS->RAM |
70H 70H B7H B7H |
无效 无效 0CH 0CH |
微地址:06H PC=0CH 锁存微指令 A=70 CY=0 |
JC 10 |
|||||
T0: |
RAM->BUS->IR2 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->IR2 |
B7H B7H 10H 10H |
0CH 0CH 0DH 0DH |
微地址:2FH PC=0DH 锁存微指令 IR2=10H |
T1: |
因CY=1 跳转 取指 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->A |
10H 10H 8FH 8FH |
0DH 0DH 10H 10H |
微地址:30H PC=10H 锁存微指令 无操作 |
STA 20 |
|||||
T0: |
RAM->BUS->IR2 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->IR2 |
B7H B7H 20H 20H |
10H 10H 11H 11H |
微地址:13H PC=11H 锁存微指令 IR2=10H |
T1: |
A->BUS->RAM(20) |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->A |
10H 10H 20H 20H |
0DH 0DH 20H 20H |
微地址:14H PC=12H 锁存微指令 A->RAM(20) |
T3: |
取指微指令 RAM->BUS->IR1 |
PLS1:微地址+1 PLS2:PC不变 PLS3:微指令输出 PLS4:BUS->RAM |
20H 20H B7H B7H |
20H 20H 0CH 0CH |
微地址:15H PC=12H 锁存微指令 IR1=FFH |
HALT |
|||||
T0: |
置模型机为停止状态 |
PLS1:置微地址 PLS2:PC+1 PLS3:微指令输出 PLS4:BUS->IR2 |
FFH 无效 |
12H 无效 |
微地址:3FH PC=13H |
T1: |
置模型机为停止状态 |
实验三:数据传送实验
(实验程序要使用16进制的数字后必须带H,不然程序会默认是10进制的。)
或通过键盘(键盘使用方法见第四章)输入微程序及以下程序:
内存地址 |
指令助记符 |
指令码或立即数 |
说明 |
00H |
MOV R0, #03H |
6CH |
立即数12H->A |
01H |
03H |
||
02H |
MOV R1, #66H |
6DH |
立即数66H->R0 |
03H |
66H |
||
04H |
MOV A, 12H |
5FH |
|
05H |
12H |
寄存器R0内容->A |
|
06H |
MOV A, R0 |
3CH |
R0内容->A |
07H |
MOV A, @R0 |
2CH |
|
08H |
STA 10 |
8FH |
将A内容写入RAM地址10H |
09H |
10 |
||
0AH |
HALT |
FFH |
停机 |
运行结果为:RAM 10H单元中的内容为66H
运行程序:通过软件HKCPT的微单步功能可观察各个变量的变化。
微单步运行过程显示如下:
微地址 |
数据流程 |
数据总线 |
地址总线 |
操作寄存器 |
00H |
取指微指令 RAM->BUS->IR1 |
6CH |
00H |
IR1=6CH |
MOV R0, #03H |
||||
1BH |
RAM->寄存器R0 |
03H |
01H |
寄存器R0=03H |
1CH |
取指微指令 RAM->BUS->IR1 |
6DH |
02H |
IR1=6DH |
MOV R1,#66 |
||||
1BH |
RAM->寄存器R1 |
66H |
03H |
寄存器R1=66H |
1CH |
取指微指令 RAM->BUS->IR1 |
5FH |
04H |
IR1=5FH |
MOV A, #12H |
||||
17H |
RAM->A |
12H |
05H |
A=12H |
18H |
取指微指令 RAM->BUS->IR1 |
3CH |
06H |
IR1=3CH |
MOV A,R0 |
||||
0FH |
R0寄存器>A |
03H |
无效 |
A=03H |
10H |
取指微指令 RAM->BUS->IR1 |
2CH |
07H |
IR1=2CH |
MOV A,@R0 |
||||
0BH |
R0寄存器->BUS->IR2寄存器 |
03H |
无效 |
IR2=03H |
0CH |
IR2->地址BUS,RAM->数据BUS->A |
66H |
03H |
A=66H |
0DH |
取指微指令 RAM->BUS->IR1 |
8FH |
08H |
IR1=8FH |
STA 10 |
||||
23H |
RAM->BUS->IR2 |
10H |
09H |
IR2=10H |
24H |
A->RAM(10H) |
66H |
10H |
RAM(10)=66H |
25H |
取指微指令 RAM->BUS->IR1 |
FFH |
0AH |
IR1=FFH |
HALT |
||||
3FH |
置模型机为停止状态 |
无效 |
无效 |
置停止状态 |
实验四:移位实验
(实验程序要使用16进制的数字后必须带H,不然程序会默认是10进制的。)
在软件HKCPT中,输入以下程序,并且编译、加载到实验平台中。
或通过键盘(键盘使用方法见第四章)输入微程序及以下程序:
内存地址 |
指令助记符 |
指令码或立即数 |
说明 |
00H |
MOV A,#55H |
5FH |
立即数55H->A |
01H |
55H |
||
02H |
RRC A |
9FH |
A >>1 |
03H |
RLC A |
AFH |
A<<1 |
05H |
STA 10 |
8FH |
将A内容写入RAM地址10H |
06H |
10 |
||
07H |
HALT |
FFH |
停机 |
运行结果为:RAM 10H单元中的内容为55H
运行程序:通过软件HKCPT的微单步功能可观察各个变量的变化。
微单步运行过程显示如下:
微地址 |
数据流程 |
数据总线 |
地址总线 |
操作寄存器 |
00H |
取指微指令 RAM->BUS->IR1 |
5FH |
00H |
IR1=5FH |
MOV A,#55H |
||||
17H |
RAM->寄存器A |
55H |
01H |
A=55H |
18H |
取指微指令 RAM->BUS->IR1 |
9FH |
02H |
IR1=9F |
RRC A |
||||
27H |
A>>1 |
2AH |
无效 |
A=2A |
28H |
取指微指令 RAM->BUS->IR1 |
AFH |
03H |
IR1=AFH |
RLC A |
||||
2BH |
A<<1 |
55H |
无效 |
A=55H |
2CH |
取指微指令 RAM->BUS->IR1 |
8FH |
04H |
IR1=8FH |
STA 10 |
||||
23H |
RAM->BUS->IR2 |
10H |
05H |
IR2=10H |
24H |
A->RAM(10H) |
55H |
10H |
RAM(10)=88H |
25H |
取指微指令 RAM->BUS->IR1 |
FFH |
06H |
IR1=FFH |
HALT |
||||
3FH |
置模型机为停止状态 |
无效 |
无效 |
置停止状态 |
实验五:转移实验
(实验程序要使用16进制的数字后必须带H,不然程序会默认是10进制的。)
在软件HKCPT中,输入以下程序,并且编译、加载到实验平台中。
或通过键盘(键盘使用方法见第四章)输入微程序及以下程序:
内存地址 |
指令助记符 |
指令码或立即数 |
说明 |
00H |
MOV A,#01 |
5FH |
立即数01H->A |
01H |
01H |
||
02H |
MOV R0,#01 |
6CH |
立即数01H->R0 |
03H |
01H |
||
04H |
SUB A,R0 |
1CH |
A内容-R0内容->A |
05H |
JC 4 |
B7H |
条件跳转至04H |
06H |
04H |
||
07H |
JZ 4 |
B3H |
条件跳转至04H |
08H |
04H |
||
09H |
JMP D |
BFH |
无条件跳转至0DH |
0AH |
0DH |
||
0BH |
MOV A,88H |
5FH |
立即数88H->A |
0CH |
88H |
||
0DH |
STA 10 |
8FH |
将A内容写入RAM地址10H |
0EH |
10 |
||
0FH |
HALT |
FFH |
停机 |
运行结果为:RAM 10H单元中的内容为FEH
运行程序:通过软件HKCPT的微单步功能可观察各个变量的变化。
微单步运行过程显示如下:
微地址 |
数据流程 |
数据总线 |
地址总线 |
操作寄存器 |
00H |
取指微指令 RAM->BUS->IR1 |
5FH |
00H |
IR1=5FH |
MOV A #01H |
||||
17H |
RAM->寄存器R0 |
01H |
01H |
A=01H |
18H |
取指微指令 RAM->BUS->IR1 |
6CH |
02H |
IR1=6CH |
MOV R0,#01H |
||||
1BH |
RAM->寄存器R0 |
01H |
03H |
寄存器R0=01H |
1CH |
取指微指令 RAM->BUS->IR1 |
1CH |
04H |
IR1=1CH |
SUB A,R0 |
||||
07H |
A->Dbus->DR1 |
01H |
无效 |
DR1=01H |
08H |
Ri->Dbus->DR2 |
01H |
无效 |
DR2=01H |
09H |
ALU->Dbus->A |
00H |
无效 |
A=00H |
0AH |
取指微指令 RAM->BUS->IR1 |
B7H |
05H |
IR1=B7H |
JC 4 |
||||
2FH |
Dbus->IR2 |
04H |
06H |
IR2=04H |
30H |
IR2内容->Abus, Dbus->PC |
B3H |
07H |
IR1=B3H |
JZ 4 |
||||
2FH |
Dbus->IR2 |
04H |
08H |
IR2=04H |
30H |
IR2内容->Abus, Dbus->PC |
1CH |
04H |
IR1=1CH |
SUB A,R0 |
||||
07H |
A->Dbus->DR1 |
00H |
无效 |
DR1=00H |
08H |
Ri->Dbus->DR2 |
01H |
无效 |
DR2=01H |
09H |
ALU->Dbus->A |
FFH |
无效 |
A=FFH |
0AH |
取指微指令 RAM->BUS->IR1 |
B7H |
05H |
IR1=B7H |
JC 4 |
||||
2FH |
Dbus->IR2 |
04H |
06H |
IR2=04H |
30H |
IR2内容->Abus, Dbus->PC |
1CH |
04H |
IR1=1CH |
SUB A,R0 |
||||
07H |
A->Dbus->DR1 |
FFH |
无效 |
DR1=FFH |
08H |
Ri->Dbus->DR2 |
01H |
无效 |
DR2=01H |
09H |
ALU->Dbus->A |
FEH |
无效 |
A=FEH |
0AH |
取指微指令 RAM->BUS->IR1 |
B7H |
05H |
IR1=B7H |
JC 4 |
||||
2FH |
Dbus->IR2 |
04H |
06H |
IR2=04H |
30H |
IR2内容->Abus, Dbus->PC |
B3H |
07H |
IR1=B3H |
JZ 4 |
||||
2FH |
Dbus->IR2 |
04H |
08H |
IR2=04H |
30H |
IR2内容->Abus, Dbus->PC |
BFH |
09H |
IR1=BFH |
JMP D |
||||
2FH |
Dbus->IR2 |
0DH |
0AH |
IR2=0DH |
30H |
取指微指令 RAM->BUS->IR1 |
8FH |
0DH |
IR1=8FH |
STA 10 |
||||
23H |
RAM->BUS->IR2 |
10H |
0EH |
IR2=10H |
24H |
A->RAM(10H) |
FEH |
10H |
RAM(10)=FEH |
25H |
IR2内容->Abus, Dbus->PC |
FFH |
0FH |
IR1=FFH |
HALT |
||||
3FH |
置模型机为停止状态 |
无效 |
无效 |
置停止状态 |
2. 驻机键盘和液晶显示器的使用方式
2.1 键盘定义
打开电源上电后按实验仪任意键,即可进入键盘监控。液晶显示器作为键盘监控的输出,用于显示地址、指令、数据或微指令信息等。24个键中有16个数字键,8个控制键。表X-1列出这8个控制键的名称和功能,数字键用于输入地址、指令和数据信息。
表X-1 控制键说明
光标键 |
用于移动光标选择菜单项或将光标从地址到数据之间来回切换 |
|
MENU |
主菜单键 |
无论在何种操作下,按下此键,将返回到主菜单 |
LAST |
减1键 |
地址减1 |
NEXT |
加1键 |
地址加1 |
STEP |
单拍键 |
单步运行程序 |
GO/STOP |
运行/停止键 |
奇数次按此键,启动运行程序,偶数次停止运行 |
SFR |
寄存器键 |
显示寄存器 |
Enter |
确认键 |
对修改,备份操作时的确认 |
进入键盘监控后,液晶屏上显示主菜单:
1、Mcode 2、Rcode
3、2416 4、RUN
在主菜单下可以进行以下操作:
(1)选择1进行微代码操作
(2)选择2进行RAM程序和数据操作
(3)选择3进行把微代码和RAM程序备份到24C08中去,或者从24C08中读取微代码和RAM程序
(4)选择4运行程序
以上操作可以按数字键“1-4”进行选择执行,也可以按TAB键移动光标来选择,并由按“确认”键来执行,其中选“4”等同于按RUN键,如果要停止运行程序,再按“RUN/STOP”键即可。
(5)按“STEP”键单步执行程序
(6)按“SFR”键,显示特殊寄存器内容
下面按功能分类介绍实验系统监控功能及操作方法:
(7)监控单元的“RST”键只作调试用,与实验无关。
2.2 操作方法
2.2.1 读/写控存微指令(保存在6264)
在主菜单下选择“1”
屏幕上显示:ADDR MICRO CODE
00 xx xx xx
地址 微代码
光标定位在地址处,按“TAB”键,在地址与微代码之间切换;在光标所在处,按数字键即可对地址或微代码进行修改;按“Last”键,修改后的微指令写入相应单元后,地址减1;按“Next”键或“Enter”键,修改后的微指令写入相应单元后,地址加1。
2.2.2 读/写内存单元指令或数据(保存在6264)
在主菜单下选择“2”
屏幕上将显示:ADDR RAM CODE
xx xx
地址 指令或数据
光标定位在地址处,按“TAB”键,光标在地址与指令或数据之间切换;按数字键即可对光标所在处的地址或者指令数据进行修改;按“Last”键或者“Next”和“Enter”键,可将修改后的指令或数据写入相应单元中去,然后地址减1或加1。
2.2.3 控存块微代码信息与flash memory数据交换操作
首先在主菜单下选“3”,液晶屏上将显示子菜单:
1、RD→M 2、M→WR
3、RD→R 4、R→WR
(1)选择1进行里面flash memory存储的数据读回控存块。
(2)选择2进行控存块数据写入flash memory操作。
(3)选择3进行flash memory里面存储的数据读回到RAM。
(4)选择4进行RAM块写入flash memory操作。
2.2.4 从flash memory读回控存块
主菜单选“3”
子菜单选“1”,屏幕上将显示:
flash memory源地址 长度 微代码目标地址
ADDR LEN ADDR
00 001 00
光标定义在flash memory源地址处,按“TAB”键将光标在源地址、长度、目标地址之间切换,可供修改地址和长度;按“Enter”键将flash memory的源地址处开始的内容读到控存块目标地址处,长度由LEN决定。
2.2.5 控存块数据写入flash memory
主菜单选“3”
在子菜单下选择“2”,液晶屏上将显示:
微程序地址 长度
ADDR LEN 24C08
00 001
光标定位在微程序地址处,按“TAB”键可将光标在地址和长度之间切换,一旦地址和长度确定后,按“Enter”键即可以将指定地址,指定长度单元的微代码信息保存到flash memory中0地址开始的存储单元中去,并返回到上一级子菜单。
2.2.6 从flash memory读回到内存RAM块
主菜单选“3”
子菜单选“3”,屏幕上将显示:
flash memory源地址 长度 RAM目标地址
ADDR LEN ADDR
00 001 00
光标定义在flash memory源地址处,按“TAB”键将光标在源地址、长度、目标地址之间切换,可供修改地址和长度;按“Enter”键将flash memory的源地址处开始的内容读到RAM目标地址处,长度由LEN决定。
2.2.7 内存块保存到flash memory中
主菜单选“3”
在子菜单下选择“4”液晶屏上将显示:
RAM地址 长度
ADDR LEN 24C08
00 001
光标定位在RAM地址处,按“TAB”键可将光标在地址和长度之间切换,一旦地址和长度确定后,按“Enter”键即可以将指定地址,指定长度单元的RAM程序或数据保存到flash memory中0地址开始的存储单元中去,并返回到上一级子菜单。
2.2.8 微单步运行程序
在主菜单下按“STEP”键,再按ENTER,实验系统将单拍执行程序一次,然后屏幕上显示执行后的结果。
MA:XX 微代码地址
PC=:XX PC 指针
2.2.9 连续运行程序
在主菜单下按“RUN/STOP”键或“4”,实验系统将连续执行程序,如果遇到HALT指令或再次按“RUN/STOP”键,停止运行,並在液晶屏上显示执行结果。
MA:XX 微代码地址
PC=:XX PC 指针
2.2.10 寄存器显示
在主菜单下按“SFR”键,液晶屏上显示微指令代码、指令或数据地址、程序指针、累加器内容。
PC DR1 DR2 A ALU
XX XX XX XX XX
程序指针 数据地址 累加器内容 算术逻辑单元内容
📝总结
计算机组成原理领域就像一片广袤而未被完全探索的技术海洋,邀请你勇敢踏足数字世界和计算机组成原理的神秘领域。这是一场结合创造力和技术挑战的学习之旅,从基础概念到硬件实现,逐步揭示更深层次的计算机结构、指令集架构和系统设计的奥秘。渴望挑战计算机组成原理的学习路径和掌握计算机硬件的技能?不妨点击下方链接,一同探讨更多数字技术的奇迹吧。我们推出了引领趋势的💻 计算机组成原理专栏:《机组 | 模块单元实验》,旨在深度探索计算机系统技术的实际应用和创新。🌐💡