gpt4 book ai didi

c - 跳转序列的实现

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:49 28 4
gpt4 key购买 nike

我正在尝试用 C 语言对我的流水线模拟器执行跳转指令。我一直在阅读 mips 的 J-Instruction,并看到它由 26 位 imm 和 6 位操作码构成。进一步阅读后,我发现跳转指令的地址可以用这个计算

PC <- PC31-28::IR25-0::00

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

if(idStage.instruction.type == J)
{
ifStage.pc = ifStage << idStage.instruction.imm;
ifStage.pc = IfStage << 2;
}

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

最佳答案

应该是

  ifStage.pc = (ifStage.pc & 0xF0000000) | (idStage.instruction.imm << 2);

即:获取当前 PC,应用一个 AND 掩码以保留位 28..31,然后应用一个 OR 掩码,立即移位器向左移动 2 个位置。这假定 idStage.instruction.imm 是 26 位立即数。如果它可以在高位 (26..31) 中保存“垃圾”,那么您将应用另一个 AND 掩码:

  ifStage.pc = (ifStage.pc & 0xF000) | ((idStage.instruction.imm & 0x3FFFFFF) << 2);

关于c - 跳转序列的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26490112/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com