GB ASM

aus RHWiki, der freien Romhacking-Enzyklopädie

Register

Der Gameboy verfügt über 8 Register: a, f, b, c, d, e, h und l. Dies sind 8-Bit-Register, die aber auch zu 16-Bit-Registern zusammengefasst werden können: af, bc, de und hl.

  • Das Register a wird auch Akkumulator genannt. Fast alle Daten, die verarbeitet werden, landen im Register a. a ist oft auch das Register, welches das Ergebnis einer Operation aufnimmt.
  • Ein besonderes Register stellt f dar. f steht für Flags und enthält die Flags z (Zero), n (Addieren/Subtrahieren), h (Half-Carry) und c (Carry). Somit werden nur 4 Bits im Register f benutzt:
Bit 7    z
Bit 6    n
Bit 5    h
Bit 4    c
Bit 3-0  nicht benutzt

Das Zero-Flag ist immer dann gesetzt, wenn das Ergebnis einer Operation 0 ist. Das Flag n gibt an, ob die letzte Operation eine Subtraktion war oder nicht. Das Carry-Flag ist gesetzt, wenn es einen Übertrag bei einer Operation gab, und das Half-Carry-Flag ist gesetzt, wenn es einen Übertrag bei den Nibblen eines Bytes gab.
Man kann nicht direkt in das Register f schreiben.

  • Die Register b und c werden meistens als Counter für Schleifen benutzt.
  • Die Register d und e werden meistens dazu benutzt, als Register de Adressen zu halten.
  • Die Register h und l werden oft als Register hl zur indirekten Adressierung benutzt. Beispiel:
ld hl,$CB10
ld [hl],$A0

Während die erste Operation den Wert CB10 ins Register hl lädt, lädt die zweite Operation den Wert A0 an das Offset, auf das hl zeigt (in dem Fall also CB10).

Zusätzlich zu diesen 8-Bit-Registern gibt es 2 16-Bit-Register, sp und pc. sp steht für Stackpointer und zeigt immer auf die aktuelle Position des Stacks. pc ist der Programcounter und zeigt auf die nächste Operation, die ausgeführt werden soll.

Beispielcode

ld   a,00
ld   (FF00+4F),a
call 54D6
ld   de,9000
ld   hl,54E1
call 0B00
dec  c
jp   z,43AF

Siehe auch

'Persönliche Werkzeuge