Der ASide-Assembler history menue Letztmalig dran rumgefummelt: 26.03.25 17:24:22

ASide Assembler ist die wahrscheinlich preiswerteste Form, um in den Besitz eines wirklich guten Werkzeuges für diese Ebene zu kommen, denn in der Fachwelt zahlt man für Assembler recht kräftige Preise - sie liegen auch im günstigsten Falle weit jenseits eines Studenten-Einkommens.

  1. ASide benutzen
  2. Erste Schritte
  3. Sammlung von Tipps und Tricks
  4. Programmieren mit ASide
  5. A-Side-Projekte
  6. Verwandte Themen

Assembler/Disassambler

ASide-Assembler - ein Werkzeug zur schnellen Programmentwicklung

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

Wissen für Fortgeschrittene der Informatik

Informatik-Profi-Wissen

Merke: alle Hochsprachen (ja auch C ++) generieren einen nicht optimalen Zwischencode - der ist immer länger, als auf der Assemblerebene entwickelt.
Leider befreit eben auch die Assemblersprache nicht von der Kenntnis der internen Funktionsweise der Prozessorbefehle - deswegen gibt's die nochmals hier - aber aufpassen: die Syntax stimmt nur teilweise überein - Assembler ist nicht gleich Assembler!!!

die beliebte alphabetisch sortierte Schnell-Liste

die beliebte numerisch sortierte Schnell-Liste

Allgemeine FLAG-Wirkung

FLAG-Wirkung auf OP-Code-Gruppen

... das hier wird für fortgeschrittene Programmierer die wichtigste Seite - aktuell sind keine Fehler bekannt

ASide-Assembler - das Original

Z80-CPU

A-Side Assembler-Projekte

Rechenregeln für Mikroprozessoren und Mikrocontroller

   

1. ASide benutzen history menue scroll up

ASide ist der gelungene Kompromiss bezüglich lange bewährtem (Z80) sowie neuester Technologie mit Mikrocontrollern und das zum minimalen Preis. Dabei ist das System durch einbinden zusätzlicher Bibliotheken auch zukunftssicher. Für modernere Controller mus ein Upgrade des Systems erworben werden - lohnt aber nur bedingt - MICROTECH sowie ATMEL bieten eigene kleine Entwicklungswerkzeuge.
Wenn alles richtig via Optionen eingestellt ist, bekomme ich für den jeweiligen Zielcompiler die ASM-, die LST- sowie die HEX-Datei - und dies automatisch - ich mus mich nicht mehr mit den Befehlstabellen herumschlagen, aber ich muss natürlich den Prozessor, seine Befehle sowie deren Wirkung und seine Einschränkungen genau kennen.

Pseudokommandos Teil 1 Pseudokommandos Teil 2

Pseudo-Kommandos für den ASide-Assembler - Teil 1

Pseudo-Kommandos für den ASide-Assembler - Teil 2

MACRO - ENDMACRO

INCLUDE - INCLUDEBINARY - CAT - END

... das ORG-Statement ... das SETBASE-Statement ... das EQUATE-Statement ... Zugriff auf Marken und Datentabellen ... das INCLUDE-Statement
  • ... ist geeignet, auch gleich die Interruptprogrammierung des LC-80 zu übernehmen
  • ... alle folgenden Elemente werden ab der betreffenden Adresse eingetragen
  • kann mehrfach für zu trennende Bereiche angesetzt werden
  • Zwischenwerte werden mit "00H" beschrieben
  • nachfolgende ORG-Adressen können nicht einen vorab definierten Speicherbereich unterschreiten
  • ... der Compile reagiert mit einem gelben "Achtung"

 

SETBASE-Statement mit Bezeichnern

EQUATE-Statement am Beispiel des LC-80

Parameter-Zugriff am Beispiel des LC-80

 
... das EX AF und EXX Statement ORG; SETBASE, MARKEN und NAMEN DEFB & ...  ... & DEFW  

ACHTUNG mit dem EX-Statement - was passiert wirklich

  Beispiel - Register laden

  Beispiel - Register Laden im Listing

  • der Registersatz-Wechsel bedeut, dass der Hauptregistersatz in das Alternativ-Register eingeschrieben wird
  • bis zum "Zurückschalten ist der Alternativregisterstz der Hauptregistersatz
  • es wird also nicht umgeschalten, sondern "umgeschrieben"!!!
  • es muss zurückgeschalten werden, um die originale Reihenfolge der Registerbelegungen herzustellen
  • EX AF, AF' als Notation für das Umschalten von AF auf AF'
  • EXX als Notation für das Umschalten der restlichen Register
  • EX BC, BC' als Notation für das Umschalten von BC auf BC'
  • EX DE, DE' als Notation für das Umschalten von DE auf DE'
  • EX HL, HL' als Notation für das Umschalten von HL auf HL'
  • EX DE, HL als Notation für das Austauschen der Inhalte von HL und DE
  • EX HL, SP als Notation für das Austauschen der Inhalte von HL und SP

