Diskussion:Adressierung

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Besonderheit der indizierten Adressierungsarten bei Zugriff auf I/O-Register[Quelltext bearbeiten]

Sowohl die absolut-indizierte Adressierung als auch die indirekt-indizierte Adressierung kann beim Zugriff auf I/O-Registern unter bestimmten Umständen zu Nebeneffekten führen (aufgrund von Dummy-Zugriffen). Sollte man dies (ev. in einem eigenen Abschnitt) erwähnen bzw. erklären? --Fedi (Diskussion)

Hmm, ja. Aber da muss man schon ganz schön künsteln, damit sowas hervorruft. So richtig unabsichtlich passiert das jedenfalls nicht leicht, oder? Wenn's absichtlich genutzt wird, z.B.
LDX #$10
LDA $DCFD,X
um die Interrupts von CIA1 und CIA2 mit einem Befehl zu bestätigen, weil erst auf DC0D und einen Takt darauf DD0D gelesen wird, dann eher.
Weiteres Anwendungsbeispiel dürfte LSR $D019 für die Rasterinterrupt-Optimierer sein. --JohannKlasek (Diskussion) 00:12, 8. Jun. 2016 (CEST)
Ist jetzt eingearbeitet. --JohannKlasek (Diskussion) 17:07, 7. Jul. 2016 (CEST)

Strukturierung Adressierungsarten[Quelltext bearbeiten]

Habe da 2 kleine Verbesserungsvorschläge an diese hilfreiche, top gemachte Wiki-Page:

Eine schlanke Übersicht am Anfang zu den 13 Adressierungsarten fehlt noch. Außerdem sollte bei der Benennung der indirekten Modi die Reihenfolge ersichtlich gemacht werden: "Indirekte X-indiziert" ist verwirrend, denn es wird ZUERST INDIZIERT (der Index X-addiert), DANACH erst INDIREKT der Operand abgeholt. Somit sollte es "indiziert-X & indirekt" benannt werden, damit sich auch ein nicht so toller Programmierer auskennt bzw. auskennen lernen darf. Dito das kryptische "Indirekte Y-nachindizierte", leicht anders lesbar als "indirekt Y - nachindiziert", das wohl besser knapp und eindeutig "indirekt & indiziert-Y" genannt werden sollte.

Das ist ja nur eine Begriff, der für sich nicht die Arbeitsweise der Adressierung zwangsläufig widerspiegeln muss. Es wird durch das hinlegen er exakten Aktion in den Begriff bestenfalls nur noch sperriger. Kein Anfänger erwartet aus der Bezeichnung der Adressierungsart, dass sich daraus exakt die Arbeitsweise der Adressierung - vor allem eine solch komplexen - erschließt. --JohannKlasek (Diskussion) 14:35, 11. Jul. 2024 (CEST)

Man kann einfach die 13 Dinger in nur 5 Hauptkategorien übersichtlich und leicht verständlich einteilen. Dann tut sich ein Einsteiger oder auch nachschlagender Fortgeschrittener leichter! Die "OPERAND-JAGD", denn um den geht es immer, sieht dann leicht verständlich und auch viel besser merkbar so aus:

