Assemblerprogrammierung


[ Antworten ] [ Ihre Antwort ] [ Forum www.sharp-pc-1600.de ]

Abgeschickt von Klaus am 12 November, 2006 um 15:50:45

Leider ist hier im Forum nicht allzu viel los. Ich werde mal meine Erfahrungen mit Assembler-Programmierung posten, und hoffe auf Erweiterungen/Ergänzungen.

Der Maschinensprachenbereich beginnt bei &C0C5, die Größe wird über

NEW "S0:",nnn

wobei nnn die Speichergröße darstellt, festgelegt.
Parameter werden im Registerpaar "DE" übergeben, das MSByte in D, die 8 niederwertigen Bits in E.
Beendet wird eine Routine über "RET" (&C9). Ändert die Rountine den Wert des Parameters, so muss anscheinend das Carry-Flag vor dem RETURN gesetzt werden (SCF und dann RET).


Beispiel: Bildung des 1-er Komplements des Parameters (invertieren).
Da der Parameter 16 Bit hat, der Prozessor aber nur 8 Bit, wird
(Das AF-Registerpaar wird gesichert; eigentlich ist diese Sicherung überflüssig)

Befehl Operand Code Kommentar

PUSH AF &F5 ;AF sichern
LD A,D &7A ;MSB nach A laden
CPL &2F ;A Komplementieren
LD D,A &57 ;Komplement zurück nach D
LD A,E &7B ;LSB nach A laden
CPL &2F ;Komplementieren
LD E,A &5F ;invertiertes LSB zurückkopieren
POP AF &F1 ;Am Anfang gesicherte Flags und A-Reg wiederherstellen
SCF &37 ;Carry Flag setzen, damit Änderungen am Parameter wirksam werden
RET &C9 ;Return

Hat man den entsprechenden Maschinensprachenbereich reserviert, so kann das Programm hineingePOKEd werden (Beginn bei &C0C5). Gestartet wird das Programm dann folgendermaßen:

K=1023
CALL &C0C5,K
PRINT K

Wie gesagt freue ich mich über Ergänzungen, Fragen, Verbesserungen...



Antworten:



Ihre Antwort

Name:
E-Mail:

Subject:

Text:

Optionale URL:
Link Titel:
Optionale Bild-URL:


[ Antworten ] [ Ihre Antwort ] [ Forum www.sharp-pc-1600.de ]