5.2定点加法,减法运算

在这里插入图片描述
在这里插入图片描述
模就是能表示的最大数字。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1)将 1 10101 转换为补码,1 01011,
1 01011 + 0 11011 = 0 00110 化为十进制:6
2)将1 10110 转换为补码,1 01010,将1 00001 转换为补码,1 11111
1 01010 + 1 11111 = 1 01001 转换为源码1 10111化为十进制:-23

减法运算
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.2.1溢出判断
在这里插入图片描述
在这里插入图片描述
这种情况叫做溢出
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
优点是直观简单,缺点是符号位需要多占一位。数据表示的范围就会变小。
单符号位法可以有效解决这个问题。
在这里插入图片描述
在这里插入图片描述
cs和cf的值相等就是正常,不相等就是溢出。

5.2.2行波进位加减器
行波进位加减器的组成
在这里插入图片描述
左边的是一位全加器,右边的是n位加法器,n位数与n位数相加。
在这里插入图片描述
在这里插入图片描述
OF溢出标志位是Cn-1与Cout做异或,也就是数值的进位和符号位做异或。
ZF零标志位就是如果每一位的输出全是0,那么最后ZF就是1。
SF符号标志位就是符号运算的结果。
CF进借位标志位
将加法器改进一下就可以进行减法运算。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Mux是多路选择器,当控制信号sub是0,将B送入,当控制信号sub为1,将B非送入。
在做减法时,需要-y的补码,通过公式,-y的补码就是y的补码连同符号位取反再加1,也就是y的非,在图上就是B非,加1传给进位标志位Cin。
Adder是加减器。
有符号整数加减法运算
在这里插入图片描述
将上面的C语言代码转换成汇编程序。SUB做减法运算。0x5是x,0x全f是-1.
将x和y变成补码是由编译器完成的。
sub指令最终是由加法实现的。由行波进位加减器实现。
sub指令被取入CPU之后,经过译码翻译出控制信号,这些控制信号会把两个操作数x送入A端,y送入B端。在sub端发出高电平信号,y最终是多少是由两路选择器的sel端来决定的。
由于sub为1,B‘端输出-1包括符号位取反,32个0,sub将1送入Cin,加减器实际上做的是三个数的加法,A,B’,1。
在这里插入图片描述
溢出标志位OF:数值最高位无进位,符号最高位无进位,最后为0.
ZF零标志位,0 1 1 0四个数或非运算是0.
SF符号标志位就是符号运算最终结果0.
cf是Cout和Cin,Cin也就是sub,Cout是0,sub是1,最后是1。
在这里插入图片描述
最后输出的十进制 6是编译器转换后的结果,与行波无关。具体溢出不溢出也不是行波判断,它只是输出标志位,具体由编译器决定。
在这里插入图片描述
有符号数使用的只是前三个标志位不使用CF。CF是无符号运算使用的。

无符号整数加减法运算
在这里插入图片描述
无符号数不使用源码,补码,只使用一个二进制数表示。
具体转换也是编译器完成。
在这里插入图片描述
假如C语言代码中由这样一条语句,要以无符号形式输出z,
在这里插入图片描述
编译器将每一位权值加起来转换成十进制,最后结果显示溢出,但是OF位是0.
无符号的特殊点是看是否溢出是由CF决定的。
无符号数的运算最后不看OF位,而是看CF位。
SF,OF没用。
四个标志位都会产生,但是编译器有选择地使用。
在这里插入图片描述
无符号的0-1得到的是32个1转换成十进制非常大,result += a[i] 最终会发生数组越界错误。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值