gpt4 book ai didi

assembly - 为什么 MIPS 指令 "add"有时会给我一个算术错误,但并非总是如此?

转载 作者:行者123 更新时间:2023-12-05 05:24:49 25 4
gpt4 key购买 nike

最近用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)相加?

谢谢!!

最佳答案

将不同符号的数字相加永远不会出现符号溢出。你那里有 -1 + 2,有什么问题?

它会无符号溢出,从最高位进位,但这与 add 无关。

By the way, I also want to ask how "sub" works? Does it will first transform RT(subtrahend) into the form of two's complement and add it with RS(minuend)?

这是一种方法,但可能不是物理实现。它更有可能被实现为 a - b = ~(~a + b)a - b = a + ~b + 1,第二个显然直接等同于求反然后加法,但实现只是一个可以带进位的加法器,而不是两个单独的加法器。

关于assembly - 为什么 MIPS 指令 "add"有时会给我一个算术错误,但并非总是如此?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33237702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com