实验目的:
了解脱机操作下 AM2901 运算器的功能与控制信号的使用,了解运算器 AM2901 的内部
结构及工作时序,观察运算器运算的结果对状态标志的影响。
实验内容:
用模拟仿真软件进行运算器实验(1)
按下表所列的操作在“脱机运算器32”或“脱机运算器64”仿真软件上进行运算器实验,将结果填入表中:
运算 | I8-I0 | SST | SSH SCI | B口 | A口 | 压START后 | |
ALU输出 | 目的寄 存器的值 | ||||||
D1*+0->R0 | 011000111 | 001 | 000 | 0000 | 不用 | 0101 | 0101 |
D2*+0->R1 | 011000111 | 001 | 000 | 0001 | 不用 | 1010 | 1010 |
R0+R1->R0 | 011000001 | 001 | 000 | 0000 | 0001 | 1111 | 1111 |
RO-R1->R0 | 011001001 | 001 | 001 | 0000 | 0001 | 0101 | 0101 |
R1-R0->R1 | 011001001 | 001 | 001 | 0001 | 0000 | 0f0f | 0f0f |
R0∨R1->R1 | 011011001 | 001 | 000 | 0001 | 0000 | 0f0f | 0f0f |
R0∧R1->R0 | 011100001 | 001 | 000 | 0000 | 0001 | 0101 | 0101 |
R0⊕R1->R0 | 011110001 | 001 | 000 | 0000 | 0001 | 0e0e | 0e0e |
R0R1->R0 | 011111001 | 001 | 000 | 0000 | 0001 | fefe | fefe |
R0逻辑左移 | 111000011 | 001 | 100 | 0000 | 不用 | fefe | fdfc |
R0逻辑右移 | 101000011 | 001 | 100 | 0000 | 不用 | fdfc | 7efe |
注:1、按顺序执行。每一个运算按压一次START 键。
2、由于仿真软件与真机实验箱略有不同,给出了部分SST和SCI的控制信号。
3、D1*和D2*为Data输入值,分别为0x0101和0x1010。
实验结果分析
(从上面表格第5行开始选择任意3个操作运算进行控制信号取值和运算结果值的分析):
1、
R0∨R1->R1 | 011011001 | 001 | 000 | 0001 | 0000 | 0f0f | 0f0f |
此指令要完成R0并R1的值送给R1。
B口对应R0,且地址为0001;A口对应R1,且地址为0000.
数据来源为A和B,I2-I0为:001;运算是∨,I5-I3为:011;最后的值存储在A口对应的地址并输出,所以I8-I6所选值为011;该式接受ALU的标志位输出的值,所以
SST所选值为001;该式执行逻辑运算,所以SSH SCI所选值为000.
因为R0=0101,R1=0f0f,所以按START后输出0f0f
2、
R0∧R1->R0 | 011100001 | 001 | 000 | 0000 | 0001 | 0101 | 0101 |
此指令要完成R0交R1的值送给R0。
B口对应R0,且地址为0001;A口对应R1,且地址为0000.
数据来源为A和B,I2-I0为:001;运算是∧,I5-I3为:100;最后的值存储在B口对应的地址并输出,所以I8-I6所选值为011;该式接受ALU的标志位输出的值,所以
SST所选值为001;该式执行逻辑运算,所以SSH SCI所选值为000.
因为R0=0101,R1=0f0f,所以按START后输出0101
3、
R0 | 011111001 | 001 | 000 | 0000 | 0001 | fefe | fefe |
此指令要完成R0同或R1的值送给R0。
B口对应R0,且地址为0001;A口对应R1,且地址为0000.
数据来源为A和B,I2-I0为:001;运算是,I5-I3为:111;最后的值存储在B口对应的地址并输出,所以I8-I6所选值为011;该式接受ALU的标志位输出的值,所以
SST所选值为001;该式执行逻辑运算,所以SSH SCI所选值为000.
因为R0=0101,R1=0f0f,所以按START后输出fefe
用模拟仿真软件进行运算器实验(2)
按下表所列的操作在“脱机运算器32”或“脱机运算器64”仿真软件上进行运算器实验,将结果填入表中:
执行操作 | I8 I7 I6 | I5 I4 I3 | I2 I1 I0 | S S T | SSH SCI | B口 | A口 | 按START后 | |
ALU | 目的寄存器值 | ||||||||
BBBB→R1 | 011 | 000 | 111 | 001 | 000 | 0001 | 不用 | BBBB | BBBB |
0001→R2 | 011 | 000 | 111 | 001 | 000 | 0010 | 不用 | 0001 | 0001 |
R1-R2→R1 | 011 | 001 | 001 | 001 | 001 | 0001 | 0010 | BBBA | BBBA |
0001→R3 | 011 | 000 | 111 | 001 | 000 | 0011 | 不用 | 0001 | 0001 |
R3+1→R3 | 011 | 000 | 011 | 001 | 001 | 0011 | 不用 | 0002 | 0002 |
1234→R5 | 011 | 000 | 111 | 001 | 000 | 0101 | 不用 | 1234 | 1234 |
R5→Y R5+1→R5 | 010 | 000 | 100 | 001 | 001 | 0101 | 0101 | 1235 | 1235 |
AAAA→R7 | 011 | 000 | 111 | 001 | 000 | 0101 | 不用 | aaaa | aaaa |
9999→R8 | 011 | 000 | 111 | 001 | 000 | 1000 | 不用 | 9999 | 9999 |
R7-R8→R8 | 011 | 010 | 001 | 001 | 001 | 1000 | 0101 | 1111 | 1111 |
R8逻辑左移 | 111 | 000 | 011 | 001 | 100 | 1000 | 不用 | 2222 | 2222 |
思考题:
- 分析R1-R2→R1和 R7-R8→R8的结果,并说明操作控制的区别。
R1-R2→R1和 R7-R8→R8目的操作数和源操作数不同,前者是将操作的结果输入给被减数,而后者是将结果输入给减数,选择减法结果存储的位置,实现这一操作需要修改I5-I3,前者为001,后者为010。
- 说明R3+1→R3与R5→Y同时 R5+1→R5操作控制的区别。
两者在脱机运算器中运算结果没有差别。但是在实际的AM2901芯片中,后者在start键按下之前就已有输出,即R5→Y操作实际是产生了从目的寄存器到ALU再到输出端口Y的通路,这时显示的是目的寄存器改变之前的值。