QtSpim加载.byte元素值异常?MIPS汇编代码结果存疑
MIPS代码执行结果疑问分析
给定数据段
.data a: .word 10 e: .word 3, 2, 1, 0 c: .word -1 d: .byte -1,0,0,0
执行代码
la $10,d addi $10,$10,-12 lw $4,0($10)
结果分析
要明确寄存器$4的值,需先梳理.data段的内存布局(按地址从低到高顺序,.word占4字节,.byte占1字节):
a占用4字节(起始地址记为X)e是4个.word,共16字节(地址范围X+4 ~ X+19),其中:e[0]=3在X+4,e[1]=2在X+8,e[2]=1在X+12,e[3]=0在X+16
c占用4字节(地址X+20 ~ X+23),存储值为-1d占用4字节(地址X+24 ~ X+27)
代码执行步骤:
la $10,d:将d的起始地址X+24加载到$10addi $10,$10,-12:$10的地址变为X+24-12=X+12lw $4,0($10):从地址X+12加载4字节的.word数据,对应e[2]的值1
QtSpim输出1是正确的,你和ChatGPT的错误源于偏移计算失误——d的地址减12指向的是e数组的第三个元素,而非c的地址(d减4才会指向c)。
内容的提问来源于stack exchange,提问作者stratakos
相关产品推荐
相关产品推荐

