首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跳变序列的实现

跳变序列的实现
EN

Stack Overflow用户
提问于 2014-10-21 15:11:19
回答 1查看 86关注 0票数 1

我试图用C语言实现对管道模拟器的跳转指令。我一直在阅读mips的J指令,并看到它由26位imm和6位操作码构成。经过进一步阅读,我发现可以使用以下方法计算跳转指令的地址

代码语言:javascript
运行
复制
PC <- PC31-28::IR25-0::00

不过,我不完全确定如何在C语言中实现这一点。在计算前阶段时,我一直在尝试下面的代码,但它对我不起作用。

代码语言:javascript
运行
复制
if(idStage.instruction.type == J)
{
  ifStage.pc = ifStage << idStage.instruction.imm;
  ifStage.pc = IfStage << 2;
}

如何在C语言中实现PC <- PC31-28::IR25-0:00?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-21 15:23:06

它会是

代码语言:javascript
运行
复制
  ifStage.pc = (ifStage.pc & 0xF0000000) | (idStage.instruction.imm << 2);

也就是说:使用当前的PC,应用一个和掩码保持位28..31,然后应用一个或掩码与立即移位器的2个位置。这假设idStage.instruction.imm是一个26位直接。如果它可以将“垃圾”保存在高阶位(26..31)中,那么您将应用另一种方法并屏蔽:

代码语言:javascript
运行
复制
  ifStage.pc = (ifStage.pc & 0xF000) | ((idStage.instruction.imm & 0x3FFFFFF) << 2);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26490112

复制
相关文章

相似问题

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