APPLICATIONSPROGRAMMATION ★ EDITOR-ASSEMBLER ★

Editor-AssemblerApplications 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 ★ 

Ein vollständig in BASIC geschriebener Editor-Assembler für den Schneider CPC 464, der Labels verarbeitet und relative Sprünge berechnet. Natürlich versteht er auch alle Mnemoniks in ihrer allgemein üblichen Schreibweise (maximal 650 Zeilen und 200 Label).

Der Editor

Die Eingabe

Das zu schreibende Assemblerprogramm wird in ähnlicher Weise wie ein BASIC-Listing eingegeben, wobei die Zeilennummer lediglich dazu dient, die Reihenfolge der Befehlskürzel (Mnemoniks) festzulegen, in der sie später assembliert werden sollen. Jede Zeile enthält genau ein Mnemonik. Ist das erste Zeichen einer Eingabe eine Ziffer, wird die Eingabe als Zeile interpretiert. Die Zeilennummer darf Werte zwischen 1und 99999 haben. Auf die Zeilennummer folgt grundsätzlich das Mnemonik und danach, falls erforderlich, durch ein Leerzeichen getrennt, der oder die Operanden (zum Beispiel ,,10 LD A,2“).

Die erste Zeile eines Listings muß die Assemblerdirektive ORG ( = ORIGIN) enthalten. Mit ihr wird später der Beginn des Maschinencodes festgelegt. Solange der Maschinencode nicht abgesaved wurde, hat ORG keine Funktion. Ein ,,ORG 40000“ bewirkt beispielsweise, daß der Maschinencode beim absaven so assembliert wird, daß er später bei der Adresse 40 000 beginnt. Um eine Zeile des Listings zu löschen, muß nur die zugehörige Zeilennummer eingegeben werden.

Die Editor-Befehle LIST:

Gebrauch wie in BASIC. Dient zum Auflisten des Assemblerlistings.

ASSEMBLE: Die Mnemoniks werden der Reihe nach assembliert, das heißt, sie werden in den Maschinencode übertragen. Danach fragt er, ob das as-semblierte Listing ausgegeben werden soll. Bei Eingabe von „j'‘ steht links die hexadezimale Adresse, dann ein bis vier Byte, die Übersetzung der Mnemoniks, und dahinter die zugehörige Zeile. Andernfalls wird direkt, sonst nach dem Listing, die Labeltable ausgegeben, das heißt alle Label werden mit ihren Werten aufgelistet.

RENUM: Gebrauch wie in BASIC. Dient zum Umnumerieren der Zeilennummern.

RUN: Ruft ein Maschinenprogramm auf, das bei der Adresse beginnt, auf die das Label zeigt. Das ist gewöhnlich die Adresse A000hex. Befindet sich kein korrekt assemblierter Code im Speicher, wird mit der Meldung ,,Kein Code im Speicher“ unterbrochen.

SAVE “Name'M: Das Assemblerlisting wird unter dem Namen ,,Name“ auf Kassette gespeichert. SAVE “Name”,c:

Das Assemblerlisting wird assembliert, im Bezug auf die Startadresse, auf die die ORG-Direktive zeigt. Dann wird der Code unter dem Namen ,,Name“ auf Kassette gespeichert.

LOAD “Name”: Ein Assemblerlisting mit dem Namen „Name“ wird in den Speicher geladen. Ein eventuell schon vorhandenes Listing wird dabei gelöscht.

NEW: Der Editor-Assembler wird erneut mit RUN gestartet, wobei alle Information verlorengeht.

BASIC: Dieser Befehl bewirkt einen Rücksprung nach BASIC. Mit der Funktionstaste 0 bzw. 1 kann man in den Assembler zurückkehren. Der Editor enthält keine EDIT-Befehl. Man kann ihn aber voll durch den Copy-Cursör ersetzen. Bei einem List-Vorgang kann das Listing durch Gedrückthalten der Taste „S“ angehalten werden.

Der Assembler

Der Assembler versteht alle Mnemoniks in ihrer üblichen Schreibweise. Allerdings sind einige Dinge erlaubt, die eigentlich falsch sind. Der Assembler versteht den Mnemonik aber trotzdem richtig.

Die Label

Ein Label ist eine Zeichenkette, der man irgendwo im Programm einen Wert zuweist. Das erste Zeichen muß ein : sein, gefolgt von bis zu zehn Zeichen (,,:LABEL“). Ein.Label kann dann an Stelle einer Zahl als Operand gebraucht werden. Um einen Label zu definieren, wird er zwischen Zeilennummer und dem zugehörigen Mnemonik eingegeben (durch ein Leerzeichen getrennt).

Es gibt drei Möglichkeiten ein Label zu definieren: Gewöhnliche Label: Einem gewöhnlichen Label wird beim Assembliervorgang die aktuelle Adresse zugewiesen.

EQU: Steht hinter dem Label keine Mnemonik, sondern die Assemblerdirektive EQU, dann wird dem Label der Wert zugeordnet, der im Operandenfeld von EQU steht. Dies darf kein weiteres Label sein.

