计算机组成与体系结构第一次试验:运算器实验

前言

为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正!

一、实验目的

  1. 掌握使用算术逻辑运算器 74LS181 进行算术运算、 逻辑运算的方法。
  2. 掌握基于“累加-移位”原理的串行乘法运算方法。

二、实验环境

操作系统:Win10
实验用软件:Proteus 8

三、实验内容

  1. 在输入单元(拨码开关) 通过三态门 74LS244 向运算器的总线 BUS 输入参与运算的数据, 并在输出单元(数码管) 显示总线 BUS 的内容;
  2. 把参与运算的数据AA打入缓存器 DRA 并送入ALU的A输入端,将55打入缓存器 DRB并送入ALU的B输入端;
  3. 参照表 1 所示的 74LS181 真值表,置 ALU 的控制信号组合(S3, S2, S1, S0, M,CN)进行算术运算和逻辑运算。再令 SW_BUS=1, ALU_OE=0, 观察并且记录运算器 ALU 的输出端 F 和标志位 CF、 SF、 ZF的值。
  4. 利用“累加-移位”原理,计算二进制数 10101011 和 11010101相乘的结果,并验证是否和手工计算结果一致。

四、实验步骤

一.在输入端(DIPSWC_8)向总线BUS[0…7]输入数据,并在输出端(7SEG-BCD-GRN)输出总线BUS[0…7]的内容
首先将ALU_BUS和ALU_EN拉倒高阻态,防止和SW_BUS上面的数据出现冲突。开始仿真后将SW_BUS拉到低组态,然后通过输入端输入10101010,即0xAA;
在这里插入图片描述
通过拨动DRA_CLK时钟信号将信号保存至寄存器中。
在这里插入图片描述
同理,输入01010101,即0x55,并拨动DRB_CLK时钟信号,将信号保存至寄存器中
在这里插入图片描述
在这里插入图片描述
输入结束后将SW_BUS拉高,ALU_CN拉低,ALU_BUS拉低。
在这里插入图片描述
将功能控制端S3-S0置位0001,M置零,刷新ALU_OE实现A+B,即0xFF,SF灯亮起
通过ALU_CN对结果进位实现A+B+1,刷新屏幕后得到0x00。
在这里插入图片描述
二.
1) 启动运算,首先判断寄存器 Q 的最低位 Qn:
若 Qn=1,说明需要累加,把部分积 A 与被乘数 B 相加,得到新的部分积;若 Qn=0,说
明不需要累加。
2)令加法进位 CF、寄存器 A(保存新的部分积)和寄存器 Q 联合右移一位。
3)计数器自减 1,然后启动下一次运算(返回到第 1)步)。
上述运算循环执行,直到计数器的值减到0,即总共执行了n次循环。此时,乘数Q已经完全右移出寄存器Q,保存在寄存器A和Q中的是2n位乘法结果|P|(绝对值)的高 n 位和低n位。乘积 Pf的符号位则单独处理,由被乘数和乘数的符号位A和B逻辑“异或”得到。
如图3所示,运算器ALU通路中的8位缓存器DRA和DRB就相当于图5中的寄存器A和Q:缓存器 DRA 的 SL=ALU_C,其最低位连接 DRB 的 SL 端,连成一个 16 位移位寄存器。 因为缓存器 DRA 和 DRB 都是由移位寄存器 74LS194 构成,若两个移位寄存器 74LS194 的控 制端信号 S0=0 且 S1=1,则当时钟信号 DRx_CLK 上升沿跳变时,74LS194 全部执行移位操作 Q0Q1Q2Q3=Q1Q2Q3SL。
此时,ALU_C 移入 DRA 最高位,DRA 所有位依次右移,最低位移入 DRB 的最高位,DRB 所有位亦依次右移,即“DRA→DRB”操作。该操作相当于图 5 中的“寄存器 A 和 Q 联合 右移一位”操作。
因为运算器 ALU 通路中只有两个缓存器 DRA 和 DRB,所以,缓存器 DRB 必须同时承 担图 5 中寄存器 B 和 Q 的作用;而且,在串行乘法的运算过程中,需要借助寄存器 REG_0 和 REG_1 作为临时寄存器,在不同运算切换之际用以保存缓存器 DRB 的数据。
在运算器 ALU 通路中,串行乘法的运算过程如下所述。
初始状态:被乘数|X|打入寄存器 REG_0,“0”打入寄存器 REG_1;
乘数|Y|打入缓存器 DRB,而缓存器 DRA 无需初始化(因为第 1)步就赋值“1”)。
1)ALU执行“F=1”,结果“0”打人 DRA;又执行“F=A+1”,结果“1”再打入 DRA。
2)ALU执行“F=A·B”(逻辑与),观察运算结果零标志位ZF(即判断最低位Qn是否为0):
3)若 ZF=0(即 Qn=0),则 REG_1 的值打入 DRA,跳转到第 5)步;若 ZF=1(Qn=1),则 ALU 执行“F=B”,把 DRB 保存的值打入 REG_1。
4)把 REG_0 的值(“被乘数”)打入 DRB,REG_1 的值打入 DRA,ALU 执行“F=A 加 B”
(算术和),运算结果打人 DRA,再把 REG_1 的值打回 DRB。
5)ALU 执行“DRA→DRB”移位(注意 DRA_CLK 和 DRB_CLK 操作的先后顺序)。
6)若乘数所有位都移出 DRB,则运算结束(16 位乘积的高 8 位在 DRA,低 8 位在 DRB);否则,ALU 执行“F=A”,把 DRA 保存的部分积打入 REC_1,返回第 1)步。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最终结果如下:
在这里插入图片描述

五、实验结果

须用表格列出74LS181中各控制信号(S3, S2, S1, S0, M,CN)为不同值时,ALU 的输出端 F 和标志位 CF、 SF、 ZF的值。
在这里插入图片描述

S3 S2 S1 S0M=0 CN=1M=0 CN=0M=1
0000AA 100A6 10055 000
0001FF 10000 01100 010
0010AA 100A6 10055 000
0011FF 10000 01100 010
010054 00155 001FF 101
0101A9 101AA 101AA 101
011054 00155 001FF 101
0111A9 101AA 101AA 101
1000AA 100A6 10055 000
1001FF 10000 01100 010
1010AA 100A6 10055 000
1011FF 10000 01100 010
110054 00155 001FF 101
1101A9 101AA 101AA 101
111054 00155 001FF 101
1111A9 101AA 101AA 101

六、实验总结

  1. 运算器 74LS181 可以执行无符号数的加法和减法运算么?对于有符号数的算术运算, 运算器 74LS181 是补码运算器还是原码运算器?
    答:74LS181组成的运算器运算可以区分有符号数运算和无符号数运算;
    对于有符号数的算数运算,74LS181是补码运算器。
  2. 参与串行乘法运算的两个数据是无符号数还是有符号数?若有符号位,怎么处理?
    答:参与串行乘法运算的两个数据是无符号数;
    若有符号位,则需先对符号位进行运算,搭配两数绝对值的乘积,进而给出结果。

心得体会:
进行本次实验操作时,实验器件多,连线复杂,多次出现了漏连线、漏标线等情况,而且,哪怕连线完成、实验图做好后,依然不了解这个图的用途及原理。之后,本人通过查阅资料、同学讨论、观看学习视频等等方式,对本次实验有了大概的理解,同时,本次实验步骤复杂,稍不留意就容易前功尽弃,需要我们在做实验时谨慎再谨慎。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knight_V_Schumacher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值