MIPS汇编注释中&A[i-j]与A[i-j]的含义及区别是什么?
MIPS数组访问指令注释符号差异说明
核心符号定义
注释使用的是类C语言的语法规则:
&A[i-j]表示数组A中索引为i-j的元素的内存地址,&是取地址标识A[i-j]表示数组A中索引为i-j的元素存储的实际数据值
对应指令逻辑解释
你给出的两条指令是MIPS架构下读取数组元素的标准两步操作:
add $t1, $t1, $t0 # $t1 = &A[i-j]
执行前$t1存储数组A的首地址,$t0存储偏移量(值为(i-j) * 单个数组元素的字节长度,比如int型数组对应(i-j)*4)。加法运算结束后,$t1中保存的就是A[i-j]对应的内存地址,和注释中的&A[i-j]对应。lw $t1, 0($t1) # $t1 = A[i-j]lw是MIPS的加载字指令,作用是从源操作数给出的内存地址中读取存储的数据,写入目标寄存器。这里就是从刚才算出的A[i-j]的地址中,把该位置存储的实际数组值读出来,覆盖$t1中原有的地址值,此时$t1保存的就是A[i-j]本身的数值,和注释对应。
具象示例
假设数组A首地址为0x1000,元素为4字节int类型,i-j=3:
&A[3]就是地址本身:0x1000 + 3*4 = 0x100CA[3]就是0x100C这个地址里存储的具体数值,比如你存入的100、20这类业务数据。
内容的提问来源于stack exchange,提问作者RyanKao
相关产品推荐
相关产品推荐

