APPLICATIONSPROGRAMMATION ★ Assembler - Basic ★

ASSBasic (CPC Amstrad International)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 ★ 

»Assembler?
- Kennen wir. Ist doch nichts Neues.  
- Aber was soll denn ASSEMBLER BASIC sein ... ? «

Dies läßt sich am einfachsten auf die Art der bekannten Waschmittelreklame beantworten: Herkömmliche Assembler verwenden in der Regel nur den Basic-Editor zum Eingeben und Korrigieren des Quellcodes. Die Befehle werden in REM-Zeilen

abgelegt und dann vom Assembler Buchstabe für Buchstabe gelesen. Im ASSEMBLER BASIC dagegen bleibt auch der Basic-Interpreter nicht länger arbeitslos: Sämtliche Assembler-, Pseudo- und andere Befehle werden nämlich als echte Basic-befehle zur Verfügung gestellt.

Daß dies enorme Vorteile mit sich bringt, dürfte wohl jedem sofort einleuchten: Endlich können Assembler-Programme genauso bequem und frei eingegeben werden wie vom Basic her gewohnt. 6-Buchstaben-Labels, lästige REM-Striche und ähnliche Ärgernisse gehören nun endlich der Vergangenheit an.

Doch damit genug der Vorrede, kommen wir zur Sache: Wie wird nun unter ASSEMBLER BASIC konkret programmiert? — Zunächst einmal gehen wir davon aus, daß Sie wissen, wie man mit einem »normalen« Assembler umgeht, so daß wir uns hier auf die wichtigsten Unterschiede beschränken können:

Wie oben bereits erwähnt, sind alle Assembler- und Pseudobefehle wie echte Basicbefehle zu behandeln, Ihre Schreibweise ist bis auf zwei Ausnahmen wie üblich: EX AF,AF' muß durch EX AF, AF' ersetzt werden, die inkonsequente Bezeichnung JP (HL)durch JP HL (ebenso bei IX und IY). Bei RST-Befeh-len wird die Sprungadresse angegeben, also z.B. nichtRST 5, sondern RST &28.

Zusätzlich zu den üblichen Pseudobefehlen ORG, EQU, DB, DW, DM und DS gibt es noch DR und COM. DR arbeitet wie DM, allerdings wird zum ASCII-Wert des letzten Buchstabens &80 addiert (z.B. für RSX-Befehle). COM hat dieselbe Funktion wie REM, jedoch wird der Text auch als Kommentar im Assemblerlisting ausgegeben.

Im Direktmodus werden die Befehle CALL, OUT, AND, OR und XOR wie üblich interpretiert. Sie sollten daher nie direkt z.B. CALLZ, adr eingeben, schon gar nicht, wenn z=0 ist... Labels können an beliebiger Stelle gesetzt werden und gelten für den nächsten Assembler- oder Pseudobefehl. Labels sind Variablen; man beachte daher die Regeln für die Zeichenauswahl.

Um Ihnen einen Eindruck zu vermitteln, wie unter ASSEMBLER BASIC der Quellcode aussehen kann, haben wir weiter unten ein kleines Beispielprogramm abgedruckt, das Sie auch später zum Ausprobieren verwendenkönnen.

Nun ist es an der Zeit zu erklären, wie denn solch ein Quellcode eigentlich assembliert wird:

Wenn Sie Ihr Assembler-Programm mit RUN starten, so läuft es wie ein Basic-Programm ab. Alle Befehle werden ganz normal ausgeführt. Sobald der Interpreter aber einen Assemblerbefehl antrifft, wird sein Maschinencode berechnet und an der richtigen Stelle abgelegt. Trifft er auf ein Label, so wird die Real-Variable, die den selben Namen hat, mit der aktuellen Adresse für den MCode belegt. Dies ist notwendig, weil der Interpreter innerhalb eines Assemblerbefehles alle Labels als Variablen ansieht.

Dieses Verfahren mutet vielleicht primitiv an, hat aber den großen Vorteil. daß Sie mit ganz normalen Basic-Befehlen praktisch überall eingreifen können. Z.B. werden Macrodefinitio-nen mit Unterprogrammen oder FOR-NEXT-Schleifen zum Kinderspiel.

Die ganz Schlauen unter Ihnen werden bereits gemerkt haben, daß das eben beschriebene Verfahren einen ganz großen Haken hat: Bei einem Vorwärtssprung nämlich hat die Label-Variable, wenn der MCode fürden Sprungbefehl abgelegt wird, noch gar nicht den richtigen Wert. Die Lösung jedoch liegt auf der Hand: Man läßt das Programm einfach zweimal ablaufen, aber ohne dazwischen die Variablen zu löschen. Und damit Sie dies nicht selbst machen müssen, geben Sie statt RUN einfach ASS ein.

Der Befehl ASS kann noch mehr als nur das Programm zweimal durchlaufen lassen: Er setzt die aktuelle Adresse des MCodes auf den Wert HIMEM +1 (falls Sie versehentlich ORG vergessen), und er nimmt mit ASS # stream die Streamnummer für das Assemblerlisting entgegen (ASS #9 muß wie LIST #9 mit OPENOUT eingeleitet werden). Möchten Sie kein Assemblerlisting, so geben Sie nur ASS ein.

Im ersten Druchgang macht der Assembler nur »Trockenübungen «. Er berechnet zwar die MCodes der Befehle, legt diese abr noch nicht ab. Außerdem ermittelt er die maximalen Längen der Labels, Befehle u.a. für das Assemblerlisting (nur falls diese zu lang sind, was nur sehr selten vorkommt, gibt er vor Beginn des zweiten Durchgangs ein »Line too long« aus). Nach dem ersten Durchgang gibt der Rechner Start- und Endadresse(n) bekannt und wartet auf Ihr Einverständnis (beliebiger Ta--:endruck bzw. ESC). Im zweiten Durchgang wird dann der MCode endgültig abgelegt und das Assemblerlisting ausgegeben. Um den Assembler mit seinen zwei Durchgängen nicht durcheinanderzubringen, wird CONT nach Break oder Programmende gesperrt.

Bevor es nun ans Abtippen geht, möchten wir Ihnen noch den letzten Befehl von ASSEMBLER BASIC vorstellen, den Befahl DAT: Hängen Sie ein A an und Sie wissen, worum es geht, nämlich um einen sehr nützlichen DATA-Zeilen-Generator. Im Gegensatz zu den bekannten Vertretern seiner Art kommt dieser jedoch ohne den lästigen Umweg über Kassette oder Diskette aus. Allerdings müssen Sie auf Checksums verzichten, da diese außer bei Veröffentlichungen überflüssig sind. Es werden auch nur die DATA-Zeilen erzeugt, nicht aber das eigentliche Ladeprogramm (dies können Sie sicherlich problemlos selbst erstellen). Der Befehl hat die Form:

DAT startadr., endadr., (startzeile), (bytes pro zeile)

Doch nun wollen wir Sie nicht mehr länger auf die Folter spannen, daher geht es gleich zum Abtippen des Programms:

Damit im Betrieb möglichst wenig Schwierigkeiten mit der Speicherplatzbelegung auftreten, wird ASSEMBLER BASIC unterhalb von Lomem (das Gegenstück zu Himem) abgelegt. Daher müssen folgende Befehle vor dem Abtippen oder Laden des Basic-Laders unbedingt eingegeben werden:

POKE &AE80,12:POKE &AE82,13:NEW

Ohne diese Befehle würde der Basic-Lader nämlich in seinen eigenen Programmzeilen »herumpoken«.

Lassen Sie nun den Basic-Lader ablaufen und speichern Sie den so erzeugten Maschinencode ab. Das betriebsfertige Programm wird einfachmit RUN »assbasic« gestartet. DerRechner meldet sich mit

ASSEMBLER BASIC 1.0

zurück und Ihrem ersten Assemblerprogramm steht damit nichts mehr im Wege.

Viel Spaß dabei!

T. Kochmann , CPCAI

★ PUBLISHER: CPC Amstrad International
★ YEAR: 1987
★ CONFIG: ???
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC AMSTRAD INTERNATIONAL 1987
★ AUTHOR: Thomas Kochmann
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» ASSBasic    (CPC  Amstrad  International)    GERMANDATE: 2022-08-03
DL: 91
TYPE: ZIP
SiZE: 8Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Applications » Maske (CPC Amstrad International)
» Applications » MASKGEN : Maskengenerator
» Applications » Quickmask
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» 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 584 millisecondes et consultée 364 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.