我意识到addi指令会导致溢出异常。我目前正在使用 Bluespec HDL 来模拟导致异常的处理器并适当地处理它们。
无论如何,我正在编写一些测试用例来触发溢出异常,特别是使用 MIPS 的 addi 命令。
注意:我正在测试的处理器是基于 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 位。我怎样才能从 andi 获得溢出?你能给我很好的例子吗...我需要使用其他指令来填充高位吗?
谢谢你