JavaScript Assembler mit MIPS / Mars Simulator

Tockra

Lt. Commander
Registriert
Dez. 2008
Beiträge
1.063
Hallo Leute,

ich befasse mich gerade gezwungenermaßen mit der Assemblersprache für MIPS Maschienen.
Ich benutze den Mars Editor und kenne bis jetzt leider nur die Basics.

Nun stehe ich wie der Ochs vor dem Berg vor einer Aufgabe, für die ich folgenden Maschienencode verstehen muss:
Code:
.data # 01 die Zeilenzahl ist zum 
 x: .word 4711 # 02 Besprechen in der Übung 
 y: .word 10 # 03 
 z: .word 0x0a94 # 04 
 e: .word 0 # 05 Ergebnisvariable 
 # 06 
 .text # 07 
 .globl main # 08 
 main: # 09 
 lw $2,x # 10 
 lw $3,y # 11 
 lw $4,z # 12 
 add $2,$2,$3 # 13 
 sub $3,$2,$4 # 14 
 sw $3,e # 15 
 li $2,10 # 16 Programm ordnungsgemaess beenden 
 syscall # 17

Leider habe ich bis jetzt nur begrenze Kenntnisse über Konstanten und über die Assemblerbefehle.
Nun macht der Mars Simulator aus den lw Befehlen ein lui Befehl und einen neuen lw Befehl.
Ich verstehe erst einmal nicht, was z.B. Zeile 10 - 12 machen soll und ich verstehe nicht so wirklich, wieso der Simulator daraus folgendes macht:
Mars.png



Ich hoffe mir kann jmd. helfen.

Gruß
T
 
In Zeile 10-12 werden deine Variablen aus dem Arbeitsspeicher in CPU-Register geladen.

Der Grund für die veränderten Befehle liegt vermutlich darin, dass 'lw' vom Prozessor in der von dir verwendeten Form nicht direkt unterstützt wird und daher umgeformt werden muss. So wie ich es verstehe, erwartet 'lw', dass die Speicheradresse in einem Register abgelegt ist. Diese Umformung sollte aber von der Funktion her keinen Unterschied machen.
 
Am Anfang hast du Variablen im *.word Format, sprich 32Bit beite Werte, definiert. In Zeile 10-12 willst du die Variablen direkt in ein Register laden, aber dafür ist der load word befehl nicht gemacht, das erkennt der Assembler und nimmt den korrekten lui Befehl. Das Problem dabei ist, dass bei lui nur 16Bit für die direkte Adressierung (deinen Wert) zur Verfügung stehen. Daher werden nur die oberen (upper) 16Bit deines
.word geladen.
 
Zurück
Oben