Wiki-Bereiche:

Informationstechnik (IT)
Hobbys

Artikel in diesem Bereich:

Zum Ende der Metadaten springen
Zum Anfang der Metadaten springen

Adressierungsarten

Adressierungsart 65XX Beispiel Hinweis
Registeradressierung      
Impliziert IMP LSRA  
  ACC ROL A  
Flag IMP CLI  
Explizit - DEC R0  
Einstufige Speicheradressierung      
Unmittelbar IMM LDA #$85 # steht für unmittelbarer Wert.
Absolut (direkt) ABS JMP $1044  
Zero-Page Z-P INC $7F  
Seiten-Register - LD R0,<$7F höherwertiges Byte kommt aus DP-Register.
Registerindirekt - LD R1,(A0)  
Speicherrelativ ABS,X ST R1,$A704(R0)  
  ABS,X LDA $1567,Y  
  Z-I,X DEC $44,X  
Registerrelativ   DEC $A7(B0)(I0)  
Programmzählerrelativ REL LBRA $7FFF  
Zweistufige Speicheradressierung      
Indirekt absolute - LDA ($A347)  
  IND JMP ($0402) Bei 65XX Indirekt nur bei JMP erlaubt.
Nachindiziert indirekt (IND),Y LDA ($52),Y  
Indirekt registerindirekt - LD R0,((R1))  
Indirekt indiziert - INC ($10(B0)(I2))  
  IND,X LDA ($50,X)  
Indiziert indirekt - INC $A7($10(B0))(I2) *Kopfschmerzen* :)
Indirekt programmzählerrelativ . JMP ($A7(PC))  

Registeradressierung

IMP (implied): Implizite Adressierung

Verschiebe den Inhalt des Akkumulators A um eine Bitposition nach rechts. Die effektive Adresse ist im OpCode enthalten (LSR_A_):

LSRA

Spezialform der impliziten Adressierung ist die Flag-Adressierung, z.B. das Setzen des Interrupts- oder das Löschen des Carry-Flags:

SEI
CLC

Weitere Spezialform z.B. des 65XX: ACC (Accumulator), z.B. das Linksrotieren des Akkumulators:

ROL A

Explizite Registeradressierung

Dekrementiere den Inhalt des Registers R0. Die effektive Adresse steht im REG-Feld des OpCodes:

DEC R0

Einstufige Speicheradressierung

IMM (immediate): Unmittelbare Adressierung

Dezimalwert 85 in Akkumulator laden:

LDA #85

ABS: Absolute (direkte) Adressierung

Programmsprung an Adresse 0x1044

JMP $1044

Seitenadressierung

Z-P: Zero-page-Adressierung

Erhöhe den Inhalt der Speicherzelle $007F um 1:

INC $7F      # $7F --> $007F

Seiten-Register-Adressierung

Bei der Seiten-Register-Adressierung wird mit DP-Register (direct page register) die höherwertigen Bytes der Adresse bestimmt.

Lade das Register R0 mit dem Inhalt des Speicherwortes $A57F (im DP-Register steht $A5):

LD R0,$7F

Setzt man das DP-Register auf $00, erhält man die Zero-page-Adressierung, siehe vorherige Überschrift.

Registerindirekte Adressierung

Lade das Register R1 mit dem Inhalt des durch das Adressregister A0 adressierten Speicherwortes:

LD R1,(A0)

Indizierte Adressierung

Speicherrelative Adressierung oder ABS,X oder Z-I,X indizierte Adressierung (65XX)

Speichere den Inhalt von Register R1 in das Speicherwort, dessen Adresse sich durch Addition des Inhalts von R0 zur Basis $A704 ergibt:

ST R1,$A704(R0)

Beispiel 65XX: Speichere den Inhalt in Akkumulator ab, dessen Adresse sich aus der Addition der Adresse $1567 und dem Inhalt des Y-Indexregister ergibt:

LDA $1567,Y

Spezialfall beim 65xx. Dekrementiere das Speicherwort, dessen Zero-Page-Adresse sich durch Addition des X-Indexregister und $44 ergibt.

