我意识到addi指令会导致溢出异常。我目前正在使用Bluespec来模拟导致异常的处理器,并对它们进行适当的处理。
无论如何,我正在编写一些测试用例来触发溢出异常,特别是使用MIPS的addi命令。
Note:我正在测试的处理器是基于SMIPS的,但是我支持一些MIPS指令,比如异常和中断。
我知道我检测溢出的逻辑是正确的(下面是伪代码):
if (function == Addi) begin
if(( a < 0 && b < 0 && result >= 0) || (a >0 && b > 0 && result < 0))
return True;
else
return False;
end问题:溢出的示例可以是什么:我正在尝试以下内容:(使用__asm__的内联程序集)
addi $2, $0, 0x7fff
addi $3, $2, 0x000f这不是抛出一个例外。如果我尝试这个:
addi $2, $0, 0x7fffffff
addi $3, $2, 0x0000000f我得到一个汇编程序错误,因为即时必须是16位。我怎么才能从安迪那里得到溢流呢?你能给我举个好例子吗。我是否需要使用其他指令来填充高阶位呢?
谢谢
发布于 2013-03-07 18:36:15
您的第一个序列不会导致溢出异常,因为寄存器是32位。32767 + 15 = 32782,在32位以内。
您不能在MIPS中的单个指令中加载大的即时性。首先使用LUI指令加载前16位,然后在下16位中添加(或ORI或XORI)。
您还可以使用LW从内存中获取32位值。
https://stackoverflow.com/questions/15278842
复制相似问题