首页 理论教育 优化算术逻辑运算单元的实现方式

优化算术逻辑运算单元的实现方式

时间:2023-06-20 理论教育 版权反馈
【摘要】:算术逻辑运算单元可以实现加/减法运算、逻辑运算等大部分算术和逻辑功能,且大多数的算术逻辑运算指令都是单周期指令。ALU的输出为40位,被送往累加器A或B。3.进位位ALU的进位位受大多数ALU指令影响,可以用来支持扩展精度的算术运算。4.双16位算术运算用户只要置位状态寄存器ST1的双16位/双精度算术运算方式控制位C16,就可以让ALU在单个周期内进行特殊的双16位算术运算,即进行两次16位加法或两次16位减法运算。

优化算术逻辑运算单元的实现方式

算术逻辑运算单元(ALU)可以实现加/减法运算、逻辑运算等大部分算术和逻辑功能,且大多数的算术逻辑运算指令都是单周期指令。除存储操作指令(ADDM、ANDM、ORM和XORM)外,ALU的运算结果通常都被传送到目的累加器(累加器A和B)。40位ALU功能框图如图3-3所示。

1.ALU的输入和输出

如图3-3所示,ALU有X和Y两个输入端,其中,ALU的X输入端有以下两种数据来源,即:

978-7-111-35536-6-Chapter03-6.jpg

图3-3 40位ALU功能框图

1)来自移位寄存器的输出(32位或16位数据存储器操作数及累加器中的数值,经移位寄存器移位后输出)。

2)来自数据总线DB的数据存储器操作数。

ALU的Y输入端有以下4种数据来源,即:

1)来自累加器A中的数据。

2)来自累加器B中的数据。

3)来自数据总线CB的数据存储器操作数。

4)来自暂存器T的值。

当一个16位数据存储器操作数通过数据总线DB或CB加到40位ALU的输入端时,40位ALU将按如下两种方式之一对操作数进行预处理:

1)若数据存储器的16位操作数在低16位时,则当状态寄存器ST1中的符号扩展方式控制位SXM=0时,高24位(39~16位)用0填充;当SXM=1时,高24位(39~16位)进行符号位扩展。

2)若数据存储器的16位操作数在高16位时,则当SXM=0时,39~32位和15~0位用0填充;当SXM=1时,39~32位进行符号位扩展,15~0位置0。

ALU的输出为40位,被送往累加器A或B。

2.溢出处理

ALU的饱和逻辑通过将结果保持为一个最大值(或最小值)来防止溢出。这个特性对降低运算误差很有用。当状态寄存器ST1的溢出方式控制位OVM=1时,ALU的饱和逻辑功能就被使能。

当一个运算结果出现溢出时,将按如下方式进行处理:(www.xing528.com)

1)如果OVM=0,则将ALU的结果不作任何调整,直接装入累加器中。

2)如果OVM=1,则根据溢出方向,对ALU的结果进行调整。当正向溢出时,将32位最大正数007FFFFFFFh装入累加器;当负向溢出时,将32位最小负数FF80000000h装入累加器。

3)溢出发生后,相应的溢出标志位(OVA或OVB)置1,直到复位或执行溢出条件指令。

注意:用户可以用SAT指令对累加器进行饱和处理,而不必考虑OVM值。

3.进位位(C)

ALU的进位位(C)受大多数ALU指令(包括循环和移位操作)影响,可以用来支持扩展精度的算术运算。进位位不受累加器加载指令、逻辑操作指令、非算术运算和控制类指令的影响,利用两个条件操作数C和NC,可以根据进位位的状态,进行分支转移、调用、返回和条件执行操作。可通过RSBX和SSBX指令对进位位进行置位和复位。在硬件复位时,进位位被置1。

4.双16位算术运算

用户只要置位状态寄存器ST1的双16位/双精度算术运算方式控制位C16,就可以让ALU在单个周期内进行特殊的双16位算术运算,即进行两次16位加法或两次16位减法运算。该模式对于维持加减/比较/选择操作特别有用。

5.其他控制位

除SXM、OVM、C、C16、OVA、OVB外,ALU还有两个控制位。TC为测试/控制标志,位于ST0的12位;ZA/ZB是累加器结果为0标志位。

例3-1】 设(AR2)=0060h,(AR3)=0070h,数据存储器(0060h)=A678h,(0070h)=7234h,分析指令“ADD*AR2,*AR3,A”的执行情况:

(1)在执行指令时ALU中输入端X和Y的情况。

(2)各控制位的变化对执行结果的影响。

(3)指令执行后的结果及标志位的状态。

978-7-111-35536-6-Chapter03-7.jpg

表3-3 ALU的加法操作举例

978-7-111-35536-6-Chapter03-8.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