MIPS寄存器值溢出问题

文章通过具体的数值示例解释了在计算机中如何判断加法和减法运算是否产生溢出。正数相加不会溢出,而特定情况下正数与正数相减或相加可能溢出。关键在于最高有效位的进位和符号位是否一致。例如,0111+1111(无溢出)和1000+1000(溢出)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1.$s0=0x7000 0000    $s1=0x0fff ffff

2.$s0=0x4000 0000     $s1=0x4000 0000

那么,add $t0,$s0,$s1-->对于1无溢出,对于2溢出

           sub $t0,$s0,$s1-->对于1无溢出

解释:

以0001-0001为例:{

1)存储的值均看成最高位0为符号位,表示4个正数;

2)正数-正数=正数+正数补码;//这一步当然是人工判断,如果是正数-负数,肯定是不能把负数搞成反码的,0001-0001=0001+1111=0000正确

正数补码就是全部取反加一,不用管符号位是0,什么“符号位不要变“之类的;//此处可以查看计算机判断溢出的原理? - 知乎

        文章中,

[最大正] + [最小负]   0 1      1 0          N             N            N

这一栏,实际上里面的最小负1000 0000就是对0111 1111取补码的结果 ,文章指出,凡是发生溢出操作,“最高有效位进位”和“符号位进位”必然是一个是Y另一个是N,凡是不发生溢出的操作,必然是两个全Y或者两个全N,

3)对于1减法运算,也就是7000 0000+f000 0001看高4位:0111+1111,发现,绿色部分都有进位,没有溢出;

4)对于2加法运算,看高4位,1000+1000,绿色部分一个有进位,一个没有,故溢出,判断完毕!

}

总结:

 

举例子,找规律是有效的学习方法!!!!!!!!!!!!!!!!!!!!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值