首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MIPS32中,"add $t1 $t1 $t1“与"sll $t1 $t1 1”相同吗?

在MIPS32中,"add $t1 $t1 $t1“与"sll $t1 $t1 1”相同吗?
EN

Stack Overflow用户
提问于 2022-02-07 21:21:31
回答 1查看 65关注 0票数 2

我想知道,在MIPS 32中,以下两种情况是否完全相同:

add $t1 $t1 $t1

sll $t1 $t1 1

sll处理可能的溢出是否与add不同?我似乎在网上找不到一个很好的解释。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-02-07 22:07:24

是的,您正确地怀疑:sll永远不会触发溢出异常,而add则会在将数字解释为不适合32位的数字时触发溢出。

正如Jester所说,addu也不会触发溢出,因此更等同于您的sll

大多数指令集都有这样的重复/重叠,因为这需要设计和实现两方面的努力来防止,可以说是投资回报很少或根本没有回报。

我们应该始终使用addu作为指针算法,因为我们不需要有符号的溢出检查。指针是无符号的,而addu代表添加无符号--但是它执行与add相同的算法,只是省略溢出检查。您可能认为它检查无符号溢出,但它不检查,所以称它为addu. 有点奇怪。出于同样的原因,我们也应该使用addiu而不是带有指针的addi --放弃有符号整数溢出检查。堆栈指针的调整应该用addiu来完成。但是您经常会看到人们错误地使用addi

RISC决定完全删除溢出检查,因此如果您想要溢出检查,您必须使用更多的指令;常规指令只是add,并且对有符号或无符号整数都有效(您将添加的检查溢出的附加指令将特定于是否签名)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71025554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档