我刚开始学习计算机组织。
我的问题和这篇文章类似存储器的地址和寄存器的地址是如何连接的?(AddrConstant MIPS指令)lw $ 0, AddrConstant4($ 1)
该指令的含义是$t0=constant 4
我如何理解这个指令是添加4到寄存器$s1的值,并加载(4+寄存器$s1的值)到$t0。
我的问题是我不知道$s1已经有什么值了。
如果$s1为0,则有意义。
然而,如果$s1有5,$t0将有4+5=9。
谁知道$s1里面有什么值
还是我理解错了?
我刚写完这个问题,另一个想法就来了。
AddrConstant4($s1)表示将4代入寄存器$s1的值。(与$s1之前的值无关)
所以lw $t0, AddrConstant4($s1)与$t0==4相同
这是对的吗?
这是一条伪指令,可以扩展为两条或多条指令。
lw $t0, label($t1)
展开为:
la $at, label
addu $at, $at, $t1
lw $t0, 0($at)
其中la
本身是包含lui
和ori
的伪指令。
有一些优化是可能的,但是对于最好的代码,最好使用la
将标签地址加载到寄存器中,持续时间更长,例如,可以在循环之外完成。(或者将算法改为使用指针)