我不明白这段MIPS代码的行为:
.data
x: .word 12
y: .word 14, -3
z: .ascii "CSE2021"
t: .byte 0x8a
v: .word y
.text
main:
addi $t0, $0, 0
lw $s0, y($t0)
lw $t0, v($0)
lw $s0, -4($t0)
jr $ra
有几件事困扰着我:
任务是在执行结束时确定$ s0的值。你怎么能这样做?
该行: v:.word y 是什么意思?它是否声明了一个字符,为什么它没有引号?
如果我在.data中注释掉所有内容,但 v:,则用户数据段会显示:
用户数据段[10000000] .. [10040000] [10000000] .. [1003ffff] 00000000
现在没有数据吗?哪个是v呢?
感谢。
答案 0 :(得分:3)
1)你按照处理器的作用来做到这一点:
addi $t0, $0, 0 # $t0 is now 0
lw $s0, y($t0) # $s0 is now word from memory at address y+$t0 which is 14
lw $t0, v($0) # $t0 is now word from memory at address v+$0 which is y
lw $s0, -4($t0) # $s0 is now word from memory at address $t0-4=y-4=x which is 12
2)y
是一个标签,表示使用y
的地址
3)如果你只保留v
,它应该产生编译错误,因为y
未定义(除非汇编程序自动将未定义的符号视为外部)