SM64 Hacking - MIPS R4300i Assembly Tutorial

geschrieben am 13.07.2014 12:59:09
( Link )
Vielleicht werden einige, die bereits irgendwie sich im Bereich Informatik ausbilden eventuell auf den Prozessor stoßen(Kp, habe von einigen gehört, dass sie sich mit diesen beschäftigen mussten) weil die meisten scheinen sich mit diesem zu beschäftigen, weil er doch recht simpel ist und das Verstehen der Pipelines auch relativ einfach ist. Dadurch das es keine Pipeline-Sperren gibt, ergeben sich daraus mehrere Vorteile.

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.