2014-02-20 28 views
0

我不明白,這片MIPS代碼的行爲:不明白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. 如果我註釋掉。數據一切,但五:,用戶數據區段顯示:

    用戶數據段[千萬] .. [10040000] [10000000] .. [1003ffff] 00000000

    現在沒有數據嗎?那麼v在哪裏?

謝謝。

回答

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未定義(除非您的彙編程序自動將未定義的符號視爲外部處理)

+0

非常感謝!這非常有幫助。 – user2963044