2016-12-26 3 views
-2

Ok, so dass ich diese einfache MIPS32 Programm haben:Fetch-Adresse nicht auf Wortgrenze ausgerichtet sind, MIPS32

.text 
.globl main 

main: 

lw $s3,10 

move $a0,$s3 
li $v0,1 
syscall 

li $v0,10 
syscall #program termination 

Alles, was ich tun möchte, ist $ s3 Nummer 10 zu laden, um zu registrieren, und dann drucken it.Mars diese assembliert aber ohne Fehler, wenn ich laufen treffen bekomme ich folgende Fehlermeldung:

Runtime exception at 0x00400000: fetch address not aligned on word boundary 0x0000000a 

ich verstehe, es ist etwas falsch mit dem

lw $s3,10 

Befehl, aber ich nicht wirklich, wie es zu beheben.Was ich nicht verstehe, ist der Fehler: holen Adresse nicht auf Wortgrenze ausgerichtet. Was bedeutet das? Und warum passiert es?

+1

Sie können nur aus wortausgerichteten Speicheradressen lesen. Auf MIPS32 sind Wörter 4 Bytes. Also muss die Speicheradresse 4-Byte-ausgerichtet sein. –

Antwort

1

lw bedeutet Laden von Wort aus dem Speicher an der angegebenen Adresse. Da 1 Wort auf MIPS32 4 Bytes ist, muss die Adresse ein Vielfaches von 4

Also, geben diese Befehle Sie den gleichen Fehler:

lw $s3,9 
lw $s3,11 

Diese werden nicht:

lw $s3,8 
lw $s3,12 
Verwandte Themen