脱机运算器实验报告
理论课教师: 尹辉
实验指导教师: 刘万成
组号: 28
实验目的:
姓名: 贡乐天
学号:
17281033
了解脱机状态下 AM2901 运算器的功能与控制信号的使用,了解运算器 AM2901 的内
部结构与工作时序,观察运算器结果对状态标志的影响。
深入了解 AM2901 运算器的功能与具体用法,掌握 AM2901 完成各种运算操作时各控
制信号的使用,观察指令执行的结果对状态标志的影响;了解 4 片 AM2901 的级联方式,
深化运算器部件的组成、设计、控制与使用等诸多知识。
实验内容:
运算器实验(1)
SST
001
001
001
001
001
001
001
001
001
110
101
SSH
SCI
000
000
000
001
001
000
000
000
000
100
100
B
口
A
口
0000 不用
0001 不用
0000
0000
0001
0001
0000
0000
0000
0001
0001
0000
0000
0001
0001
0001
0000 不用
0000 不用
压 START 前
压 START 后
ALU 输出 CZVS
ALU 输出 CZVS
0101
1010
1111
0101
0F0F
0F0F
0101
0E0E
FEFE
FEFE
FDFC
随机
0000
0000
0000
1000
1000
1010
1010
1000
1001
0001
0101
1010
2121
F0F1
0E0E
0F0F
0101
0101
0E0E
FDFC
7EFE
01000
0000
0000
1000
1000
1010
1010
1000
1001
0001
0001
运算
I8-I0
*D1+0->R0
011000111
*D2+0->R1
011000111
R0+R1->R0
011000001
RO-R1->R0
011001001
R1-R0->R1
011001001
R0∨R1->R1
011011001
R0∧R1->R0
011100001
R0⊕R1->R0
011110001
R0 R1->R0
011111001
R0 逻辑左移 111000011
R0 逻辑右移 101000011
实验结果分析:
控制信号表如下所示:
编码
L4 L3
L
L
L
H
L
H
H
H
L
L
H
L
H
L
L5
L
L
L
L
H
H
H
运算功能
R+S
R
S
R˅S
R˄S
˄S
R⊕S
H
L2
L
L
L
L
H
H
H
H
H
H
编码
L1 L0
L
L
H
L
L
H
H
H
L
L
H
L
H
L
H
H
编码
I7
L
L
H
H
L
L
H
H
I8
L
L
L
L
H
H
H
H
I6
L
H
L
H
L
H
L
H
3 位选择码
SSH
SCI 编码
0 0 0
0 0 1
0 1 0
R⊙S
数据来源
R
A
A
0
0
0
D
D
D
结果处理
Q 寄存器
F→Q
Q/2→Q
2Q→Q
S
Q
B
Q
B
A
A
Q
0
Y 输出
F
F
A
F
F
F
F
F
通用寄存器组
F→B
F→B
F/2→B
F/2→B
2F→B
2F→B
指令举例
ADD DEC
SUB INC
ADC SBB
Cin 取值
0
1
C
3 位控制码
SSH SCI 编码
1 0 0
1 0 1
1 1 0
1 1 1
左移
RAM0 Q0
X
C
Q15
X
X
/F15
X
右移
RAM15 Q15
X
C
Cy
F15
X
RAM0
RAM0
说明
用于逻辑移位指令
用于和与 C 循环移位指令
原码除(左移)乘(右移)
用于算术右移指令
3 位选择码
SST 编码
0 0 0
0 0 1
状态位输入
说明
Z
Z
S
C
S
C
CY F=0 OVR F15
V
V
四个标志位的值保持不变
接收 ALU 的标志位输出的值
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
内部总线对应的一位
恢复标志位原来的现场值
0
1
Z
Z
V
V
S
S
RAM0
RAM15
Z
Z
V
V
S
S
Q0
Z
V
S
置“0”C,另三个标志位不变
置“1”C,另三个标志位不变
右移操作,另三位标志位不变
左移操作,另三位标志位不变
联合右移,另三位标志位不变
由上表可知,所做的实验则是对数据的存放,加减,移位等操作。
实验中,各个数据的均为 16 进制显示,有 4 个 4 位 LED 灯显示信号。
现选择数据如下:
1.加法数据
*D2+0->R1
011000111
001
000
0001 不用 1010
0000
1010
0000
此指令完成将 D2 中数据赋值给 R1 的操作,具体操作为将 D2 中数据加 0 后再存到 R1
的地址中去。
由于只有 B 口地址可以进行数据的写入,所以将 B 口作为存储数据的地址,A 口不用输
入地址。所以 B 口为 0000,A 口为不用。
由于是将 F 输出的结果输入到 B 口对应的地址中去,所以 I8-I6 的值为 011,对应相应
指令功能。运算功能执行 R+S 功能,所以 I5-I3 取值为 000,对应将两个数据相加。数据来
源是 D 和 0,所以 I2-I0 取值为 111。所以 I8-I0 取值为 011000111。
由于是加法运算,所以 SST 取值为 001.SSH 取值为 000。
按 START 之前,输出 D 口值加 0,且 D 值为 1010,所以输出为 1010。CZVS 值为 0000。
按 START 之后,将值存入 B 口对应地址中,输出仍为 D 口值加 0,且 D 值为 1010,所以
输出为 1010。由于无溢出等情况,所以 CZVS 值为 0000。
2. 逻辑数据
R0∧R1->R0
011100001
001
000
0000
0001
0101
1010
0101
1010
此指令完成将 R0、R1 中数据取与运算后的值赋给 R0 的操作,具体操作为将 R0、R1 中
数据取至寄存器中后进行运算再存到 R0 的地址中去。
由于只有 B 口地址可以进行数据的写入,所以将 B 口作为存储数据的地址,A 口输入另
一个地址。所以 B 口为 0000,A 口为 0001。
由于是将 F 输出的结果输入到 B 口对应的地址中去,所以 I8-I6 的值为 011,对应相应
指令功能。运算功能执行 R∧S 功能,所以 I5-I3 取值为 100,对应将两个数据取与运算。
数据来源是 R0 和 R1,所以 I2-I0 取值为 001。所以 I8-I0 取值为 011100001.
由于是加法运算,所以 SST 取值为 001。SSH 取值为 000。
按 START 之前,输出 R0 与 R1 与运算后的值,所以值为 0101,所以输出为 0101。CZVS
值为 1010。
按 START 之后,将值存入 B 口对应地址中,R0 口值变为 0101,但 R1 值不变,所以输出
R0 与 R1 与运算后的值,所以值为 0101,所以输出为 0101。CZVS 值为 1010。
运算器实验(2)
实验步骤:
将教学机左下方的 5 个拨动开关置为 1XX00(单步、16 位、脱机);先按一下“RESET”
按键,再按一下“START”按键,进行初始化。接下来,按下表所列的操作在机器上进行运
算器脱机实验,将结果填入表中:
SSHS
CI
B 口 A 口
0000
0000 不用 FFFF
0001 不用 FFFF
0001
FFFE
0010 不用 FFFF
0011 不用 0001
0010
FFFE
1000 不用 0001
1000
0002
0101 不用 1234
1000
0011
执行操作
I8
I7
I6
011
011
011
011
011
011
011
011
011
FFFF→R0
FFFF→R1
R1+R0→R1
FFFF→R2
0001→R3
R2-R3→R2
0001→R8
R8+1→R8
1234→R5
R5→Y
R5+1→R5
011
AAAA→R6
011
9999→R7
011
R6-R7→R7
R7 逻辑左移 111
R6→Q
000
R6 与 Q 的
联合右移
010
100
I5
I4
I3
000
000
000
000
000
001
000
000
000
000
000
000
010
000
000
000
I2
I1
I0
111
111
001
111
111
001
111
101
111
101
111
111
001
011
011
011
S
S
T
001
001
001
001
001
001
001
001
001
001
001
001
001
110
001
111
000
000
000
000
000
001
000
000
000
000
000
000
001
100
000
110
ALU
ALU
按 START 前
C
Z
V
S
随机 FFFF
0001
FFFF
FFFD
0001
FFFF
1001
0001
0001
FFFD
0000
0001
1001
0000
0003
1234
0000
按 START 后
C
Z
V
S
0001
0001
1001
0001
0000
1001
0000
0000
0000
0101
0101
1234
0000
1235
0110 不用 AAAA 0000 AAAA
0111 不用 9999
0111
1111
0111 不用 1111
0110 不用 AAAA 0000 AAAA
0001
0001
1000
9999
9999
2222
0110
0110 不用 AAAA 0001
5555
0000
0001
0001
1000
0000
0001
0001
实验结果分析:
R1+R0→R1
1.加法数据
011
000
001
001
000
0001
0000
FFFE
0001
FFFD 1001
此指令完成将 R0、R1 中数据取加运算后的值赋给 R1 的操作,具体操作为将 R0、R1 中
数据取至寄存器中后进行运算再存到 R1 的地址中去。
由于只有 B 口地址可以进行数据的写入,所以将 B 口作为存储数据的地址,A 口输入另
一个地址。所以 B 口为 0001,A 口为 0000。
由于是将 F 输出的结果输入到 B 口对应的地址中去,所以 I8-I6 的值为 011,对应相应
指令功能。运算功能执行 R+S 功能,所以 I5-I3 取值为 000,对应将两个数据取加运算。数
据来源是 R0 和 R1,所以 I2-I0 取值为 001。以 I8-I0 取值为 011000001。
由于是加法运算,所以 SST 取值为 001。SSH 取值为 000。
按 START 之前,输出 R0 与 R1 加运算后的值,所以值为 FFFE,所以输出为 FFFE。CZVS
值为 0001。
按 START 之后,将值存入 B 口对应地址中,R1 口值变为 FFFE,但 R0 值不变,所以输出
R0 与 R1 加运算后的值,所以值为 FFFD,所以输出为 FFFD。CZVS 值为 1001。
2. 存储数据
9999→R7
011
000
111
001
000
0111 不用 9999
0001
9999
0001
此指令完成将 D 中数据赋值给 R7 的操作,具体操作为将 D 中数据加 0 后再存到 R7 的地
址中去。
由于只有 B 口地址可以进行数据的写入,所以将 B 口作为存储数据的地址,A 口不用输
入地址。所以 B 口为 0111,A 口为不用。
由于是将 F 输出的结果输入到 B 口对应的地址中去,所以 I8-I6 的值为 011,对应相应
指令功能。运算功能执行 R+S 功能,所以 I5-I3 取值为 000,对应将两个数据相加。数据来
源是 D 和 0,所以 I2-I0 取值为 111.所以 I8-I0 取值为 011000111。
由于是加法运算,所以 SST 取值为 001。SSH 取值为 000。
按 START 之前,输出 D 口值加 0,且 D 值为 9999,所以输出为 9999。CZVS 值为 0001。
按 START 之后,将值存入 B 口对应地址中,输出仍为 D 口值加 0,且 D 值为 9999,所以
输出为 9999。CZVS 值为 0001。
思考题:
分析 R2-R3→R2 和 R6-R7→R7 的结果,并说明操作控制的区别。
1. R2-R3→R2 减法数据
R2-R3→R2
011
001
001
001
001
0010
0011
FFFE
0000
FFFD 1001
此指令完成将 R2、R3 中数据取减运算后的值赋给 R2 的操作,具体操作为将 R2、R3 中
数据取至寄存器中后进行运算再存到 R2 的地址中去。
由于只有 B 口地址可以进行数据的写入,所以将 B 口作为存储数据的地址,A 口输入另
一个地址。所以 B 口为 0010,A 口为 0011。
由于是将 F 输出的结果输入到 B 口对应的地址中去,所以 I8-I6 的值为 011,对应相应
指令功能。运算功能执行 S-R 功能,所以 I5-I3 取值为 001,对应将两个数据取减运算。数
据来源是 R2(S)和 R3(R),所以 I2-I0 取值为 001。以 I8-I0 取值为 011001001。
由于是减法运算,所以 SST 取值为 001。SSH 取值为 001。
按 START 之前,输出 R2 与 R3 减运算后的值,所以值为 FFFE,所以输出为 FFFE。CZVS
值为 0000。
按 START 之后,将值存入 B 口对应地址中,R2 口值变为 FFFE,但 R3 值不变,所以输出
R2 与 R3 减运算后的值,所以值为 FFFD,所以输出为 FFFD。CZVS 值为 1001。
R6-R7→R7
011
010
001
001
001
0111
0110
1111
0001
9999
1000
2. R6-R7→R7 减法数据
此指令完成将 R6、R7 中数据取减运算后的值赋给 R7 的操作,具体操作为将 R6、R7 中
数据取至寄存器中后进行运算再存到 R7 的地址中去。
由于只有 B 口地址可以进行数据的写入,所以将 B 口作为存储数据的地址,A 口输入另
一个地址。所以 B 口为 0111,A 口为 0110。
由于是将 F 输出的结果输入到 B 口对应的地址中去,所以 I8-I6 的值为 011,对应相应
指令功能。运算功能执行 R-S 功能,所以 I5-I3 取值为 010,对应将两个数据取减运算。数
据来源是 R6(R)和 R7(S),所以 I2-I0 取值为 001。以 I8-I0 取值为 011010001。
由于是减法运算,所以 SST 取值为 001。SSH 取值为 001。
按 START 之前,输出 R6 与 R7 减运算后的值,所以值为 1111,所以输出为 1111。CZVS
值为 0001。
按 START 之后,将值存入 B 口对应地址中,R7 口值变为 1111,但 R6 值不变,所以输出
R6 与 R7 减运算后的值,所以值为 9999,所以输出为 9999。CZVS 值为 1000。
3.区别:
第一个运算 I5-I3 为 001(S-R),第二个为 010(R-S),两个运算地址顺序正相反,一
个以被减数作为 B 口地址,,一个以减数作为 B 口地址。
由于写入数据只能由 B 口地址完成,所以在做减法时,R 与 S 的选择便显得比较重要。
在两个运算中,由于计算结果的存储位置不同,指令的选择也不尽相同。主要在于第一个运
算中,由于 B 口只对应数据 S,所以要写入数据应为 S 数据,所以 R2(被减数)应为 S 数
据,而第二个运算正相反,要将 R7(减数)作为 S 数据。这便造成了减法顺序的不同,一
个要 R-S,另一个要 S-R。所以 I5-I3 的指令不同。同时也造成了地址顺序的不同,一个将
减数作为 B 口地址(S 数据),一个将被减数作为 B 口地址(S 数据)。所以造成了 A 口与 B
口地址顺序的不同。
分析 R8+1→R8 与 R5→Y 同时 R5+1→R5 的结果,并说明操作控制的区别。
1. R8+1→R8 减法数据
R8+1→R8
011
000
101
001
000
1000
1000
0002
0000
0003
0000
此指令完成将 R8 中数据取加 1 运算后的值赋给 R8 的操作,具体操作为将 R8 中数据取
至寄存器中后进行运算再存到 R8 的地址中去。
由于只有 B 口地址可以进行数据的写入,所以将 B 口作为存储数据的地址,A 口输入操
作数地址。所以 B 口为 1000,A 口为 1000。
由于是将 F 输出的结果输入到 B 口对应的地址中去,所以 I8-I6 的值为 011,对应相应
指令功能。运算功能执行 R+S 功能,所以 I5-I3 取值为 000,对应将两个数据取加运算。数
据来源是 D(R)和 R8(S),所以 I2-I0 取值为 101。以 I8-I0 取值为 011000101。
由于是加法运算,所以 SST 取值为 001。SSH 取值为 000。
按 START 之前,输出 R8 与 D 加运算后的值,所以值为 0002,所以输出为 0002。CZVS
值为 0000。
按 START 之后,将值存入 B 口对应地址中,R8 口值变为 0002,但 D 值不变,所以输出
R8 与 D 加运算后的值,所以值为 0003,所以输出为 0003。CZVS 值为 0000。
2. R5→Y 同时 R5+1→R5
R5→Y
R5+1→R5
010
000
101
001
000
0101
0101
1234
0000
1235
0000
此指令完成将 R5 中数据先送到 Y,再取加 1 运算后的值赋给 R5 的操作,具体操作为将
R5 中数据取至寄存器中后进行输出到 Y,再运算再存到 R5 的地址中去。
由于只有 B 口地址可以进行数据的写入,所以将 B 口作为存储数据的地址,A 口输入操
作数地址。所以 B 口为 0101,A 口为 0101。
由于是将 F 输出的结果输入到 B 口对应的地址中去,并且 Y 输出为 A(R5),所以 I8-I6
的值为 010,对应相应指令功能。运算功能执行 R+S 功能,所以 I5-I3 取值为 000,对应将
两个数据取加运算。数据来源是 D(R)和 R8(S),所以 I2-I0 取值为 101。以 I8-I0 取值
为 010000101。
由于是加法运算,所以 SST 取值为 001。SSH 取值为 000。
按 START 之前,Y 输出 A 地址的值即 R5 的值,所以值为 1234,所以输出为 1234。CZVS
值为 0000。
按 START 之后,将值存入 B 口对应地址中,R5 口值变为 1235,Y 仍输出 A 地址的值即
R5 的值,所以值为 1235,所以输出为 1235。CZVS 值为 0000。
3.区别:
两个操作唯一的区别在于 Y 输出的不同,第一个输出运算后的 F 值,另一个输出 A 地
址的值。
所以两个操作的 I8-I6 的值不同,第一个为 011,第二个为 010,造成 Y 输出结果的不同。