APPLICATIONSPROGRAMMATION ★ CPC-Assembler v2.0 ★

CPC-Assembler v2 (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 ★ 

Allen Lesern unserer Serie “Also sprach die Maschine“ möchten wir dieses Programm besonders empfehlen: Auch wer sich bislang noch nicht mit Maschinensprache beschäftigt hat, findet hier ein komfortables Werkzeug, mit dem er seine ersten Schritte unternehmen kann, ohne die gewohnte BASIC-Umgebung zu verlassen.

In den nächsten Folgen unserer Serie wird der Umgang mit dem Assembler noch genau erklärt werden; die folgende Programmbeschreibung richtet sich vor allem an Leser, die bereits über etwas Erfahrung verfügen. Im wesentlichen handelt es sich bei dem Programm um eine vollkommen neu gestaltete Version des bereits vor zwei Jahren veröffentlichten CPC-Assemblers; der besondere Dank des Autors gilt allen Lesern, die durch zahlreiche Anregungen und Verbesserungsvorschläge zur Version 2.0 beigetragen haben. Hier nun der Leistungsumfang des Assemblers, mitsamt den neuen Features:

  • Assemblierung des Quellcodes wahlweise aus dem Speicher oder direkt von Diskette. Dabei können im Prinzip beliebig lange Quellprogramme übersetzt werden.
  • Ausgabe des Listings auf dem Bildschirm oder Drucker.
  • Speichern des Maschinencodes als Binärfile, BASIC-Lader oder COM-Datei (ausführbar unter CP/M).
  • Neue Assemblerdirektiven ermöglichen das Ablegen des Maschinencodes in einem beliebigen Speicherbereich, unabhängig von der Startadresse. Weiterhin wird die Programmierung von RSX-Befehlen unterstützt, und mit den Befehlen DB und DW können Parameterlisten übergeben werden.
  • Bessere Labelverwaltung durch eine Maschinenroutine; auch doppelt definierte Label werden jetzt als Fehler erkannt.
  • ASCII-Zeichen können direkt im Operanden angegeben werden, z.B. LD A,“X“.

Weiterhin wurden noch einige kleinere 'Unpäßlichkeiten' beseitigt: Auch der Befehl LD SP,nn wird jetzt korrekt übersetzt, und mit der DM-Anweisung können bis zu 80 Zeichen übergeben werden.

Hinweise zum Abtippen

Alle REM-Kommentare können entfallen, da die Zeilen keine Sprungziele darstellen. Zu beachten ist insbesondere der umgekehrte Schrägstrich (Ganz-
zahldivision) und die korrekte Eingabe aller Leerzeichen im Initialisierungsteil.

Das Quellprogramm

Eine Quellprogrammzeile setzt sich aus folgenden Elementen zusammen:

  • Zeilennummer
  • REM-Apostroph
  • Label
  • Befehl
  • Operand
  • Kommentar

Die Zeilennummem und speziell der REM-Apostroph sind nur zwingend notwendig, wenn der Sourcecode direkt im Speicher übersetzt werden soll. Ihm steht in diesem Fall der BASIC-Zeilennummernbereich 1 - 9999 zur Verfügung, der Assembler selbst muß ab Zeile 10000 beginnen. Diese Methode ist insbesondere bei kurzen und mittleren Maschinenprogrammen günstig, da der Quelltext mit MERGE zum Assembler dazugeladen und mit dem BASIC-Editor direkt bearbeitet werden kann.

Wird von Diskette bzw. Kassette as-sembliert, so muß der Quellcode als ASCII-Datei vorliegen, kann also mit einem beliebigen Editor geschrieben werden. Wenn die Zeilen nicht numeriert sind, ergänzt der Assembler von sich aus im Listing eine fortlaufende Numerierung. Falls Zeilennummern angegeben werden, so müssen sie am Anfang der Zeile stehen (keine führenden Blanks!).

Label als symbolische Konstanten oder Sprungziele beginnen mit einem Buchstaben und sind maximal 6 Zeichen lang. Groß- und Kleinschreibung wird nicht unterschieden. Label, Befehl und Operand müssen durch mindestens ein Leerzeichen getrennt sein; der Operand selbst darf jedoch keine Blanks enthalten, außer als ASCII Zeichen zwischen Anführungsstrichen.

Im Operanden können Werte in der CPC-spezifischen Weise als binäre, hexadezimale oder dezimale Zahl angegeben werden; weiterhin sind Labels und ASCII Zeichen in Anführungsstri-
chen erlaubt. Bei Dezimalzahlen akzeptiert der Assembler auch negative Werte, sie werden automatisch ins Zweierkomplement umgerechnet. Der Offset bei indizierter Adressierung wird dezimal mit Vorzeichen angegeben, z.B. LD (IX-10),A. Auf Restart-Befehle muß die dazugehörige Adresse folgen, also z.B. RST &18. Bei relativen Sprüngen (JR und DJNZ) wird die Zieladresse absolut angegeben, der Assembler berechnet daraus automatisch die Sprungdistanz.

Die Quellcode-Zeilen können weiterhin mit einem Kommentar versehen werden, der durch ein Semikolon abgetrennt wird.

Die Assemblerdirektiven

  • ORG < adresse > Bestimmt die Start- und auch die Spei-cheradressse des Maschinenprogramms, wenn keine PUT-Anweisung folgt.
  • PUT < adresse > Bestimmt, ab welcher Adresse der Maschinencode im Speicher abgelegt werden soll. Diese Anweisung muß direkt auf ORG folgen. Ein CP/M-Programm könnte z.B. auf folgende Weise beginnen:
    10 ORG &100
    20 PUT &A000
  • < label > EQU < wert > Weist einem Label einen Zahlenwert zu. Diese Anweisung muß erfolgen, bevor das Label im Quellprogramm benutzt wird.
  • DB < Liste von 1-Byte-Werten > Schreibt die an angegebenen Bytes ins Maschinenprogramm. Die Werte werden durch Komma getrennt.
    Beispiel: DB 10,&FF,“z“
  • DW < Liste von 2-Byte-Werten > Schreibt die angegebenen Werte ins Maschinenprogramm, Syntax wie bei DB.
  • DM < “Text“ > Schreibt die ASCII-Codes der Zeichen ins Programm. Der Text muß durch Anführungsstriche eingeschlossen werden.
    Beispiel: DM “PC International“
  • DMX < “Text“ > Wie DM, setzt aber zusätzlich Bit 7 des letzten Zeichens auf 1, was insbesondere bei der Eingabe von RSX-Befehls-namen nützlich ist (Endmarkierung).
  • DS < Speicherplatz in Bytes > Reserviert einen Bereich des Maschinencodes für Variablen bzw. Tabellen.
  • END Beendet die Assemblierung. Falls keine END-Anweisung erfolgt, übersetzt der Assembler bis zum Ende des Quellfiles.

Anmrerkung: Anstatt der Befehle DB, DW, DM und DS können auch die bei manchen Assemblern üblichen Anweisungen DEFB, DEFW, DEFM und DEFS benutzt werden.

Der Programmablauf

Nach dem Start des Assemblers mit RUN wird zunächst nach dem Namen des zu übersetzenden Programms gefragt. Wenn Sie hier nur ENTER bzw. RETURN drücken, erscheint der Diskettenkatalog auf dem Bildschirm. Falls sich das Quellprogramm im Speicher befindet (das heißt eine Zeilennummer kleiner 10000 existiert), so wird dieses übersetzt, ansonsten liest der Assembler die Programmzeilen aus der Disketten- bzw. Kassettendatei mit dem angegeben Namen. Durch eine weitere Abfrage wird entschieden, ob das bei der Assemblierung erstellte Listing auf dem Bildschirm oder Drucker ausgegeben werden soll.

Das Maschinenprogramm steht nach einem Durchgang ('Pass') komplett im Speicher. Der Assembler kann jedoch bei Vorwärtssprüngen den Code im Listing noch nicht vollständig angeben; diese Zeilen werden mit einem Stern markiert und weiterhin provisorisch Nullbytes eingesetzt. Falls ein vollständiges Listing des Objektcodes gewünscht wird, so kann ein zweiter Durchgang gestartet werden. Ansonsten besteht die Möglichkeit, den Quellcode als ASCII-Datei zu sichern (nur, falls er sich im Speicher befindet) oder den Maschinencode als AMSDOS-Binärdatei, COM-File oder BASIC-Lader zu speichern; der Assembler übernimmt dabei die Generierung der DATA-Zeilen. Die Dateien werden bei der Aufzeichnung automatisch mit den Endungen .ASM, .BIN, .COM oder .BLD versehen.

Die Speicherverwaltung

Der Assembler setzt HIMEM auf &7FFE,der Bereich darüber wird als fester I/O-Puffer für Lade- und Speicheroperationen eingerichtet und bei folgenden Gelegenheiten benutzt:

  • &8000-&87FF: Beim Lesen des Quellfiles vom Datenträger.
  • &8800-&8FFF: Beim Saven des Quellcodes und bei der Erzeugung einer COM-Datei bzw. eines BASIC-Laders.

Damit steht der Bereich ab &9000 für den Maschinencode zur Verfügung. HIMEM kann jedoch bei Bedarf durch Änderung des Variablen wertes HiBas in Zeile 10080 noch weiter herabgesetzt werden. Weiterhin belegt der Assembler mit einer kleinen Maschinenroutine etwa 80 Bytes im unbenutzten Datenbereich der Tonhüllkurven (ab &B70A beim CPC 464 bzw. ab &B3A6 beim 664/6128). Auch das läßt sich ändern, indem der Variablen cadr in Zeile 10100 ein anderer Wert zugewiesen wird.

Abschließend noch ein Hinweis für die Freunde der Spieleprogrammierung in Assembler: Bei den Listings aus dieser Serie sollten die Doppelpunkte nach den Labels durch Leerzeichen ersetzt werden; weiterhin müssen Hexzahlen auf CPC-übliche Weise gekennzeichnet werden, damit der Assembler das Programm übersetzen kann.

(M. Uphoff/cd) , CPCAI

★ PUBLISHER: CPC Amstrad International
★ YEARE: 1987 , 1988
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC AMSTRAD INTERNATIONAL 1988
★ AUTHOR: M. Uphoff
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» CPC-Assembler  v2    (CPC  Amstrad  International)    GERMANDATE: 2021-08-09
DL: 165
TYPE: ZIP
SiZE: 9Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Applications » Makroassembler DZ80 2.0X CP/M
» Applications » CPC 464 Assemblerkurs (CPC Amstrad International)
» Applications » Amstrad Disassembler (Your Computer)
» Applications » Apprentissage de L'Assembleur volume 2
» Applications » Disassembliertem
» Applications » Compilateur Assembleur : mnemonic
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 415 millisecondes et consultée 727 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.