Vielleicht vorab ein Einwand zur Bedeutung von "Adressierungarten". Der Name bedeutet nicht, dass der Operand immer eine Adresse darstellt, sondern das geht auf die allgemeinere Bedeutung zurück, wie ein Datum als Operand adressiert wird. Da geht es nicht um eine etwaige "Adressangabe" selbst, sondern eben wie das Datum, mit dem ein Befehl operiert, adressiert bzw. erreicht wird. --JohannKlasek (Diskussion) 14:35, 11. Jul. 2024 (CEST)
  1. GAR KEINE ADRESSANGABE:
    • implied (impliziert): "Adresse" bzw. Operand im Befehl selbst bereits gegeben, für Register (A,X,Y); (auch die unnötig erwähnte "Accu"-Adressierungsart gehört hier dazu und betrifft halt das A-Register, den Akku)
    Da ist sicherlich 'implizit' gemeint. ;)
    Nicht alle Befehle mit implizierter Adressierung verwenden ein Register A, X oder Y. SEI, CLI, CLC, SEC beziehen sich nur auf das Statusregister, RTS, RTI, BRK oder NOP auf gar kein Register (zumindest unmittelbar) betreffen.
    Die Accu-Adressierung ist sehr wohl explizit anzugeben, dass dies bei gewissen Assemblersyntaxen die Angabe des Operanten "A" zwingend ist. Das ist auch gewissermaßen eine historisch gewachsene Sache, die man so im Nachhinein aus dem kollektiven Gedächtnis löschen könnte.
    Außerdem fügt sich die Adressierungsart orthogonal bei den Read/Modify/Write-Befehlen ROR/ROL ein.
    --JohannKlasek (Diskussion) 14:35, 11. Jul. 2024 (CEST)
    • immediate (unmittelbar): keine Adresse notwendig, denn der Operand wird nach dem Befehl direkt übergeben.
    Adressierung ist nicht gleichbedeutend mit Adresse. Der Operand ist zwar keine Adresse aber er adressiert diesen dennoch, da dieser direkt im Opcode liegt. --JohannKlasek (Diskussion) 14:35, 11. Jul. 2024 (CEST)
  2. ABSOLUTE ADRESSANGABE:
    • absolute: LO/HI wird übergeben, wo dann der Operand abgeholt wird
    • absolute zeropage: wie oben, aber nur LO wird übergeben, da HI automatisch $00 ist
    Also absolute zeropage ist völlig unüblich und verwirrend. Wir meines Wissens nirgendwo verwendet und vermischt zwei grundlegende Adressierungarten. Mit Absolut ist immer gemeint, dass die 16 Bit einer Adresse angegeben werden. Zeropage-Adressierung (wird z.B. beim Nachfolger 65C816/02) als "Direct" Adressierung bezeichnet bezogen auf Page 0 oder einer anderen Page (direct). Das wäre damit auch mit der Dokumentation anderswo nicht kompatibel. Die Kategorie "Zeropage" auf diesem Wege einzusparen zu versuchen, finde ich hier äußerst verwirrend, irreführend und inkonsistent. Absolut ist 16 Bit, Zeropage/Direct ist 8 Bit - "absolute ... zeropage" ist der Widerspruch in sich. --JohannKlasek (Diskussion) 14:35, 11. Jul. 2024 (CEST)
  3. INDIZIERT (ALSO MIT INDEX):
    • absolute-X: LO/HI wird übergeben, X dazu addiert, dann wird der Operand dort abgeholt
    • absolute-X zeropage: wie oben, aber nur LO wird übergeben, da HI automatisch $00 ist
    • absolute-Y: LO/HI wird übergeben, Y dazu addiert, dann wird der Operand dort abgeholt
    • absolute-Y zeropage: wie oben, aber nur LO wird übergeben, da HI automatisch $00 ist
    Also absolute X/Y zeropage ist völlig unüblich und verwirrend. Wir meines Wissens nirgendwo verwendet und vermischt zwei grundlegende Adressierungarten. Mit Absolut ist immer gemeint, dass die 16 Bit einer Adresse angegeben werden. Zeropage-Adressierung (wird z.B. beim Nachfolger 65C816/02) als "Direct" Adressierung bezeichnet bezogen auf Page 0 oder einer anderen Page (direct). Das wäre damit auch mit der Dokumentation anderswo nicht kompatibel. Die Kategorie "Zeropage" auf diesem Wege einzusparen zu versuchen, finde ich hier äußerst verwirrend, irreführend und inkonsistent. Absolut ist 16 Bit, Zeropage/Direct ist 8 Bit - "absolute ... zeropage" ist der Widerspruch in sich. --JohannKlasek (Diskussion) 14:35, 11. Jul. 2024 (CEST)
  4. RELATIV (NUR BEI BEDINGTEN VERZWEIGUNGEN VERFÜGBAR):
    • Ein Offset von -127..+128 wird übergeben für die Sprungadresse ausgehend vom PC (program counter).
  5. INDIREKT:
    • indirect (nur beim JMP-Befehl verfügbar): LO/HI wird übergeben, wo LO/HI der eigentlichen Sprungadresse abgeholt wird
    • indirect & indexed-Y (häufig verwendet): LO-Byte wird übergeben, HI=$00 also zeropage, dort wird LO/HI abgeholt, dann wird Y dazu addiert, dann wird damit der Operand abgeholt
    • indexed-X & indirect (selten verwendet): LO-Byte wird übergeben, HI=$00 also zeropage, dann wird X dazu addiert, damit wird LO/HI abgeholt, und mit dem dann schließlich der Operand