Bei den obigen Labeltypen darfein Label nur einmal im ganzen Assemblerlisting definiert werden. Eine Ausnahme ist der dritte Label-typ.

DEFL: Wie bei EQU wird bei DEFL dem Label der Wert nach DEFL zugewiesen. Im Gegensatz zu EQU kann ein solcher Label aber im Laufe eines Listings umdefiniert werden. Dieser Labeltyp muß aber dafür schon mal definiert worden sein, bevor er verwendet wird.

Label, die durch EQU oder DEFL definiert wurden, werden nicht durch das ORG-Kommando beeinflußt. In der Labeltable am Ende eines assemblierten Listing sind EQU-Label mit einem vorangestellten DEFL-
Label mit einem ,,x“ gekennzeichnet. Das Label “ ” ist immer vorhanden und zeigt auf den Anfang des Maschinencodebereichs (A000hex).

Numerische Operanden

Ein numerischer Operand kann folgendermaßen aus-sehen: eine Zahl:

dezimal (zum Beispiel 10) = 10

hexadez. (zum Beispiel &A) = 10

binär (zum Beispiel &x1010) - 10

ein Label:

zum Beispiel: LD HL,:LABEL ein String:

Es wird der ASCII-Code verwertet. Zum Beispiel LD A, “B” entspricht LD A,66 LD BC, “OK” entspricht LD BC,20299 (20299 = 79 * 256 + 75)

In einem Operanden darf keine Rechenoperation durchgeführt werden.

Assemblerdirektiven

Neben den Mnemoniks versteht der Assembler noch folgende sogenannte Assemblerdirektiven :

DEFB n: Weist dem aktuellen Byte den Wert n zu.

DEFW nn: Weist den aktuellen zwei Bytes die Adresse nn zu. (Übliche Reihenfolge LByte, HByte)

DEFS n: Weist den folgenden n Bytes den Wert 0 zu.

DEFM n: Den folgenden Bytes werden die ASCII-Werte des Strings zugewiesen.

END: Bei diesem Kommando bricht der Assembler das Assemblieren ab, auch wenn noch Zeilen folgen. Relative Sprünge In ,,JR“ und ,,DJNZ“ werden relative Sprünge benutzt. Weist man ihnen statt des numerischen Operanden einen gewöhnlichen Label zu, berechnet der Assembler den relativen Sprung zu der Adresse, auf die das Label zeigt.

Die Fehlermeldungen

Integer out of ränge - Zeilennummer außerhalb des erlaubten Bereichs.

Syntax error - Eingabe kein Kommando oder Zeile. Improper argument — Falsches Argument bei einem Mnemonik.
Command missing - eine Zeile ohne Mnemonik wurde eingegeben.

Label too long - ein Labelname überschreitet die maximale Länge.

ORG missing - die erste Zeile eines Programms enthält kein ORG.

Type mismatch - fehlerhafter Operand.

Invalid command — ein Mnemonik oder eine Assemblerdirektive wurde falsch gebraucht.

Unknown command — ein unbekanntes Mnemonik. Label already defined — ein EQU oder ein gewöhnlicher Label wurde zum zweitenmal definiert.

Machine-Code too long -der Maschinencode ist zu lang für den Speicher.

Label not defined - es wurde ein nicht definierter Label benutzt.

Die Grenzen des Assemblers

Der Assembler kann maximal 650Zeilen und 200 Label verarbeiten, da das Programm selbst sehr lang ist. Es könnte aber auch sein, daß das Programm vorher mit „Memory full“ unterbrochen wird. Der Maschinen-code darf eine Länge von knapp 3 KByte erreichen, sonst würde ein Teil des BASIC-RAMs überschrieben. Es ist zu beachten, daß, bevor man einen Maschinencode von Kassette lädt, der Speicher zurückgesetzt worden ist, da der Computer sonst mit „Memory full“ aussteigt.
Ein in BASIC geschriebener Editor-Assembler kann selbstverständlich nicht die Geschwindigkeit eines Assemblers in Maschinensprache erreichen. Die Arbeitsweise eines Assemblers ist in BASIC jedoch viel leichter verständlich.

Mark Beinker , HC

★ PUBLISHER: Mein Home-Computer
★ YEARE: 1985 , 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ AUTHOR: Mark Beinker
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Editor-Assembler    (Mein  Home-Computer)    GERMAN    LISTINGDATE: 2023-02-02
DL: 85
TYPE: PDF
SiZE: 2821Ko
NOTE: Uploaded by CPCLOV ; 9 pages/PDFlib v1.6

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

Lien(s):
» Applications » Compilateur Assembleur : mnemonic
» Applications » Antisoft Z80 Assembler
» Applications » Z80 Assembler
» Applications » Z80 Disassembler (Computing With the Amstrad)
» Applications » Super Power ADM - Assembler Disassembler and Machine Code Monitor
» Applications » Autoformation à l'Assembleur
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» 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 188 millisecondes et consultée 339 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.