【发布时间】:2013-02-23 02:28:22
【问题描述】:
我意识到 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 获得溢出?你能给我举个很好的例子吗...我需要使用其他指令来填充高位吗?
谢谢
【问题讨论】:
标签: assembly mips inline-assembly bluespec