Der ASide-Assembler history menue Letztmalig dran rumgefummelt: 12.11.17 10:02:31

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

       

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 1

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 ... INCLUDE-Statement
   

EQUATE-Statement am Beispiel des LC-80

Parameter-Zugriff am Beispiel des LC-80

 
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 - weitere Adressorganisation über SETBASE

  • 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. Tipps und Tricks 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 and SETBASE und andere Pseudo-Kommandos

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


4. Programmieren mit ASide history menue scroll up

Beherrschen der durchauskomplexen 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 gezwigt.

Befehle sowie Befehlswirkung
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


5. Tipps und Tricks 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 ;-)

Projekt 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