在学习MIPS的过程中,我对这部分感到困惑.
John L. Hennessy教授写的教科书说,如果我们得到一些很大的常数来加载,我们应该
lui $s0, upper(big)
ori $s0, $s0, lower(big)
Run Code Online (Sandbox Code Playgroud)
但为什么我们不这样做呢
addi $s0, $zero, big
Run Code Online (Sandbox Code Playgroud)
由于寄存器是32位,这是更直接的,不是吗?
传递给的立即参数addi只有16位.要加载一个超出16位值范围的32位立即值,您需要在两个值中执行此操作,如教科书中的示例所示.
(预计另一个问题,没有立即加载或添加立即指令的原因是32位立即值是因为MIPS ISA使用固定大小的32位指令,所以总是<32位可用于任何指令参数 - 这在RISC架构中很常见.)
| 归档时间: |
|
| 查看次数: |
15756 次 |
| 最近记录: |