不懂MIPS程序

时间:2014-02-20 01:31:00

标签: assembly mips spim

我不明白这段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

有几件事困扰着我:

  1. 任务是在执行结束时确定$ s0的值。你怎么能这样做?

  2. 该行: v:.word y 是什么意思?它是否声明了一个字符,为什么它没有引号?

  3. 如果我在.data中注释掉所有内容,但 v:,则用户数据段会显示:

    用户数据段[10000000] .. [10040000] [10000000] .. [1003ffff] 00000000

    现在没有数据吗?哪个是v呢?

  4. 感谢。

1 个答案:

答案 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未定义(除非汇编程序自动将未定义的符号视为外部)