2017-04-14 13 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 

これは、火星コンソール上でcharとなります。 なぜですか?

+0

'.align'は、' word'を使用しているので '.align'を使用しようとします。これは' char'と整列していません – Adam

答えて

0

私はちょうど推測ですが、文字は通常バイト単位で格納されます。したがって、bは1($ v0)ではなく4($ v0)になり、終了するには2でnullが必要になります。

0

アンドリューチップのおかげで、それは働いた。 問題は、syscall 4が1バイトずつ読み込んでいて、各単語の間に単語が読み込まれていたためです。つまり、最初のバイトだけを出力して停止したためです。 解決策は、sb(store byte)命令を使用し、オフセットを1ずつインクリメントすることでした。 ありがとうございました。

関連する問題