2.2 定点数运算方法和运算电路

基本逻辑运算:

运算优先级:与>或

符号表示

表达式

门电路

备注

&&

都为真才为真

||

都为假才为假

!

真为假、假为真

与非

先与后非

或非

先或后非

异或

相同为0,不同为1

2.2.1 基本运算部件

各部件在不同算术运算中存放的数字:

ACC

被加数、和

被减数、差

乘积高位

被除数、余数

MQ

乘数、乘积低位

X

加数

减数

被乘数

除数

1. 带标志加法器

OF(溢出标志)=Cn⊕Cn-1 (只在有符号加减运算才有意义)

Cn:符号位进位

Cn-1:数值位最高位进位

SF(符号标志:和的符号)=Fn-1(只在有符号加减运算才有意义)

ZF(零标志):ZF=1(当且仅当F=0)

CF(进位/借位标志)=Cout⊕Cint(Sub)(只对无符号数加减法有意义)

CF为1时说明无符号加减法发生了进位或借位,发生溢出

2. 算术逻辑单元

核心:带标志加法器

ALU:组合逻辑电路、基本部件并行加法器

2.2.2 定点数的移位运算

两者不同:右移时不同、溢出判定不同

相同:左移低位都补0

1. 逻辑移位(无符号移位)

左移:高位移出、低位补0(高位有1则发生溢出)

右移:低位移出、高位补0

2. 算术移位(有符号补码移位、符号位)

左移:高位移出、低位补0(左移前后符号位不同则溢出)

右移:低位移出、高位补符号位(低位有1移出则丢失精度)

2.2.3 定点数的加减运算(字长:n+1)

1. 补码的加减法运算

特点:

  1. 逢二进一
  2. 加法则补码相见,减法则加上减数补码
  3. 符号位与数值位一起参与运算
  4. 运算结果高位丢弃(保留n+1位)

2. 溢出判别方法

三种溢出判别方法均需要溢出判别电路(使用异或门实现)

只有同号的数相加、异号的数相减才能溢出

上溢:正数+正数

下溢:负数+负数

  1. 采用一位符号位(模2补码)

加数和被加数符号相同与结果的符号不同则溢出

设A的符号As,B的符号位Bs,运算结果的符号位为Ss,

溢出逻辑表达式:

V=0:无溢出;V=1:溢出

  1. 采用双符号位(模4补码)

运算结果两个符号位:Ss1Ss2

    1. Ss1Ss2=00:结果为正数,无溢出
    2. Ss1Ss2=01:结果为正溢出(上溢)
    3. Ss1Ss2=10:结果为负溢出(下溢)
    4. Ss1Ss2=11:结果为负数,无溢出

溢出逻辑表达式:

V=0:无溢出,V=1:溢出

  1. 采用一位符号位根据数值位的进位情况判断溢出

符号位(最高位)的进位Cn与最高数位(次高位)的进位Cn-1相同,无溢出,否则溢出

溢出逻辑表达式:

V=0:无溢出;V=1,Cn=0,Cs=1:上溢;V=1,Cn=1,Cs=0:下溢

3. 加减运算电路

运算器本身无法识别二进制串是有符号还是无符号数

2.2.4 定点数的乘除运算(字长:n+1)

乘法

除法

原码

(求x*y)

定点一位乘法

乘数被乘数都取绝对值,符号位单独处理,最后符号由两数符号位异或决定

恢复余数法

(一位符号位)商尝试上1,被除数x+[-|y|]补:

结果<0,商为0,+[|y|]补后左移移;

结果>0,商1,左移

加减交替法

(一位符号位)商尝试上1,被除数x+[-|y|]补:

结果<0,商0,左移+[|y|]补;

结果>0,商1,左移+[-|y|]补

补码

求([x*y]补)

定点一位乘法

经典

乘数是补码。

最低位为1,+[x]补后右移;

为0,+0后右移;

若y为负数+[-x]修正

(两位符号位)+[y]补:

结果和y同号,商1,左移+[-y]补;

结果和y异号,商0,左移+[y]补

布斯

乘数是补码+辅助位0。

最低位-次低位为1,+[x]补后右移;

为-1,+[-x]补右移;

为0,+0右移

1. 定点数乘法

1.1. 定点一位乘法

1.1.1. 原码定点一位乘法:

乘数被乘数都取绝对值,符号位单独处理,最后符号由两数符号位异或决定

eg:x=-0.1101,y=0.1011,求x*y:

1.1.2. 补码定点一位乘法:

经典:乘数是补码

最低位为1,+[x]补后右移;为0,+0后右移;若y为负数+[-x]补修正(YnX+Yn-1X+...+Y0X)

布斯:乘数是补码+辅助位0

最低位-次低位为1,+[x]补后右移;为-1,+[-x]补右移;为0,+0右移

eg:x=-0.1101,y=0.1011,求x*y:

2. 定点数除法

2.1. 恢复余数法

商尝试上1,+[-|y|]补:结果<0,商为0,+[|y|]补(将减去的数补回)后左移移;结果>0,商1,左移

流程图:

eg:x=0.1011,y=0.1101,求x/y:

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

对恢复余数法的优化

2.2.1. 原码加减交替法

商尝试上1,被除数x+[-|y|]补:结果<0,商0,左移+[|y|]补;结果>0,商1,左移+[-|y|]补

eg:x=0.1011,y=0.1101,求x/y:

2.2.2. 补码加减交替法

+[y]补,结果和y同号,商1,左移+[-y]补;异号,商0,左移+[y]补

补充

阵列乘法器:阵列每一行输入乘数的每一位,无需循环乘以乘数的每一位

C语言中:

定点整数采用补码进行存储

符号和无符号数同时参与运算时统一按无符号数进行计算

参考文献:

        2025计算机组成原理考研复习指(王道论坛)

        计算机组成与结构(王爱英)

  • 30
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值