关于MIPS汇编中lw、la指令及偏移量的技术疑问
MIPS汇编寻址方式常见疑问解答
嘿,刚上手MIPS汇编确实容易被这些寻址细节绕晕,我来逐个帮你拆解清楚:
关于
lw $t0, n的取值问题
当你在.data段定义n:.word 4时,n是一个符号地址,它指向内存中存储数值4的那个位置。而lw指令的核心作用是从指定内存地址加载一个字的数据到寄存器,所以lw $t0, n会把n指向的内存地址里的数值4加载到$t0中,也就是说$t0最终存储的是4,不是n的地址。数组场景下的两种
lw用法区别
假设n是一个数组,比如定义成n:.word 10, 20, 30,此时n代表数组第一个元素的内存地址:lw $t0, n:直接从n指向的地址(第一个元素的地址)加载数据,所以$t0会存储数组的第一个值10;lw $t0, 4(n):这是基址+偏移的寻址方式,n作为基地址,加上偏移量4(MIPS中一个字占4字节),指向数组第二个元素的地址,所以$t0会存储数组的第二个值20。你之前的理解有点小偏差,偏移量是用来跳过前面的元素的~
关于
lw $t0, 4($0)的结果$0是MIPS里的零寄存器,它的值永远固定为0。lw $t0, 4($0)的寻址逻辑是:用$0中的值0加上偏移量4,得到内存地址4,然后从这个地址加载一个字的数据到$t0。所以$t0存储的是内存地址4处的内容,不是0——除非地址4刚好存储的是0,否则它的值取决于该内存位置的实际数据。
内容的提问来源于stack exchange,提问作者user9535888
相关产品推荐
相关产品推荐

