我试图用C语言实现对管道模拟器的跳转指令。我一直在阅读mips的J指令,并看到它由26位imm和6位操作码构成。经过进一步阅读,我发现可以使用以下方法计算跳转指令的地址
PC <- PC31-28::IR25-0::00
不过,我不完全确定如何在C语言中实现这一点。在计算前阶段时,我一直在尝试下面的代码,但它对我不起作用。
if(idStage.instruction.type == J)
{
ifStage.pc = ifStage << idStage.instruction.imm;
ifStage.pc = IfStage << 2;
}
如何在C语言中实现PC <- PC31-28::IR25-0:00?
发布于 2014-10-21 15:23:06
它会是
ifStage.pc = (ifStage.pc & 0xF0000000) | (idStage.instruction.imm << 2);
也就是说:使用当前的PC,应用一个和掩码保持位28..31,然后应用一个或掩码与立即移位器的2个位置。这假设idStage.instruction.imm是一个26位直接。如果它可以将“垃圾”保存在高阶位(26..31)中,那么您将应用另一种方法并屏蔽:
ifStage.pc = (ifStage.pc & 0xF000) | ((idStage.instruction.imm & 0x3FFFFFF) << 2);
https://stackoverflow.com/questions/26490112
复制相似问题