2017-04-14 134 views
0

我正在用bison構建一個編譯器並遇到這個問題。 我需要動態分配內存並存儲字符串,然後打印它的內容。Mips動態內存分配和指針

我考慮過在數據部分保存一個指針,然後分配內存保存指針中的地址,然後分配字符串val然後打印它。 我的問題是當我試圖打印字符串時,它只打印第一個字符。 這裏是一個代碼示例。

.data 
    p: .word 0 # pointer to save the allocated memory first address. 
.text 

    li $v0,9 #allocate instruction 
    li $a0,64 # allocate 64 byte 
    syscall 
    sw $v0,p #save the first memory address to pointer p 

    li $t0,'a' #write the first byte 'a' cahr 
    sw $t0,0($v0) 
    li $t0,'b' #write the first byte 'a' cahr 
    sw $t0,4($v0) 

    li $v0,4 #print instruction 
    lw $a0,p 
    syscall 

這將導致火星在火星控制檯上。 有什麼想法爲什麼?

+0

嘗試使用'.align',因爲您使用的是與'char'不匹配的'word' – Adam

回答

0

我只是猜測:但字符通常是以字節存儲。因此b應該在1($ v0)而不是4($ v0)中,你需要在2中有一個空值來終止。

0

Andrew感謝您的提示,它的工作。 問題是系統調用4正在逐字節地讀取數據,因此我在每個填充了null的字詞之間加載單詞,因此它只打印第一個字節,然後停止。 解決方案是使用sb(存儲字節)指令並將偏移量增加1. 感謝您的幫助。