首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MIPS "addi“指令中的溢出-示例

MIPS "addi“指令中的溢出-示例
EN

Stack Overflow用户
提问于 2013-03-07 18:22:22
回答 1查看 2.8K关注 0票数 0

我意识到addi指令会导致溢出异常。我目前正在使用Bluespec来模拟导致异常的处理器,并对它们进行适当的处理。

无论如何,我正在编写一些测试用例来触发溢出异常,特别是使用MIPS的addi命令。

Note:我正在测试的处理器是基于SMIPS的,但是我支持一些MIPS指令,比如异常和中断。

我知道我检测溢出的逻辑是正确的(下面是伪代码):

代码语言:javascript
复制
if (function == Addi) begin
  if(( a < 0 && b < 0 && result >= 0) || (a >0 && b > 0 && result < 0))
    return True;
  else 
   return False;
end

问题:溢出的示例可以是什么:我正在尝试以下内容:(使用__asm__的内联程序集)

代码语言:javascript
复制
 addi $2, $0, 0x7fff
 addi $3, $2, 0x000f

这不是抛出一个例外。如果我尝试这个:

代码语言:javascript
复制
 addi $2, $0, 0x7fffffff
 addi $3, $2, 0x0000000f

我得到一个汇编程序错误,因为即时必须是16位。我怎么才能从安迪那里得到溢流呢?你能给我举个好例子吗。我是否需要使用其他指令来填充高阶位呢?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-07 18:36:15

您的第一个序列不会导致溢出异常,因为寄存器是32位。32767 + 15 = 32782,在32位以内。

您不能在MIPS中的单个指令中加载大的即时性。首先使用LUI指令加载前16位,然后在下16位中添加(或ORI或XORI)。

您还可以使用LW从内存中获取32位值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15278842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档