DEC $44,X

Registerrelative Adressierung

Lösche das Speicherwort, dessen Adresse sich durch die Addition des hexadezimalen Offsets $A7 zum Inhalt des Basisregister B0 ergibt:

CLR $A7(B0)

Registerrelative Adressierung mit Index

Dekrementiere das Speicherwort, dessen Adresse sich durch die Addition der Inhalte der Register I0 und B0 mit dem Offset $A7 ergibt:

DEC $A7(B0)(I0)

REL: Programmzählerrelative Adressierung

Verzweige "unbedingt" zu der Speicherzelle, deren Adressdistanz zum aktuellen Programmzähler 32767 (=$7FFF) ist:

LBRA $7FFF

Zweistufige Speicheradressierung

IND: Indirekte absolute Adressierung

Lade den Akkumulator A mit dem Inhalt des Speicherwortes, dessen Adresse im Speicherwort $A347 steht:

LDA ($A347)

Beispiel 65XX: Programmsprung an die Adresse, die in Adresse $0402 abgelegt ist:

JMP ($0402)

(IND),Y: Nachindizierte indirekte Adressierung

Speichere den Inhalt des Speicherworts im Akkumulator ab, dessen Adresse sich durch die Addition von $50 und der Adresse, die im Y-Indexregister abgelegt ist, ergibt.

LDA ($52),Y

Indirekte registerindirekte Adressierung

Lade den Inhalt des durch R1 adressierten Speicherwortes in den Adresspuffer und bringe danach den Inhalt des durch den Adreßpuffer angesprochenen Speicherwortes in das Register R0

LD R0,((R1))

Indirekte indizierte Adressierung oder (IND,X): Vorindizierte indirekte Adressierung

Es wird zunächst eine Adresse durch die Addition einer Adresse mit einem Index (1), einem Offset mit einem Basisregister (2) oder einem Offset, einer Basisadresse und einem Index (siehe auch oben: Indizierte Adressierung) eine Zwischenadresse gebildet. Diese Zwischenadresse enthält dann die effektive Adresse.

INC ($A711(I2))     # 1: speicherrelativ
INC ($10(B0))       # 2: speicherrelativ
INC ($10(B0)(I2))   # 3: speicherrelativ mit Index

Beim 65XX kommt ein ähnliche Adressierung zum Einsatz, die jedoch mit Zero-Page Adressen arbeitet. Beispiel:

Speichere den Inhalt des Speicherworts im Akkumulator ab, dessen Adresse in der Adresse abgelegt ist, die sich durch Addition von $50 und des Wertes im X-Indexegister ergibt.

LDA ($50,X)

Indizierte indirekte Adressierung

Siehe vorherige Adressierung, jedoch kommt hier zu erst die indirekte Adressierung zum Einsatz und dann die Indizierung.

Extrembeispiel: Zunächst wird der Offset $10 mit dem Inhalt des Basisregisters B0 addiert: $I0(B0). Diese Summe ergibt die Adresse, in der die Basisadresse des Operanden abgelegt ist: ($I0(B0)). Die effektive Adresse des Operanden erhalten wir schließlich durch Addition des Inhaltes des Indexregisters I2 sowie des Offsets $A7 zu dieser Basisadresse: $A7($I0(B0))(I2). Nun kann der eigentliche Befehl, die Erhöhung des Speicherworts an dieser effektiven Adresse erfolgen.

INC $A7($10(B0))(I2)

Indirekte programmzählerrelative Adressierung

Addiere zum Inhalt des Programmzählers den Offset $A7. Entnehme dem durch diese Summe adressierten Speicherwort die Adresse, an der das Programm fortgesetzt werden soll:

JMP ($A7(PC))

Stichwörter

hardware hardware Löschen
assembler assembler Löschen
Geben Sie Stichwörter ein, die dieser Seite hinzugefügt werden sollen:
Please wait 
Sie suchen ein Stichwort? Beginnen Sie einfach zu schreiben.