2017-05-08 17 views
0

プログラミングを開始したばかりのMIPS assemblyと私はそれについていくつか質問があります。文字列の印刷(アセンブリ)

まず、私のコード:

.data 
word1: .ascii "Hello" 
word2: .ascii " World" 
word3: .ascii "!" 

.text 
main: 

#lw $t0, word1 
#lw $t1, word2 
#lw $t2, word3 

li $v0, 4 
la $a0, word1 
syscall 
la $a0, word2 
syscall 
la $a0, word3 
syscall 

私は2番目の単語(WORD2)をロードしようとしている間、私のメッセージ

Runtime exception at 0x0040000c: fetch address not aligned on word boundary 0x10010005 

持っている理由お聞きしたいですか? (私は文字列をロードしていないことを知っています)

次に、このコードの出力は "Hello World!World !!"になります。 - word1 word2 word3 word2 word3 word3。

コードの第10行と第11行(他の単語を読み込む)にコメントすると、出力はHelloの代わりにHello World!になります。

どうしてですか?私はちょうど3つではなく、1つの単語を印刷したい。

ありがとうございます!

+0

"、0"を文字列に追加して、OSに単語の停止先を教えてください – Tommylee2k

+0

MIPSでは、整列していないアドレスを読み取ることはできません。エラーメッセージがあなたに伝えていることです。 – fuz

答えて

0

実際、コードはどこで停止するのかわかりません。このため、word1を印刷するとword1word2word3が印刷されます(word2を印刷すると、word2word3がそれぞれ印刷されます)。私は、3つの単語の直後に、メモリにターミネータ(たぶん0バイト)があると思うので、印刷した直後に停止します。

あなたがしなければならないことは、Tommylee2kが示唆しているように各単語の最後に0バイトを追加することによって、各単語の後にタイピングを完了するように指示することです。

+0

さて、どうすればいいですか?文字列の最後に "、0"を追加することは役に立ちません。 – NoName

+0

私はMIPSのエキスパートではありませんが、あなたは.asciを.asciで置き換えてください。これらの2つの違いについては、このリンクを参照してください:http://stackoverflow.com/questions/7783044/whats-the-difference-between -asciiz-vs-ascii –

+1

これは動作します、たくさんありがとう:) – NoName

関連する問題