das Zusammenspiel von ORG-Statement, SETBASE-VEREINBARUNG, Sprungmarken sowie reservierten NAMEN

  Beispiel - Zählen der Häufigkeit

  Beispiel - Zählen der Häufigkeit im Listing

 

 

 

das Define Bytes - als vordefinierte Daten-Bytes

  Beispiel - Morsecode

   
Besonderheiten bei der Befehlsnotation:
  • CP statt CMP für COMPARE
  • JP statt JMP für JUMP
  • JR bedingung,zieladresse
  • ADD A,A statt ADD A (Akkumulator muss explizit angegeben werden)
  • CP(HL) statt CMP(M) - Indizierungen werden ebenfalls explizit für die Register angegeben
  • EX AF,AF' statt EX AF - Indizierungen werden ebenfalls explizit für die Register angegeben
  • EQU für EQUATE (Gleichsetzung) nur am Anfang definierbare Vereinbarungen für Namen externer Ports sowie Zusätze (z, B. verschiedene ROM-Versionen, wie beim LC-80)

  • ORG für ORGANISE nur am Anfang definierbare Startadresse

  • SETBASE - weitere Adressorganisation direkt nach dem Programm-Code - logisch verwendet für die Trennung von Programm- sowie Datenbereich

  • Zieladresse darf nicht nur als Sprungmarke existieren, sondern sie muss auch syntaktisch korrekt sein

  • Zieldressen müssen geklammert sein - also nicht JP HL, sondern JP (HL)

das Programm Count-Down mal in Assembler geschrieben

hier auch das ZIP-Archiv - entwickelt von Johannes Uhlig im März 2007

das Programm Count-Down als HEX-Notation geschrieben


2. Erste Schritte history menue scroll up

Im Prinzip sind wir hier der Assembler - auf Grundlage der Kenntnis des Prozessors sowie seiner Möglichkeiten, muss ich auf Assemblerebene denken, anschließend die Konvertierungstabellen studieren und für den gewünschten Befehl den entsprechenden Code heraus suchen - nichts andres macht übrigens ein Assembler. Auch die Notationsfolge sollte eingehalten werden.

... einfache Register-Lade-Programme mit 8- sowie 16-Bit Ladebefehlen direkt sowie vom RAM mit Register-Anzeige
... WIE und WARUM?    
... einfache 8- sowie 16-Bit Logik- und mathematische Befehle im Register sowie auf dem RAM
     
... Arbeiten mit Zeigern auf dem RAM
Möglichkeiten durch die Indizierung    
... PUSH- und POP-Operationen auf dem RAM via Stackpointer
     
... Arbeiten mit dem FLAG-Register
     
... absolute sowie bedingte Sprungbefehle mit Direktadressen oder relativen Verweisen
     
... Aufruf von Subroutinen
     
... PUSH- und POP-Operationen auf dem RAM via Stackpointer
     


3. Abstände in A-Side-Programmen history menue scroll up

Komplex wird die Adressrechnung erst bei den relativen Adressierungsarten von Sprüngen. Diese liefern zwar optimale Programme, deren Code im RAM verschoben werden kann und dennoch ohne Änderungen lauffähig bleibt, aber die Adressrechnung ist unangenehm. Ich hab' mir deshalb das folgende kleine Tool entwickelt, welches sämtliche Fallen berücksichtigt - und davon gibt es reichlich ;-)

ORG, EQU und SETBASE sowie weitere Pseudo-Kommandos

Basis-Adressen

Vereinbarung des Programmstarts (ORG darf nur einmal verwendet werden!!!)

Vereinbarung einer neuen Tabelle

 

 

 

 

 

 

 

 

 

Vereinbarung einer neuen Tabelle

Sprungmarken

Vereinbarung sowie Zugriff auf Sprungmarken

Marken mit Großbuchstaben und Ziffern

maximal 8 Zeichen

