【发布时间】:2015-10-20 13:16:06
【问题描述】:
我最近用MARS4.5练习写MIPS的汇编语言,但是遇到了一些问题。
第一个代码是:
addi $s0,$s0,8 #s0 = 0x00000008
sll $s0,$s0,28 #s0 = 0x80000000
addi $s1,$s1,13#s1 = 0x0000000D
sll,$s1,$s1,28 #s1 = 0xD0000000
add $t0,$s0,$s1 #t0 =0xD0000000 + 0x80000000
我会得到算术错误
第二个代码是:
addi $s0,$s0,-1 #s0 = 0xffffffff
addi $s1,$s1,2 #s1 = 0x00000002
add $t0,$s0,$s1 #t0 =0xffffffff + 0x00000002
我会得到结果 0x00000001
两个代码都会遇到溢出,为什么第二个代码没有报错?
对了,我也想问一下“sub”是怎么工作的? 是否会先将RT(subtrahend)转化为补码形式,再与RS(minuend)相加?
谢谢!!
【问题讨论】: