APPLICATIONSPROGRAMMATION ★ ASSO - Ein leistungsfähiger Labelassembler|CPC Magazin) ★

Asso (CPC Magazin)Applications Programmation
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Vielen Schneider-Besitzern reicht die Geschwindigkeit des Basics für manche Anwendungen einfach nicht mehr aus. Diese programmieren dann in Maschinensprache. Allerdings ist es recht mühselig, in Mnemonics geschriebene Programme in den für den Rechner verständlichen Maschinencode zu übersetzen. Dabei müssen allerlei Tabellen gewühlt oder Sprünge berechnet werden. Um dem abzuhelfen, präsentiert Ihnen das CPC Magazin nun ASSO, einen 2 Pass Rem Zeilen-Assembler. Ein Assembler übersetzt völlig selbständig die in Mnemonics geschriebenen Programme in Maschinencode und berechnet dabei Sprungadressen und anderes.

Eintippanleitung

Weil beim CPC 664 und 6128 einige Systemvariablen gegenüber dem CPC 464 in anderen Speicherbereichen angesiedelt wurden, muß ASSO durch Pokes erst an diese Rechner angepaßt werden. Diese Anpassung besorgt der ASSO.Loader selbst, nachdem er erfährt, auf welchem Computer ASSO laufen soll.

Tippen Sie das abgedruckte Listing sorgfältig ab und starten Sie es mit RUN. Der Rechner überprüft nun Zeile für Zeile die Richtigkeit der DATAs. Wird eine Fehlermeldung ausgegeben, so verbessern Sie bitte die als fehlerhaft deklarierte Zeile und starten anschließend erneut mit RUN. Finden Sie in der als fehlerhaft deklarierten Zeile keinen Fehler, so sollten Sie folgendes überprüfen:

  1. Ist die Prüfsumme korrekt?
  2. Wurden auch keine Zeilen ausgelassen?

Druckt der Rechner die Fehlermeldung TYPE MISMATCH IN 70, so haben Sie vermutlich in irgendeiner DATA-Zeile keine Hexzahl verwendet. Wenn die Zeile 70 als fehlerhaft deklariert wird, bedeutet das nicht immer, daß diese Zeile auch wirklich fehlerhaft ist; es kann sich auch um einen Folgefehler handeln. Taucht bei Ihnen ein TYPE MISMATCH auf, so tippen Sie PRINT ZE und der Rechner gibt Ihnen die gerade untersuchte Zeilennummer zurück. Uberprüfen Sie diese Zeile genauestens. Irgendwo muß sich ein Zeichen befinden, das nicht zum hexadezimalen Zeichensatz gehört, also nicht innerhalb der Zeichen von 0 bis 9 oder von A bis Fliegt. Oft wird versehentlich statt einer Null ein ”0" eingetippt. Verbessern Sie diese Fehler und starten Sie erneut mit RUN.

Durchläuft der Rechner alle Zeilen einwandfrei, so meldet er sich mit der Meldung ACHTUNG ABSAVEN. Anschließend wird das ASSO-Programm automatisch abgespeichert. Allerdings nicht in der Form wie im Listing, sondern als kompakter Maschinencode. Wollen Sie Ihr Listing sicherheitshalber auch noch im abgedruckten Format abspeichern, erledigen Sie das mit SAVE "ASSO.LST”. Das Programm befindet sich nun auf Diskette oder Cassette und kann von Ihnen benutzt werden.

Ladeanweisung

Bevor Sie ASSO laden, sollten Sie den Rechner durch gleichzeitiges Drücken von CTRL, SHIFT und ESC vollständig zurücksetzen. Das Programm kann dann ausschließlich durch folgenden Direktbefehl geladen werden: LOAD ”!ASSO”, 49152:CALL 49152:CLEAR

ASSO wird direkt in den Bildschirmspeicher geladen und durch CALL 49152 an die richtige Stelle umkopiert. Das Ausrufezeichen benötigen Sie, damit die Cassettenmel-dungen auf dem Bildschirm, die ja den Bildschirmspeicher verändern würden, unterdrückt werden. Sie sehen beim Laden also auch nicht das typische PRESS PLAY THEN ANY KEY oder LOADING ASSO BLOCK 1. Alle Meldungen des Cassettenrecorders werden radikal unterdrückt. Sie müssen nach Eingabe der oben erwähnten Befehlsfolge den Recorder an der richtigen Stelle starten. Als Besitzer eines Diskettenlaufwerkes brauchen Sie sich natürlich nicht mit solchen Problemen herumschlagen.

Sie dürfen obige Kommandos nur im Direktmodus ohne Programmzeile eintippen. Nach CALL und CLEAR befindet sich das Programm im richtigen Speicherbereich und Sie können ASSO benutzen.

Die Benutzung des Assemblers

Die Maschinenprogramme werden direkt im normalen Basiceditor in REM-Zeilen eingetippt. Dies hat mehrere Vorteile:

  1. Der Benutzer ist mit dem Basiceditor vertraut.
  2. Es ist nicht notwendig, eine eigene Editorroutine zu schreiben, die der Benutzer dann auch noch eintippen müßte.

Die Befehle müssen in Kleinschrift eingegeben werden. Auch eine Eingabe durch Doppelpunkt getrennt und in einer Zeile ist möglich.

Die Eingabe des REMs ist zwingend. Es kann auch nicht durch einen Apostroph ersetzt werden. Kommentare sind nicht erlaubt. Der Assembler versteht alle Standard-Z80-Befehle.

Um dem Rechner mitzuteilen, wo er anfangen soll zu as-semblieren, dient der Befehl ”go”. Der Rechner beginnt dann hinter dem Befehl REM go. Die Assemblierung wird gestoppt, wenn der Rechner auf eine Zeile trifft, der kein REM vorangestellt ist.

Es gibt außerdem noch den Pseudobefehi DB. Dahinter wird eine Zahl oder ein String angehängt. Er hat folgende drei Funktionen:

  1. Sollte eine 8-Bit-Zahl (Bereich 0 bis 255) hinter dem Befehl stehen, so wird an dieser Stelle das Byte eingefügt. Beispiel: db 100
  2. Sollte eine 16-Bit-Zahl (Bereich bis 65535) hinter dem Befehl stehen, so werden an dieser Stelle die beiden Bytes der Zahl abgelegt, und zwar wie in Maschinensprache allgemein üblich zuerst Low- und dann Highbyte. Beispiel: db 16000
  3. Außerdem ist es möglich, einen String hinter DB zu schreiben. Die ASCII-Werte des Strings werden dann der Reihe nach im Maschinenprogramm abgelegt. Beispiel: db"KARO"

Die Möglichkeiten der Gestaltung von numerischen Ausdrücken zeigt folgendes Beispiel: Id b,65 ist gleichwertig mit Id b,&41 oder Id b,&X100001 oder Id b,”A”. Zahlen größer als 255 können nicht binär eingegeben werden.

Labels

Oft ist es müßig, durch Zählen und Rechnen Sprungziele zu ermitteln. Deshalb bietet ASSO die Möglichkeit, Sprungziele mit Namen zu versehen, so daß man beim Aufruf nur diesen Namen angeben muß. Die Befehlsfolge Id a,5:dec a:jr nz 250 kann also durch Id a,5:@wiederhole :dec a:jr nz@wiederhole ersetzt werden. Allen Labels muß ein Klammeraffe vorangestellt werden.

Speichern, Laden, Drucken

Um ein REM-Zeilen-Assemblerprogramm abzuspeichern, können Sie das normale SAVE-Kommando benutzen. Zum Laden des Assemblerprogramms genügt der Befehl LOAD "NAME”. Ausgedruckt wird ein im Speicher befindliches Programm einfach mit LIST #8.

Der Assembliervorgang

Der Assembliervorgang wird durch den Befehl CALL 3734, Startadresse, Bildschirmausgabe eingeleitet. Dabei ist Startadresse die Speicherstelle, wohin das Programm assembiiert werden soll. Der Parameter Bildschirmausgabe liegt im Bereich von 0 bis 1. Null bedeutet, daß beim As-semblieren das Programm nicht auf dem Bildschirm ange-
zeigt werden soll, eins bedeutet, daß eine Ausgabe erfolgen soll. Werden die Parameter weggelassen, so wird der alte Wert übernommen. Beim ersten Assembliervorgang müssen jedoch alle Wert angegeben werden.

Die Mnemonics werden jetzt in zwei Durchgängen assembiiert. Ist die Bildschirmausgabe gewünscht, so wird während des ersten Durchlaufes das Programm und die in Bytes übersetzten Mnemonics angezeigt. Wenn ASSO nun auf einen Labelaufruf stößt, kann er zu diesem Zeitpunkt noch nicht wissen, welche konkreten Werte in diese Speicherstellen gehören. Deshalb schreibt er einfach den vorherigen Inhalt der bewußten Speicherstellen auf den Bildschirm.

Erst in Durchgang 2, der übrigens auch bei längeren Programmen nur Sekundenbruchteile in Anspruch nimmt, belegt er diese Speicherstellen mit den richtigen Werten. Diese den Labels entsprechenden Werte kann man beim erneuten Assemblieren dann ablesen. ASSO ist recht schnell, er schafft 0.5K Quellcode pro Sekunde. Auch Kommentare sind erlaubt, nur müssen diese als Label "maskiert" sein (z.B.: @ hier beginnt der Hauptteil). Soll der Assembler ganz langsam arbeiten, so hält man die Escape-Taste und gleichzeitig irgendeine andere Taste mit Repeat-Funktion gedrückt.

Noch eine Warnung: Für Variablen wird keine Haftung übernommen; beim Assemblieren können sie nämlich überschrieben werden. Den Befehl NEW sollte man möglichst mit DELETE ersetzen, er würde den Assembler nämlich weglöschen. Sicherer sind hingegen die von ASSO erzeugten Maschinenprogramme: Der Assembler setzt HIMEM selbständig so weit herab, daß sie vor NEW sicher sind.

Assemblerfehlermeldungen

Fehlermeldungen haben immer die Form: Err x in y. y ist dabei die Zeile, in welcher der Fehler aufgetreten ist, und x die Art des Fehlers: m - Memory Error:

Dieser Fehler wird angezeigt, wenn die Startadresse für das Maschinenprogramm zu groß oder zu klein ist, beim Assemblieren die Speicherobergrenze erreicht wird oder wenn der zur Verfügung stehende Speicherplatz zu klein für die Label-Bearbeitung ist.

n -Number Error: Ein numerischer Ausdruck ist zu groß oder nicht zulässig.

s -Syntax Error: Es sollte ein unbekannter Befehl assembiiert werden, oder es wurde ein sonstiger syntaktischer Fehler begangen,

r - Relative Jump Error: Diese Fehlermeldung tritt auf, wenn versucht wird, mit einem relativen Sprung weiter als erlaubt zu springen.

@ - Label Error: Hier wurde ein Label nicht gefunden.

Floppybesitzer aufgepaßt!

Bei Floppybesitzern geht ja einiges an Speicherplatz verloren. Sie müssen darauf achten, daß beim Assemblieren nicht in den Floppybereich geschrieben wird.

Bei Fragen wenden Sie sich direkt an den Autor:

Harry Wirth , CPC Magazin

★ PUBLISHERS: CPC Magazin , CPC Magazin Codex
★ YEAR: 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC MAGAZIN 1985 1986
★ AUTEUR: Harry Wirth
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
» Asso    (CPC  Magazin)    GERMANDATE: 2020-05-21
DL: 197
TYPE: ZIP
SiZE: 7Ko
NOTE: Extended DSK/40 Cyls
.HFE: Χ

» Asso    (CPC  Magazin)    LISTING    GERMANDATE: 2021-02-02
DL: 215
TYPE: PDF
SiZE: 1109Ko
NOTE: 5 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » RSX - Programm-Tracer (CPC Amstrad International)
» Applications » Yardimci Bi̇r Program (Sizin Amstrad)
» Applications » Z80 Simulator
» Applications » Pascal/MT+ (Pascal MT+80)
» Applications » Tracer (Compute Mit)
» Applications » DazzleStar Disassembler
Je participe au site:
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 613 millisecondes et consultée 1157 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.