定点运算

定点加减法

补码加减法规则

  • 补码加法:符号位作为数的一部分参与运算

  • 补码减法:减一个数等于加这个数的补码

溢出与检测

溢出概念

  • 正溢 - 运算结果为正且超过机器表示范围

  • 负溢 - 运算结果为负且超过机器表示范围

  • 上溢 - 结果的绝对值超过机器所能表示的最大绝对值(overflow)

  • 下溢 - 结果的绝对值超过机器所能表示的最小绝对值(underflow)

溢出检测

  • 双符号位法,即变形补码法或模4补码

变形补码:前两位为符号位,即00表示正数,11表示负数,两个符号位都参与运算,超过两个符号位的进位丢弃

溢出检测规则:如果结果的双符号位出现了01(OF-上)或10(UF-下)则溢出。最高符号位永远表示结果的正确符号

溢出举例:

可以看到溢出的直观表现为“两个正数相加得到了负数”,类似也有“两个负数相加得到正数”

  • 单符号位法

从双符号位法可以看出,溢出的条件为“最高有效位与符号位只有一个进位”,由此得到单符号位溢出判别法:如果最高有效位和符号位只有一个进位则判别为溢出

举例:

加法器

一位全加器FA

N位加法器

  • n位加法器包含

  • n个全加器 将n个一位全加器串联

  • 低位进位输出连接到高位进位输入

一位全加器真值表

Ai和Bi为两个输入,Ci为前一位运算传来的进位,C(i+1)为此次运算生成的进位,Si为运算结果

先行加法器:直接用逻辑运算取代加法运算来获得进位(并行进位)

并行进位举例:某加法器进位链小组信号为C4C3C2C1,低位来的进位信号为C0,写出串行进位和并行进位下C4C3C2C1的表达式

先行进位芯片 CLA74182:

四位运算器芯片 SN74181

定点乘法

无符号阵列乘法

即把符号先单独拿出来,把两个数作为正数相乘,再把符号位加上

符号的计算只需要把两个数的符号做异或即可。下面只讨论两个正数相乘

部分积:1位乘法计算出来的积

部分积举例:A = 11011, B = 10101,计算A*B

aibj表示A中第i位乘B中第j位得到的部分积,则得到如下部分积矩阵

按照乘法的原则,应该对这些部分积做如下操作来得到结果

阵列乘法器:

补码一位乘法流程与硬件逻辑

定点除法

恢复余数法

需要进行恢复余数的操作:

  • 余数是负数,必须恢复余数

  • 绝对值运算,余数不可能是负数

恢复余数的操作次数不确定:

  • 运算时间不固定

  • 最慢除法(每次都不够除),拖慢除法速度

实际应用通常采用不恢复余数除法

加减交替法(不恢复余数法)

利用了2进制数的特性

  • 已知被除数Ci和除数B

  • 计算Ci-B得到结果C(i+1)

  • 如果C(i+1)为负(即第一位为1)则此位结果为0,下一次操作改为加法。C(i+1)左移一位

  • 如果C(i+1)为正(即第一位为0)则此位结果为1,下一次操作仍为减法。C(i+1)左移一位

可控制加/减法(CAS)单元

原码阵列除法器

Last updated

Was this helpful?