我在Java中实现MIPS32指令集来构建模拟器。我已经参加了aluipc指令,我不确定我所做的事情是否正确。
在MIPS 32的文档中,它说"该指令执行PC相对地址计算。 16位立即数向左移16位,意外, 并添加到ALUIPC指令的地址。结果的低16位被清除,即 结果在64K边界上对齐。结果放在GPR rs。"
他们提供的操作示例是:
GPR[rs] <- ~0x0FFFF & ( PC + sign_extend( immediate << 16 ) )
我的代码是:
0x0FFFF & (v1 + (v2 << 16));
其中v1是pc而v2是直接的,我认为我将它简单地存储在一个int并且这就是答案吗?或者我清除16位低位并仅存储高位16?