11.4. Assembler/Disassembler history menue Letztmalig dran rumgefummelt: 13.11.19 17:00:07
Assembler sind nach wie vor die einfachsten Hochsprachen und liegen neben direkter Binär sowie auch Hexadezimalcodierung am dichtesten an der Maschine. So sind sie selbstverständlich auch abhängig vom jeweiligen Zielprozessor.

die Elektronikseiten

Logo für die Assembler/Disassambler

inhaltlich auf korrektem Stand - evtl. partiell unvollständig ;-)

Wissen für Fortgeschrittene der Informatik

Informatik-Profi-Wissen

  1. Assembler - Prinzip, Aufgabe und Funktion
  2. Assembler für verschiedene Plattformen
  3. Disassemblieren vorhandener HEX-DUMPS
  4. Disassembler
  5. Verwandte Themen

1. Assembler-Prinzip history menue scroll up

In der Assemblersprache werden die einzelnen Maschinenbefehle durch Textzeilen formuliert. Jeder Befehl entspricht einer Zeile, in, der der Operationscode und die Operanden durch Abkürzungen geschrieben werden. Statt, der Speicheradresse, p die der Maschinenbefehl gespeichert wird, bekommt die Assemblerzeile einen Namen (Marke). Da der Rechner jedoch nur Maschinenbefehle versteht, muss ein Assemblerprogramm in Maschinenbefehle umgewandelt werden. Dies realisiert der Assembler.

Aufbau einer Assemblerzeile

Eine Zeile Assembler-Quellcode kann wie folgt aufgebaut sein:

[<Zeilennr.>] [<Labelname>:] [<Befehl>] [<Parameter>[,<Parameter>[,...]]]  [;<Kommentar>]
100 MyLoop: INC   A ;sinnlose Zeile mit Nummer
JR MyLoop: ;Zeile ohne Nummer

Aufbau einer Assemblerzeile

