mips中的算术溢出

mips中的算术溢出,mips,integer-overflow,Mips,Integer Overflow,我刚刚开始学习MIPS指令的异常处理程序 我需要使我的程序有算术溢出异常,以便我可以测试我的异常处理程序 我有两个数组A和B。数组A有十六进制数,数组B有整数 如何通过添加十六进制数和整数来产生溢出 加上哪个十六进制数和整数会导致溢出 根据,唯一能产生溢出异常的加法操作是有符号加法指令: ADD ADDI MIPS整数是32位的,因为您将使用有符号整数,所以最大值为231-1(也称为2147483647或十六进制7fffff)。因此,任何导致数字大于此值的加法都会引发异常,例如,如果您尝试将1

我刚刚开始学习MIPS指令的异常处理程序

我需要使我的程序有算术溢出异常,以便我可以测试我的异常处理程序

我有两个数组A和B。数组A有十六进制数,数组B有整数

如何通过添加十六进制数和整数来产生溢出

加上哪个十六进制数和整数会导致溢出

根据,唯一能产生溢出异常的加法操作是有符号加法指令:

ADD
ADDI
MIPS整数是32位的,因为您将使用有符号整数,所以最大值为231-1(也称为2147483647或十六进制7fffff)。因此,任何导致数字大于此值的加法都会引发异常,例如,如果您尝试将1添加到2147483647:

# Load 2147483647 into $s1
LUI $s0, 32767
ORI $s1, $s0, 65535

# Add 1 to $s1 and store in $s2. This should produce an overflow exception
ADDI $s2, $s1, 1

我不熟悉MIPS,但十六进制只是一个数字的表示,而不是一个数据类型,所以您肯定只是在添加两个整数。如果您的整数是32位,那么任何两个加起来超过
2^32-1
(即
4294967295
)的数字都会产生溢出。谢谢Simon,我已经试过了。我试过这样0x1+4294967295。但我仍然没有得到溢出错误。我得到的答案是0x0。您使用的是
add
还是
addi
?据我所知,我用了“添加”。我应该得到溢出对吗?哇!!!它起作用了。我得到了溢出异常错误。看起来我是唯一一个很高兴得到这个错误的人。哈哈,非常感谢西蒙。你帮了大忙最大值(2^31)-1是什么?使用32位整数,无符号数的范围是从0到(2^32)-1!非常好的一点@RoronoaZoro-我不确定我为什么写“unsigned”-ADD和ADDI是有符号操作(我甚至在答案的顶部提到了这一点)。我已经删除了“联合国”!