这可能是一个简单而明显的事情,我只是没有看到,但是如何在 MIPS64 处理器中加载地址?在 MIPS32 处理器中,以下汇编程序伪指令:
la $at, LabelAddr
扩展为:
lui $at, LabelAddr[31:16]
ori $at,$at, LabelAddr[15:0]
查看 MIPS64 指令集,我发现它lui
仍然将 16 位立即数加载到 32 位字的上半部分。似乎没有任何类型的扩展指令将立即数加载到 64 位字的上部区域。那么,这似乎是为了执行相当于la
伪指令的操作,我需要扩展为类似以下的代码:
lui $at, LabelAddr[63:48]
ori $at, $at, LabelAddr[47:32]
sll $at, 16
ori $at, $at, LabelAddr[31:16]
sll $at, 16
ori $at, $at, LabelAddr[15:0]
这让我觉得有点……像加载地址这样基本的东西令人费解,所以它让我确信我忽略了一些东西。
我忽略了什么(如果有的话)?