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...