indizierter Verweis auf Tabelle (das bedeutet, die Tabelle wird nicht auf ihren Beginn gesetzt

ins Register IX wird nicht der Anfang der Tabelle TABLE geladen, sondern um 5 Byte nach oben versetzt und holt sich von dort die zwei aufeinander folgenden Bytes - es werden ja 16 Bit benötigt

Pseudodefinitionen:
  • DEFB - Defined Byte ist genau ein Byte auf einem zu definierenden Speicherplatz, welches durch den Programmlauf variabel ist (... es kann im Inhalt verändert werden!) - der Abstand zwischen gleichen Gruppen beträgt 1!
  • DEFW - Defined Word ist genau eine Zwei-Bytegruppe auf einem zu definierenden Speicherplatz, welches durch den Programmlauf variabel ist (... es kann im Inhalt verändert werden!) - der Abstand zwischen gleichen Gruppen beträgt 2!
  • DEFS - Defined Byte ist genau ein Byte auf einem zu definierenden Speicherplatz, welches durch den Programmlauf nicht variabel ist (... es kann im Inhalt ergo nicht verändert werden!) - der Abstand zwischen gleichen Gruppen beträgt 1!
  • DEFINT - ???
  • DEFM - ???


4. Programmieren mit ASide history menue scroll up

Beherrschen der durchaus komplexen relativen Adressrechnung (mit negativen Hexadezimalzahlen) sowie der Aufruf einer eigen programmierten Subroutine und auch das Einbinden einer externen Routine in das aktulee Assebler-Programm werden hier zusammenfassend am Beispiel gezeigt.

JUMP- und CALL-Befehle ???-Befehle ???-Befehle ???-Befehle

Jump- und Call-Befehle

Projekt als A-Side Assembler Datei (Achtung - das Projekt ist am 10.6.2020 noch nicht vollständig)

    ... das Listing downloaden - hier im Listing

    ... und wenn's dennoch nicht klappt - dann hier als LC-80 ladbare Datei  downloaden - hier im HEX-Format

      ... und wenn's dennoch nicht klappt - dann hier als LC-80-ladbare Datei  downloaden - hier im  BIN-Format - das kann man direkt mit den richtigen Einstellungen in den LC-80 Emulator laden

     
Schleifen - also Zyklen sind Anweisungsblöcke, welche innerhalb einer bestehenden Struktur komplett identische Anweisungsblöcke ausführen - Parameteränderung ist hier nicht unbedingt erwünscht, ausgenommen die Zähler in den Registern, welche durch die definierte Befehlwirkung klar vorgegeben sind:
  • DJNZ
  • LDIR
  • LDDR
selbst geschriebene Subroutinen - alles, was mehr als einmal identisch mit unterschiedlichen Parametern benötigt wird, ruft nach einer Subroutine
  • Definition via Einspriung-Marke
  • Aufruf der Subroutine
  • RET aus der Subroutine
  • RETI aus der Interrupt-Seevice-Subroutine
... Komplexes 8-Bit Addierwerk A-SideAssembler - einfache 8-Bit Addition ohne Übertrag A-Side Assembler - einfache 8-Bit Addition mit Übertrag A-Side Assembler - 16-Bit Addition ohne Übertrag A-SideAssembler - 64-Bit Addition mit Übertrag

Friedrichs 8 Bit-Fulladder-Schaltung
 ... und hier als ProfiLab 4.0-Archiv

... siehe auch

8-Bit Addition ohne Übertrag
  Projekt als A-Side Assembler Datei
... als HEX-Datei

8-Bit Addition mit Übertrag
  Projekt als A-Side Assembler Datei
... als HEX-Datei

16-Bit Addition ohne Übertrag
  Projekt als A-Side Assembler Datei
... als HEX-Datei

64-Bit Addition mit Übertrag
  Projekt als A-Side Assembler Datei
... als HEX-Datei

Binäre Addition Dezimale Addition Hexadezimale Addition ... Addition - die Rechenregeln als Corel-Datei

19 Bit - binäre Addition

Dezimale Addition

Hexadezimale Addition

Download der Subtraktionsverfahren im CorelDraw 11.0-Format


5. A-Side-Projekte history menue scroll up

Beginnend bei einfach tasten wir uns über Zwischenschritte an die großen sowie komplexen Aufgaben heran. Einfache Register-Operationen werden abgelöst durch Operationen auf dem RAM, gefolgt durch die Nutzung von Subroutinen und letztendlich getoppt von der Interruptsteuerung

Projekte als A-Side Assembler Datei


6. Verwandte Themen history menue scroll up

Die Hexadzimalcodierung ist vor allem am Anfang für die von uns in AGs gebastelten Microcomputer sehr vorteilhaft einsetzbar. Das geht alles noch relativ einfach und ist noch auch in der Vermittlung zu verstehen. Kommen dann Assembler hinzu, wird's wesentlich komplizierter, aber natürlic auch einfacher, wenn man diese Werkzeuge beherrscht.

Z80-CPU

der LC-80

... und so funktioniert ein Computer

Hardwarefragen

Programmierwerkzeuge für Mikrorechner

The Mother of Tetraed Codes - der HEX-Code

Mnemonik-Codierung

Assembler-Programmierung

komplexer Mikrorechner mit Funktionsanalysator

Der LC-80 Simulator

Hinweise zur Assemblerprogrammierung

Worst-Case-Denken

Struktogramme und Ablaufpläne selbst gemacht ...

Assembler-Projekt 2007

Softwarefragen



zur Hauptseite
© Samuel-von-Pufendorf-Gymnasium Flöha © Frank Rost im März 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