2017-05-08 4 views
0

Ich habe gerade angefangen zu programmieren MIPS assembly und ich habe ein paar Fragen dazu.Drucken einer Zeichenfolge (Assembly)

Zuerst mein Code:

.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 

Ich möchte fragen, warum habe ich eine Nachricht

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

während ich versuche, ein zweites Wort (word2) zu laden? (Ich weiß, dass ich keinen String laden muss.)

Zweitens wird dieser Code Ausgabe "Hallo Welt! Welt!" - Wort1 Wort2 Wort3 Wort2 Wort3 Wort3.

Wenn ich die 10. und 11. Zeile des Codes kommentiere (andere Wörter laden), wird der Ausgang Hello World! statt Hello sein.

Warum passiert es? Ich möchte nur ein Wort drucken, nicht drei gleichzeitig.

Vielen Dank im Voraus!

+0

Fügen Sie Ihren Strings ein ", 0" hinzu, um dem Betriebssystem mitzuteilen, wo die Wörter stehen – Tommylee2k

+0

In MIPS können Sie nicht von falsch ausgerichteten Adressen lesen. Das sagt Ihnen die Fehlermeldung. – fuz

Antwort

0

Tatsächlich weiß der Code nicht, wo er aufhören soll. Aus diesem Grund druckt es word1word2word3, wenn Sie nur word1 drucken (druckt word2word3 wenn Sie nur word2 drucken). Ich denke, es gibt einen Terminator im Speicher (vielleicht 0 Byte) direkt nach den drei Wörtern, deshalb stoppt er direkt nach dem Ausdrucken.

Sie müssen dem Assembler mitteilen, dass er die Eingabe nach jedem Wort beendet, indem er ein 0 Byte an das Ende jedes Wortes anfügt, wie Tommylee2k vorschlägt.

+0

Okay, aber wie kann ich das tun? Das Hinzufügen von ", 0" am Ende des Strings hilft nicht. – NoName

+0

Ich bin kein MIPS-Experte, aber ich denke, Sie sollten .ascii durch .asciiz ersetzen Sie können auf diesen Link für den Unterschied zwischen diesen beiden verweisen: http://stackoverflow.com/questions/7783044/whats-the-difference-between -asciiz-vs-ascii –

+1

Es funktioniert, vielen Dank :) – NoName

Verwandte Themen