0
我意识到addi指令会导致溢出异常。我目前使用Bluespec HDL来模拟导致异常并适当处理它们的处理器。MIPS的“addi”指令溢出 - 示例
任何方式,我正在写一些测试用例来触发溢出异常,尤其是使用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中获得溢出?你能给我很好的例子吗?我是否需要使用其他指令来填补高位?
谢谢
我对装配不是很熟悉,请举个例子。谢谢 – 2013-03-07 18:37:08
我不明白你如何使用HDL,模拟处理器,编写实现溢出检测的代码,但你无法理解汇编指令。 – NovaDenizen 2013-03-07 18:40:19
恩。我是测试处理器体系结构项目的一部分。 Bluespec的思维水平非常高,您只需定义规则即可管理处理器而无需了解组件细节。不要问我以前的问题,我明白你的意思。 – 2013-03-07 18:47:24