2013-10-14 43 views
0

打印字符串下面我有MIPS:沒有pseduo說明

.globl main 
.data 
prompt: 
     .asciiz "Hello world!" 
.text 
main: 
    addi $v0, $v0, 4 
    lui $a0, 0x1000 
    syscall 
rtn: 
    jr $ra 

現在,我不知道爲什麼字符串不打印,它運行沒有語法錯誤。另外,我不允許使用任何僞指令,所以這就是爲什麼我要以更長的方式來做這件事。這是錯誤進入的地方,我不知道提示字符串存儲在哪裏?任何幫助表示讚賞!

謝謝!

+0

是什麼讓你覺得'prompt'位於地址'0x1000'? –

+0

在例子中,我們在課堂上給出了他,他會創建一個他沒有定義在任何給定地址開始的數組。然後他創建了一個字符串並將其稱爲提示。當他想要使用提示符時,他將10加到0x1000以獲得陣列中的第一個索引(數組長度爲10個字節)。接下來的事情是提示,這是一個0 + 10. – user2864709

+0

好的 - 即使它是正確的地址,你應該養成使用符號地址而不是硬編碼的習慣。 –

回答

1

在SPIM中,.data部分默認從地址0x10010000開始。因此,要打印Hello World字符串而不使用僞指令,您可以使用:

.globl main 
.data 
prompt: 
    .asciiz "Hello world!" 
.text 
main: 
    addi $v0, $zero, 4 
    lui $a0, 0x1001  # $a0 = 0x10010000 
    syscall 
rtn: 
    jr $ra 
+0

謝謝,這清除了事情! – user2864709

1

請注意,如果地址是0x1000,則表示高16位全爲零,最低16位爲0x1000。您正在加載高16位。因此,而不是lui $a0, 0x1000嘗試addiu $a0, $0, 0x1000

然而,你的彙編的符號操縱表情不應該算作僞指令,所以像這種氣體代碼(或在你的彙編的等價物)也應該被允許:

lui $a0, %hi(prompt) 
ori $a0, $a0, %lo(prompt)