Aufbau einer Assemblerzeile [TZ entspricht Trennzeichen, TAB entspricht Tabulatorzeichen, NL entspricht New Line (Zeichen für neue Zeile), CR entspricht Carriage Return (Zeichen für Wagenrücklauf), LF entspricht Line Feed (Zeichen für Zeilenwechsel)

  • Marke: frei wählbarer Name11-5 Zeichen (1. Zeichen =Buchstabe
  • Trennzeichen (TZ) zwischen Marke und Operator: (Doppelpunkt) 
  • Operator: Festgelegte Bezeichnung für einen Befehl
  • Trennzeichen zwischen Operator und Operanden: Leerzeichen oder Tabulator
  • Operanden
  Darstellung Erläuterung (Beispiele)
1. Zahlen: Dezimal 14 
  Oktal 14O oder 14Q
  Hexadezimal  die erste Ziffer darf kein Buchstabe A-F sein - wir beginnen also mit 'ner Vornull ;-)
25H aber 0A3H
2. Symbolische Größen Entspricht Marke oder definiertem Symbol
3. aktueller Stand des Speicherplatzzählers (Programcounter, PC) # Das. Zeichen # entspricht der Adresse„ in der das 1. Byte des Operationscodes steht
4: Zeichen im SIF-1000-Code 'A' oder'AX'  statt A bzw. X wird der entsprechende SIF-1000-Code abgespeichert
5. Registernamen: einfache Register

Doppelregister

A, B, C, usw.

DE, HL, IX, usw.

6. Ausdrücke: Zulässige Operationen + und -
 Satz: Die Anzahl der positiven minus der Anzahl der negativen verschiebbaren Symbole (Namen und  #) darf nur 0 oder, 1 sein:

Beispiele:

  • A + 5 erlaubt (Anzahl =1)
  • A + # - C erlaubt (Anzahl = 1)
  • A +.# nicht erlaubt (Anzahl = 2)
7. externe Adressen: P1  
  Programmname Zieladresse im Programm Pl.

Trennzeichen zwischen mehreren Operanden , (Komma) -

Trennzeiehen zwischen Operanden und Kommentar; (Semikolon) -Kommentar: beliebiger Text, der nicht mit verarbeitet wird

Zeilenabschluß: Neue Zeile (NL)

Wagenrückleuf (CR) 

Zeilenvorschub (LF)

Pseudoanweisungen

Pseudoanweisungen sind Anweisungen der Assemblersprache, die sofort bei der Übersetzung ausgeführt werden. Das Ergebnis wird in das Maschinencodeprogramm eingefügt. Die Pseudoanweisungen sind nicht in der Maschinensprache enthalten. Man benutzt sie zum Einfügen von Zahlen in das Programm sowie zur Steuerung des Assemblerablaufs.

Zahlen- und Textdefinitionen

Bytedefinition:  DB n Die Zahl n (8 Bit) wirst ins Programm eingefügt. 
Adressendefinition:  DA nn Die Zahl nn (16 Bit) wird ins Programm eingefügt, niederwertiger Teil zuerst

Textdefinition:

DB 'TEXT'

Die Zeichenkette TEXT wird in der Reihenfolge von links nach rechts ins Programm eingefügt

Bereitstellung von RAM Speicher im Programm MA: BER nn Im Programm werden nn Zellen unter der Adresse MA bereitgestellt
Programmorganisation
PN name Anfang eines Programms - vom Programmnamen sind nur 2 Zeichen signifikant.
END Ende des Programms
ORG nn per Speicherplatzzähler wird auf die Adresse nn gestellt - die nächste Anweisung kommt, in die Zelle nn.
SYMB: EQU nn dem Namen SYMB wird die Zahl nn zugeordnet. (Symboldefmition) Diese Zuordnung gilt für das gesamte Programm.
SYMB: DEF nn wie EQU wird dem SYMB die Zahl nn zugeordnet - die Zuordnung gilt aber nur bis zur nächsten DEF-Anweisung

Übersetzungssteuerung

IF A Die Anweisung 1 bis n wird übersetzt, wenn A ungleich 0
Anweisung 1 wenn A = 0, werden die Anweisungen beim Übersetzen weggelassen
Anweisung n
ENIF
TITL 'TEXTKETTE' die Textkette erscheint als Überschrift 'in der Programmliste
EJEC Der Drucker für die Programmliste macht einen Formularvorschub

Makroorganisation

Ein MAKRO ist eine Befehlsfolge,' die der Assembler beider Übersetzung -in das Programm einsetzt: t

Makrodefinition,

Ein MAKRO wird definiert durch:

NAME: MACR Liste der formalen Parameter 
Anweisung 1

Anweisung n 
ENDM

Die formalen Parameter können in den Anweisungen 1 bis n beliebig auftreten. Inder Spalte »Marke« steht der Name des MAKRO. Er ist unter gleichen Bedingungen wie eine Marke frei wählbar. In der Spalte »Operator« steht der Pseudobefehl MCR. Er sagt aus, dass die folgenden Anweisungen 1 bis n `zu dem MAKRO mit diesem definierten Namen gehören. 
Die formalen Parameter sind Zeichenkettenparameter, die innerhalb des Makros verwendet werden können.

Das MAKRO hat folgendes, Aussehen:
DEZA: MACI:t Zl, Z2; Definitionszeile, Z1 und Z2 sind formale Parameter
LD A (Z1) _ LD HL, Z2 -
ADC (HL) Makrokörper DAA
LD . (Z1); A _ ,
ENDM; "des NIAKRO Makroaufruf
Der Aufruf erfolgt durch den Namen des MAKRO als Pseudobefehl und der folgenden Liste der aktuellen Parameter: Soll zum Beispiel der Inhalt der Zellen 30H und 31H addiert werden, so geschieht dies durch den Aufruf DEZA 30H, 31H:
Durch den Aufruf wird an die Stelle im Programm, an der der Aufruf steht, ein Programmstück (Makroerweiterung genannt) eingesetzt, in dem die, formalen Parameter Zl und Z2 , durch die aktuellen Zeichenketten 30H' und 31H ersetzt werden, Das Programmstück hat daher dieses Aussehen: 
L i)
A, (3flH) LD` HL 31H
ADC (Hb) . , _ .
DAA _ LD (30H) A
Sätze:
Bei der Übersetzung wird statt des Makroaufrufes ein Programmteil eingesetzt, in dem die formellen Parameter der Makrodefinition durch die aktuellen Parameter in der gleichen Reihenfolge ersetzt werden. Den Programmteil nennt man Makroerweiterung. Sind beim' , Aufruf mehr aktuelle Parameter als formelle vorhanden, werden die überflüssigen weggelassen: Sind beim Aufruf weniger aktuelle Parameter als formelle vorhanden, werden die fehlenden mit »OK belegt.
Makrobefehle müssen vor ihrem Aufruf definiert, sein. Es ist möglich, eine Makrobibliothek anzulegen. Dann genügt es, vordem Aufruf das Makro aus der Bibliothek ins Programm zu holen.

Assembler

Die Abkürzungen für die Operationscode und Operanden werden durch den Assembler festgelegt. So können sie sich deshalb von Assembler zu Assembler geringfügig unterscheiden. -
Die folgende Übersicht zeigt die wesentlichen Unterschiede zwischen den Schreibweise Operationen und Operanden der Assembler M80 im- Betriebssystem CPIM und dem Assembler MAPSK1520.

Literatur 8-Bit Mikrorechentechnik


2. Assembler für verschiedene Plattformen history menue scroll up
Assembler liegen im Anforderungsniveau genau eine Stufe über dem direkten Befehlssatz des jeweiligen Zielprozessors und sie gewinnen mit Einzug der Microcontroller wieder an Bedeutung, da dort Hochsprachen aller Coleur unnötigen Zwischencode erzeugen, der alles andere als Laufzeit- und Speicheroptimal ist. Genau das braucht man aber dort, wo jedes Bit im Hauptspeicher knapp ist, aber der Befehlssatz optimal auf Steuerungssysteme abgestimmt wurde.

zum ASIDE-Assembler

Für den Z80-Prozessor bewährte sich im Einsatz der Aside-Assembler

Software zum Lesen der Dumps - möglichst ein zugehöriger Disassembler
die sich durch die Disassemblierung Befehle müssen in einem Zusammenhang stehen - wird ein Register mit einem Wert geladen, dann muss mit dessen Inhalt in absehbarer Folge eine logische, arithmetische oder Ein-/Ausgabeoperation erfolgen

3. Disassemblieren vorhandener Hex-Dumps history menue scroll up
Das geht von Hand, aber wenn hier ein Fehler an ungünstiger Stelle auftritt (und diese Wahrscheinlichkeit ist extrem hoch), dann kommt da wie bei kryptologischen Verfahren nur noch Müll heraus. Hat man Glück, erkennt man diesen, das ist aber keine Notwendigkweit.
Voraussetzungen sollten ein fehlerfreies Hex-Dumps - möglichst mit Zeilen und Spalten hexadezimal organisiert sowie eine Übersicht evtl. vorhandener und dokumentierter Subroutinen
Assemblerliste für den entsprechenden Prozessor
Software zum Lesen der Dumps - möglichst ein zugehöriger Disassembler
die sich durch die Disassemblierung Befehle müssen in einem Zusammenhang stehen - wird ein Register mit einem Wert geladen, dann muss mit dessen Inhalt in absehbarer Folge eine logische, arithmetische oder Ein-/Ausgabeoperation erfolgen
Codetabellen beginnen dort, wo der logische Zusammenhang aufhört oder aber sinnlose Befehle das Resultat bilden
genaue Adressrechnung sowie das Verfolgen der Sprungadressen verschaffen letzte Gewissheit ;-)
es muss anfangs des Assemblertextes eine umfangreiche Dokumentatation von Festadressen, ROM- und RAM-Anordnung, reservierter Bereiche entsprechend kommentiert stehen

5. Verwandte Themen history menue scroll up
Aussagenlogik, Logik und Kombinatorik, Kanonische Normalformen - aber auch die Gesetze zur logischen Schaltungsentwicklung sowie auch ihre Vereinfachung spielen alle in diese Feld der Grundlagen. Hier einige Tipps, um diese näher zu beschnuppern, oder daran vollkommen zu verzweifeln.

Programmierwerkzeuge für Mikrorechner

The Mother of Tetraed Codes - der HEX-Code

Mnemonik-Codierung

Assembler/Disassambler

Assembler-Programmierung

ASide-Assembler

Assembler-Programmierung

Projekte als A-Side Assembler Datei

 

 


zur Hauptseite
© Samuel-von-Pufendorf-Gymnasium Flöha © Frank Rost Juni 2007

... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-)

„Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“

Diddi Hallervorden, dt. Komiker und Kabarettist