Ladebefehle, Speicherbefehle, Vergleiche und Adressierung

Aus CBMPET.DE

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Einführung

Langsam sollten wir uns an die Mnemonics der CPU wagen. Wenn man sich die einzelnen Befehle im Vergleich zu den Basic-Analogons anschaut, wird man sehr schnell feststellen, dass Assembler auch eine Menge Quelltext spart.

Ladebefehle und Adressierung

LDA, LDX, LDY

Mit LDA wird der Akkumulator mit einem Wert geladen. Die verschiedenen Möglichkeiten werden auf dieser Seite etwas genauer betrachtet. Die Adressierungsarten lassen sich auch auf den Speicherbefehl STA anwenden.


Unmittelbare Adressierung

Basic-Analogon:

A= $10

Assembler:

LDA #$10

Bei der unmittelbaren Adressierung wird der Akkumulator mit einem Wert geladen, der als Teil des Programms behandelt wird.


Absolute Adressierung

Basic-Analogon:

A=PEEK($1000) 

Assembler:

LDA $1000

Bei der absoluten Adressierung wird der Wert aus der angegeben Speicherzelle in den Akkumulator geladen.

Zeropage-Adressierung

Basic-Analogon:

A=PEEK($45) 

Assembler:

LDA $45

Bei der Zeropage-Adressierung wird der Wert aus dem Bereich $0000-$00ff in den Akkumulator geladen. Dieser Befehl benötigt nur zwei Byte.

Die absolut-X-indizierte Adressierung

Basic-Analogon:

A=PEEK($1000+X) 

Assembler:

LDA $1000,X

Hier wird aus dem Speicherzelle gelesen, die sich aus der Summe der Adresse $1000 plus dem X-Register ergibt.

Die Zeropage-X-indizierte Adressierung

Basic-Analogon:

A=PEEK($F6+X) 

Assembler:

LDA $F6,X

Dieser zwei Byte-Befehl liest ausschließlich aus der Zeropage. Das ist mit äußerster Vorsicht zu genießen ! Da die Zeropage bei $ff endet, liest der Befehl sehr schnell ungewollt aus einem falschen Bereich. Bei $F6 und X-Register $10 wäre rein rechnerisch die Adresse $0106 dran, es wird jedoch auf die Zelle $06 zugegriffen.

Die absolut-Y-indizierte Adressierung

Basic-Analogon:

A=PEEK($1000+Y) 

Assembler:

LDA $1000,Y

Hier wird aus dem Speicherzelle gelesen, die sich aus der Summe der Adresse $1000 plus dem Y-Register ergibt.

Die Zeropage-Y-indizierte Adressierung

Basic-Analogon:

A=PEEK($F6+Y) 

Assembler:

LDA $F6,Y

Hier wird per 2 Byte-Befehl aus $F6 + Y-Register gelesen. Es sollte wie bei der Zeropage-X-indizierte Adressierung auf eine Bereichsüberschreitung geachtet werden.

Die indirekt-Y-indizierte Adressierung

Basic-Analogon:

A=PEEK((PEEK($FA)+256*PEEK($FB)+Y)

Assembler:

LDA ($FA),Y

Bei Adressierungs-Art bleibt der Zeiger immer unverändert in der Zeropage. In $FA würde sich das Low- und $FB das High-Byte befinden. Erst nach Auslesen der Adresse und Addieren des Y-Registers wird der Akkumulator mit der Zieladresse geladen. Wenn z.B. folgende Daten vorhanden wären : $FA=$00 , $FB=$10 und Y-Register $20, würde der Akkumulator den Wert aus Zelle $1020 laden.


LDX und LDY

Mit LDX und LDY werden die Indexregister geladen. LDX lädt das X-Register mit einem neuen Wert und LDY demnach das Y-Register. Der alte Wert wird dabei gelöscht.


Speicherbefehle

STA, STX und STY

Diese drei Befehle sind die Gegenstücke zu den Ladebefehlen. Wie vorher schon erwähnt, lassen sich auf STA die gleichen Adressierungsarten wie von LDA anwenden.
STX kann absolut, in die Zeropage und Zeropage-Y-indiziert speichern. Bei STY verhält es sich genauso, nur der letzte Punkt wäre durch Zeropage-X-indiziert auszutauschen.


Vergleichsbefehle

CMP, CPX und CPY

Die 6502 verfügt über drei Vergleichsbefehle. CMP verfügt über die gleichen Adressierungsmöglichkeiten wie LDA und STA. CPY und CPX können direkt mit einen Wert, absolut oder aus der Zeropage vergleichen.

Die Befehle dieser Seite werden wir nun im weiteren Verlauf des Kurses, anhand der ersten Programm-Beispiele etwas genauer unter die Lupe nehmen.

Persönliche Werkzeuge