Was man halt immer bei MIPS wissen muss ist, dass es keine direkte Addressierungsmöglichkeit gibt wie beim 65C816:
Code
LDA $19 ; Lädt Wert von Adresse 7E:0019. Allerdings gilt das nicht, wenn die Bank 7F ist. Dann würde der Wert von 7F:0019 in Akkumulator geladen werden. -> Direct Addressing.
LDA $0019 ; Lädt Wert von Adresse 7E:0019. Bei Bank gilt das gleiche. -> Absolute Addressing.
LDA $7E0019 ; Lädt Wert von Adresse 7E:0019 in Akkumulator. -> Long Addressing.
Leider ist es nicht so beim MIPS. Bei MIPS muss man das in zwei Prozessen durchlaufen, also sogenanntes "Base Addressing", bei dem das Register als eine Art Pointer zum Operanden agiert:
Code
LUI T0, $809C ; Oberer Adressenteil. T0 ist unser Register und T0 := $809C0000.
LW T1, $5C9D(T0) ; Lade Wert von $809C5C9D in T1. T0 wurde nicht verändert und ist immernoch T0 := $809C0000.
Gleiches geht auch mit SW (Store Word)
Code
LUI T0, $809C ; Lade unseren oberen Adressenteil in T0.
ADDIU T1, T1, $001C ; Unseren Wert in T1 laden bzw. addieren. T1 := $0000001C. ADDIU = ADD Immediate Unsigned
SW T1, $5C9D(T0) ; Speichert Wert von T1 an Adresse $809C5C9D. T0 bleibt immernoch $809C0000.
LUI = Load Upper Immediate
LW = Load Word
Und nun zum Tutorial:
http://dl.smwcentral.net/6947/mips-tut.zip
Wird natürlich noch erweitert. Ich habe das ganze auch mit ein paar Farben ausgeschmückt:
Befehl wie LW, LUI, ADDIU, etc. ist orange. Register sind rot und Werte wie $809C oder $5C9D sind blau.
MfG,
Tarek701.