home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / emulate / x_comp / a80 / a80.txt < prev    next >
Text File  |  1991-05-14  |  25KB  |  635 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.         A80 V1.3b - (c) copyright 1993 by André Grüning
  7.         
  8.         Anleitung
  9.         
  10.         Inhaltsverzeichnis
  11.         
  12.           1. Allgemeines
  13.           2. Starten von A80
  14.           3. Die Assemblersprache des A80
  15.           4. Ausdrücke
  16.           5. Pseudo-Befehle
  17.           6. Fehlermeldungen
  18.           7. Verschiedenes
  19.           8. Erweiterter Befehlssatz des Z80 (nur registrierte Version)
  20.         
  21.         
  22.         1. Allgemeines
  23.         
  24.         A80 ist ein Z80-Crossassembler für MS-DOS. Er dient dazu, auf einem 
  25.         IBM-kompatiblen PC Programme für einen Computer mit Z80-CPU zu 
  26.         erstellen.
  27.         A80 benötigt DOS ab 3.0 und ca. 100 KB freien Sprecher. Damit die 
  28.         Bildschirmausgaben korrekt formatiert erscheinen, sollte ANSI.SYS 
  29.         installiert sein. Das Programm läuft aber auch ohne.
  30.         
  31.         Erklärung der verwendeten Symbole:
  32.         
  33.         [...]   bedeutet in dieser Anleitung: Das Eingeklammerte ist
  34.                 optional.
  35.         a|b     bedeutet, daß man entweder a oder b angeben muß, nicht
  36.                 aber beide.
  37.         sym     repräsentiert ein Symbol
  38.         exp     repräsentiert einen mathematischen Ausdruck
  39.         string  repräsentiert einen String (Zeichenkette)
  40.         
  41.         
  42.         2. Aufruf von A80
  43.         
  44.         A80 wird wie folgt aufgerufen:
  45.         
  46.           A80 [quelle.ext [ziel.ext [symbol.ext [fehler.ext]]]]
  47.         
  48.         quelle.ext enthält dabei den Quellcode, ziel.ext dient zur Aufnahme 
  49.         des Maschinencodes. In symbol.ext werden die definierten Symbole mit 
  50.         ihrem Wert geschrieben, in fehler.ext die Fehlermeldungen und die 
  51.         Zeilen mit undefinierten Symbolen.
  52.         Werden ziel.ext, symbol.ext und fehler.ext nicht angegeben, so werden 
  53.         sie dennoch erzeugt und erhalten den Namen der Quelldatei mit den 
  54.         Extensionen .Z80, .S80, .E80. Wird auch quelle.ext nicht angegeben, 
  55.         erfragt A80 interaktiv die Namen der Dateien. Allerdings muß nur die 
  56.         Quelledatei angegeben werden. Will man die anderen Dateien nicht 
  57.         extra eingeben, so drückt man CR bei der entsprechenden 
  58.         Eingabeaufforderung. Die Datei erhält dann den Dateinamen der 
  59.         Quelldatei mit der Extension wie oben angegeben.
  60.         
  61.         
  62.         3. Die Assemblersprache von A80
  63.         
  64.         A80 unterscheidet nicht zwischen Groß- und Kleinschreibung. Achten 
  65.         Sie darauf, daß im Assemblerquellcode die ASCII-Zeichen mit den Codes 
  66.  
  67.  
  68.  
  69.  
  70.         0, 1, 2, 3 und 255 nicht vorkommen dürfen. Diese verwendet der 
  71.         Assembler intern. A80 unterstützt den gesamten Befehlssatz des Z80. 
  72.         Die symbolische Schreibweise der Befehle folgt der allgemein 
  73.         üblichen, nämlich der von Zilog. Es darf jeweils nur ein Befehl pro 
  74.         Zeile stehen. Vor dem Befehl kann in der selben Zeile ein Label 
  75.         definiert werden. Hinter dem Befehl kann ein Kommentar, eingeleitet 
  76.         mit ; geschrieben werden:
  77.         
  78.           label: xor a,a  ; Kommentar
  79.         
  80.         Dabei ist darauf zu achten, daß
  81.         1. zwischen Label und Befehl und zwischen Befehl und erstem Operand 
  82.            als Trennzeichen mindestens ein Leerzeichen oder Tabstop steht 
  83.            (Komma beliebig),
  84.         2. zwischen zwei Operanden als Trennzeichen mindestens ein Komma 
  85.            steht (Leerzeichen, Tabstops beliebig) und
  86.         3. zwischen einem Label und dem folgenden ":" kein Leerzeichen und 
  87.            kein Tabstop stehen darf.
  88.         Abweichend von der Zilogdefinition kann statt (ix ± 0) (ix) 
  89.         geschrieben werden, entsprechend für (iy ± 0) (iy).
  90.         Jedem Befehl, der eine Konstante (ob als Zahl oder Adresse) 
  91.         erfordert, kann diese als mathematischer Ausdruck, wie in Abschnitt 4 
  92.         beschrieben, mitgeteilt werden. Es wird kein Unterschied zwischen 
  93.         Byte- und Wordkonstanten oder Symbolen, die Adressen repräsentieren, 
  94.         gemacht.
  95.         Bei relativen Sprungbefehlen wird der Operand als direkte Angabe der 
  96.         Sprungweite, des Displacements, aufgefaßt, wenn das erste Zeichen des 
  97.         Operanden ein "+" oder "-" ist, sonst als Angabe des Sprungzieles.
  98.         
  99.         
  100.         4. Ausdrücke
  101.         
  102.         a) Strings
  103.         Strings sind ASCII-Zeichenfolgen, eingeschlossen entweder in 
  104.         Anführungsstriche oder Hochkommata, z.B:
  105.         
  106.           "text.."
  107.           'abcd..'
  108.         
  109.         In Anführungsstriche eingeschlossene Strings dürfen keine 
  110.         Anführungsstriche enthalten, entsprechendes gilt für in Hochkommata 
  111.         eingeschlossene.
  112.         
  113.         b) Zahlen
  114.         Werden Zahlen nicht besonders spezifiziert, so werden sie als 
  115.         Dezimal-Zahlen interpretiert. Sollen sie nicht als Dezimal-Zahlen 
  116.         aufgefaßt werden, ist ihnen ein Buchstabe wie folgt anzufügen:
  117.         
  118.           Buchstabe Zahlensystem  Beispiel
  119.           b         dual          01101101b
  120.           t         Vierer-System 332t
  121.           o, q      oktal         177q, 356o
  122.           d         dezimal       10d (d ist optional)
  123.           h         sedezimal     77h, 0CFH, 0afh
  124.         
  125.         Achten Sie darauf, daß sedezimalen Zahlen eine "0" vorangestellt 
  126.         werden muß, wenn sie mit einem Buchstaben A..F beginnen, also 0CFH, 
  127.         0afh (CFH und afh würden als undefinierte Symbole bewertet).
  128.         Als Zahlen werden auch Strings mit max. zwei Zeichen bewertet. Sie 
  129.         erhalten Werte wie folgt:
  130.  
  131.  
  132.  
  133.  
  134.         
  135.           "" oder ''    : 0
  136.           "a" oder 'a'  : ASCII-Code des Zeichen, hier also 61h.
  137.           "ab" oder 'ab': ASCII 1.Zeichen * 256 + ASCII 2., also 6162h
  138.         
  139.         c) Operatoren
  140.         Zahlen können mit Operatoren zu Ausdrücken verbunden werden. Statt 
  141.         einer einzelnen Zahl kann immer auch ein Ausdruck stehen.
  142.         Es gibt in A80 folgende Operatoren: 
  143.         
  144.           (...), [...], {...}: Klammern
  145.           -                  : Monadisches Minus wie bei -123
  146.           ^                  : Potenzierung
  147.           BIT, LOW, HIGH     : Funktionen, s.u.
  148.           *, /, MOD, SHL, SHR: Multiplikation, Division, 
  149.                                Divisionsrest, arith. Schieben nach links und 
  150.                                rechts
  151.           +, -               : Addition, Subtraktion
  152.           NOT                : Funktion, s.u.
  153.           AND                : verknüpft seine beiden Operanden bitweise UND.
  154.           OR, XOR            : verknüpfen ihre beiden Operanden bitweise ODER 
  155.                                bzw. exklusiv-ODER.
  156.         
  157.         Die Reihenfolge der Operatoren von oben nach unten gibt ihre 
  158.         Priorität an. Sie nimmt von oben nach unten ab. D. h in dem Ausdruck 
  159.         NOT a + b wird zunächst die Summe von a und b gebildet und diese 
  160.         anschließend komplementiert. Will man erreichen, daß erst a 
  161.         komplementiert und zu dem Ergebnis davon b addiert wird,  müssen 
  162.         Klammern gesetzt werden: (NOT a) + b.
  163.         
  164.         NOT exp
  165.         bildet das Einer-Komplement des Ausdruckes exp, d.h. exp wird 
  166.         bitweise negiert.
  167.         
  168.         HIGH exp
  169.         liefert exp DIV 256. Dient dazu, das höherwertige Byte eines Words zu 
  170.         isolieren.
  171.         
  172.         LOW exp
  173.         liefert exp MOD 256.  Dient dazu, das niederwertige Byte eines Words 
  174.         zu isolieren.
  175.         
  176.         BIT exp
  177.         liefert 1 SHL exp. Dient dazu, explizit einzelne Bits zu setzen.
  178.         
  179.         Beispiele:
  180.         
  181.           ld hl, 21 + 45
  182.           ld b , 3 * 5 + 6 * high (65534)
  183.           ld a , 34 and (34 * 4)
  184.         
  185.         d) Symbole und Labels
  186.         Symbole repräsentieren eine Zahl. Sie dürfen nicht mit folgenden 
  187.         Zeichen beginnen: '0', '1',..., '9', ':'. Anführungsstriche " und das 
  188.         Hochkomma ' dürfen überhaupt nicht in Symbolen enthalten sein.
  189.         Gültige Symbole sind z.B:
  190.         
  191.           Hallo
  192.           D2
  193.           D_X1Y
  194.  
  195.  
  196.  
  197.  
  198.         
  199.         Ungültig sind z.B:
  200.         
  201.           2D
  202.           AB"Bs
  203.           D'D123
  204.         
  205.         Symbole können immer an Stelle einer Zahl oder eines Ausdrucks 
  206.         gebraucht werden, z.B.:
  207.         
  208.           ld hl, 1 + hallo
  209.           ld (x1), a
  210.           ld b, var1 and {var2 * 36}
  211.         
  212.         Symbolen werden mit dem Pseudo-Befehl EQU oder optional = Werte 
  213.         zugewiesen (s. Abschnitt 5), z.B
  214.         
  215.           hallo equ 34
  216.           x1    equ 100 + 34 * (23 xor 45)
  217.           var1  equ bit 1 or bit 5
  218.           var2  =   bit 2 + bit 15
  219.           var3  equ var1 * var2  - 34
  220.         
  221.         Die Befehle
  222.         
  223.           hallo equ 10h
  224.           ld a, hallo
  225.         
  226.         bedeuten also das gleiche wie
  227.         
  228.           ld a, 10h
  229.         
  230.         Symbole können auch (s.o.) durch andere Symbole definiert werden.
  231.         Wenn nicht anders angegeben, brauchen Symbole zum Zeitpunkt der 
  232.         Verwendung nicht definiert zu sein. Sie müssen dann später im 
  233.         Quelltext definiert werden. Der Assembler erkennt undefinierte 
  234.         Symbole und setzt ihren Wert später, nachdem sie definiert worden 
  235.         sind, ein. Z.B:
  236.         
  237.           ld hl, (daten)
  238.           ...
  239.           ...
  240.           ...
  241.           daten equ 7fffh
  242.         
  243.         Auch die Schachtelung undefinierter Symbole ist möglich, z.B:
  244.         
  245.           ld a, var1
  246.           var1 equ var2 + var3
  247.           var2 equ var4 * var5
  248.           var3 equ var5 * (var4 + 2)
  249.         
  250.           var4 equ var5 + 1
  251.           var5 equ 2
  252.         
  253.         wird übersetzt als
  254.         
  255.           ld a, 16
  256.         
  257.         
  258.  
  259.  
  260.  
  261.  
  262.         Es gibt zwei reservierte Symbole mit spezieller Bedeutung:
  263.         
  264.           $  liefert den aktuellen Wert des Program Counter (PC-Register).
  265.           $$ liefert die Position, die der Befehl absolut in der 
  266.              Assemblerdatei hat. (s. auch ORG)
  267.         
  268.         Ein Label ist eine besondere Art Symbol. Ein Label wird wie folgt 
  269.         definiert:
  270.         
  271.           symbol:
  272.         
  273.         wobei symbol für ein beliebiges bisher undefiniertes Symbol steht. 
  274.         Dieses Symbol erhält den Wert zugewiesen, den der Program Counter an 
  275.         dieser Stelle hat. Es dient daher hauptsächlich zur Definition von 
  276.         Symbolen, die Adressen und Sprungziele repräsentieren. Z.B.:
  277.         
  278.           jp nz, schleife1
  279.           ...
  280.           ...
  281.           ...
  282.           schleife: ld a, b
  283.                     or c
  284.                     ...
  285.         
  286.         Die Definition eines Labels
  287.         
  288.           label:
  289.         
  290.         ist quasi eine abkürzende Schreibweise für
  291.         
  292.           label equ $
  293.         
  294.         
  295.         5. Pseudo-Befehle
  296.         
  297.         EQU oder optional: =
  298.         Syntax: sym EQU exp
  299.         
  300.         Dem Symbol sym wird der Wert des Ausdrucks exp zugewiesen. exp darf 
  301.         zum Zeitpunkt der Assemblierung undefiniert sein.
  302.         
  303.         DEFB oder optional: DB, DEFM, DC
  304.         Syntax: DEFB [string1|exp1 [, string2|exp2 [, string3|exp3 [,...
  305.         
  306.         Wird DEFB ohne Operanden aufgerufen, so reserviert es ein Byte 
  307.         Speicherplatz. Wird es mit Operanden aufgerufen, so reserviert es, 
  308.         wenn der Operand ein mathematischer Ausdruck ist, ein Byte pro 
  309.         Operand, das mit dem Wert des Operanden initialisiert wird, und, wenn 
  310.         es sich um einen String handelt, pro Zeichen ein Byte, das mit dem 
  311.         ASCII-Code des Zeichen initialisiert wird.
  312.         
  313.         DEFW oder optional: DW
  314.         Syntax: DEFW [exp1 [, exp2 [, exp3 [, ...
  315.         
  316.         Ohne Operanden aufgerufen, reserviert DEFW ein Word (also zwei Byte) 
  317.         Speicherplatz. Mit Operanden reserviert DEFW pro Operand ein Word. 
  318.         Dieses wird mit dem Wert des jeweiligen Operanden initialisiert.
  319.         
  320.         
  321.         
  322.  
  323.  
  324.  
  325.  
  326.         DEFS oder optional: DS
  327.         Syntax: DEFS exp1 [, exp2]
  328.         
  329.         Reserviert exp1 Bytes, die mit exp2 initialisiert werden, wenn exp2 
  330.         gegeben ist. exp1 und exp2 müssen bei Assemblierung des Befehls 
  331.         definiert sein, d.h. es dürfen keine undefinierten Symbole mit DEFS 
  332.         verwendet werden. Bei DEFS wird nicht geprüft, ob exp2 < 256 und >= -
  333.         256 ist, sondern es wird mit exp2 MOD 256 initialisiert.
  334.         
  335.         CSEG
  336.         Syntax: CSEG
  337.         
  338.         Nachfolgender Code wird gespeichert. Normale Option (Gegensatz siehe 
  339.         DSEG). CSEG ist die Anfangseinstellung von A80, muß also am 
  340.         Programmbeginn nicht explizit gesetzt werden.
  341.         
  342.         DSEG
  343.         Syntax: DSEG
  344.         
  345.         Nachfolgender Code wird nicht gespeichert, sondern nur assembliert. 
  346.         Normalerweise wird DSEG nur bei Datenbereichen, die nicht vom 
  347.         Assembler initialisiert werden sollen, verwendet (z.B. Bereiche, die 
  348.         später in einem RAM zu liegen kommen), d.h: Der PC wird weiter 
  349.         entsprechend der Länge der Daten hochgezählt, aber das 
  350.         Assemblierungsergebnis in diesem Abschnitt nicht in der 
  351.         Maschinensprache-Datei abgespeichert. Abschaltung durch CSEG.
  352.         
  353.         ORG
  354.         Syntax: ORG exp1 [, exp2]
  355.         
  356.         Der folgende Code wird in der Maschinencodedatei ab der Stelle exp1 
  357.         gespeichert, aber so, als ob er an der Stelle exp2 stünde, wenn exp2 
  358.         gegeben ist. $$ korrespondiert dabei mit exp1, $ mit exp2. exp1 und 
  359.         exp2 müssen zum Zeitpunkt der Assemblierung bekannt sein, d.h sie 
  360.         dürfen keine undefinierten Symbole enthalten.
  361.         
  362.           org 0, 8100h
  363.         
  364.         bedeutet z.B., daß der nachfolgende Code ab der Stelle 0 in der 
  365.         Maschinencode-Datei abgelegt wird, aber so assembliert wird, daß er 
  366.         auf dem Z80-Rechner auf Adresse 8100h gelegt werden muß, um lauffähig 
  367.         zu sein.
  368.         
  369.         INCLUDE
  370.         Syntax: INCLUDE include.ext
  371.         
  372.         Der Inhalt der Assemblerquelldatei include.ext wird assembliert, so 
  373.         als ob er direkt in der eigentlichen Quelldatei quelle.ext stünde. 
  374.         INCLUDE kann 254mal geschachtelt werden.
  375.         
  376.         
  377.         6. Fehlermeldungen
  378.         
  379.         Fehlermeldungen werden normalerweise gefolgt von der Zeilennummer der 
  380.         Zeile, in der der Fehler auftrat, ausgegeben. Folgende Fehler werden 
  381.         gemeldet:
  382.         
  383.         "Unbekannter Befehl oder falsche Operanden-Anzahl"
  384.         spricht für sich.
  385.         
  386.  
  387.  
  388.  
  389.  
  390.         "Unbekannter Operand"
  391.         Der Operand ist unbekannt, er kann auch nicht als undefiniertes 
  392.         Symbol bewertet werden.
  393.         
  394.         "Illegale Operanden-Kombination"
  395.         Ein Operand oder beide in der verwendeten Kombination können mit dem 
  396.         Befehl nicht verwendet werden.
  397.         
  398.         "Keine Zahl, falsche Ziffern oder Zahl zu groß "
  399.         Die Zahl ist größer als 65535 oder kleiner als -65536. Oder es 
  400.         tauchen unerlaubte Charaktere in der Zahl auf. Oft ist dann das "h" 
  401.         zur Kennzeichnung einer sedezimalen Zahl vergessen worden.
  402.         
  403.         "Displacement zu groß (> 129 oder < - 126)"
  404.         Die Distanz bei einem relativen Sprung ist zu groß.
  405.         
  406.         "Code und Daten sind größer als 64k"
  407.         Der Adressraum des Z80 ist 64k groß, mehr Code und Daten können nicht 
  408.         gespeichert werden.
  409.         
  410.         "Symbol doppelt definiert"
  411.         Es wurde versucht ein Symbol zweimal mit jeweils einem anderen Wert 
  412.         zu definieren. Mit demselben Wert kann ein Symbol mehrmals definiert 
  413.         werden.
  414.         
  415.         "Klammer nicht geschlossen"
  416.         spricht für sich.
  417.         
  418.         "Kein gültiger Ausdruck"
  419.         Der mathematische Term ist nicht korrekt.
  420.         
  421.         "Kein korrektes Symbol"
  422.         Das erste Zeichen des Symbols ist unzulässig.
  423.         
  424.         "Zahl darf nicht undefiniert sein"
  425.         Diesem Befehl darf kein Ausdruck übergeben werden, der zur Zeit der 
  426.         Assemblierung dieses Befehls noch undefinierte Symbole enthält.
  427.         
  428.         "Verschachtelungstiefe bei INCLUDE zu groß"
  429.         spricht für sich.
  430.         
  431.         "Zuviele Symbole und Labels definiert"
  432.         spricht für sich.
  433.         
  434.         "Undefinierte Symbole"
  435.         Nicht alle im Quellcode verwendeten Symbole sind definiert worden. Es 
  436.         folgt ein Liste mit den Zeilen, in denen die undefinierten Symbole 
  437.         vorkommen. Kann auch dadurch auftreten, daß bei bedingten 
  438.         Sprungbefehlen das Komma zwischen Bedingung und Sprungziel vergessen 
  439.         wurde, also z.B jp nz ziel statt jp nz, ziel.
  440.         
  441.         "Zahl muß < 256 und >= -256 sein"
  442.         Es wurde versucht, einem Befehl, der ein Byte als Operanden 
  443.         erfordert, ein Wert > 256 oder < -256 zu übergeben.
  444.         
  445.         "Offset zu groß"
  446.         Der Offset muß im Wertebereich [-256..255] liegen.
  447.         
  448.         
  449.         
  450.  
  451.  
  452.  
  453.  
  454.         7. Verschiedenes
  455.         
  456.         Der Autor arbeitet daran, dieses Produkt ständig zu verbessern. Wenn 
  457.         Sie, auch als unregistrierter Benutzer, eine Frage, einen Wunsch oder 
  458.         eine Anregung haben, schreiben Sie mir. Wer einen mir unbekannten 
  459.         Fehler als Erster entdeckt und mir eine Beschreibung des Fehlers 
  460.         (Computersystem, Kontext des fehlerhaften Befehls, evtl. komplette 
  461.         Assemblerquelle etc.), zusendet, erhält von mir das nächste Update 
  462.         kostenlos und wird kostenlos registriert.
  463.         Meine Anschrift ist:
  464.         
  465.           André Grüning
  466.           Alte Heerstr. 50a
  467.           D-3250 Hameln 1
  468.         
  469.         Bitte legen Sie Rückporto bei oder geben Sie Ihre Telefonnummer an.
  470.         
  471.         
  472.         8. Erweiterter Befehlssatz (nur registrierte Version)
  473.         
  474.         Die folgenden Befehle können nur mit der registrierten Version von 
  475.         A80 assembliert werden.
  476.         Zilog, der Hersteller des Z80-Prozessors, hat nicht alle 
  477.         Maschinenbefehle veröffentlicht, so daß zahlreiche "geheime" Op-Codes 
  478.         bestehen. Da gibt es weitere Schiebebefehle und das Aufspalten der 
  479.         Indexregister IX und IY in je zwei 8-Bit-Hälften, so daß IX und IY 
  480.         nun fast gleichberechtigt neben HL stehen.
  481.         Ich gebe keine Garantie, daß alle erweiterten Maschinenbefehle auf 
  482.         jedem Z80-Prozessor funktionieren. Also ausprobieren!
  483.         Siehe auch Artikel "422 neue Z80-Befehle" in der Zeitschrift mc 1/82, 
  484.         Seite 27.
  485.         
  486.         .Z80
  487.         Syntax: .Z80
  488.         
  489.         aktiviert den offiziellen Z80-Befehlssatz, so daß die erweiterten 
  490.         Operationen zu Fehlern führen. Dies ist die Anfangseinstellung von 
  491.         A80.
  492.         
  493.         .EXT
  494.         Syntax: .EXT
  495.         
  496.         aktiviert den erweiterten Z80-Befehlssatz, so daß die im folgenden 
  497.         aufgeführten erweiterten Operationen verwendet werden können.
  498.         
  499.         Beschreibung des erweiterten Befehlssatzes:
  500.         
  501.         a) Aufspalten der Indexregister in 8-Bit-Hälften:
  502.         Die Hälften von IX und IY werden wie folgt angesprochen:
  503.         
  504.           HX: höherwertiges  Byte IX
  505.           LX: niederwertiges Byte IX
  506.           HY: höherwertiges  Byte IY
  507.           LY: niederwertiges Byte IY
  508.         
  509.         Es existieren folgende Befehle bzgl. IX (für IY dieselben, bloß 
  510.         Prefix 0DDH ausgetauscht gegen 0FDH:
  511.         
  512.         
  513.         
  514.  
  515.  
  516.  
  517.  
  518.           Mnemonic:   Op-Code:     Mnemonic:  Op-Code:
  519.         
  520.           LD HX, exp  DD 26 exp    LD HX, B   DD 60
  521.           LD LX, exp  DD 2E exp    LD HX, C   DD 61
  522.           LD B, HX    DD 44        LD HX, D   DD 62
  523.           LD B, LX    DD 45        LD HX, E   DD 63
  524.           LD C, HX    DD 4C        LD HX, LX  DD 65
  525.           LD C, LX    DD 4D        LD HX, A   DD 67
  526.           LD D, HX    DD 54        LD LX, B   DD 68
  527.           LD D, LX    DD 55        LD LX, C   DD 69
  528.           LD E, HX    DD 5C        LD LX, D   DD 6A
  529.           LD E, LX    DD 5D        LD LX, E   DD 6B
  530.           LD A, HX    DD 7C        LD LX, HX  DD 6C
  531.           LD A, LX    DD 7D        LD LX, A   DD 6F
  532.         
  533.           INC HX      DD 24        SBC A, HX  DD 9C
  534.           INC LX      DD 2C        SBC A, LX  DD 9D
  535.           DEC HX      DD 25        AND HX     DD A4
  536.           DEC LX      DD 2D        AND LX     DD A5
  537.           ADD A, HX   DD 84        XOR HX     DD AC
  538.           ADD A, LX   DD 85        XOR LX     DD AD
  539.           ADC A, HX   DD 8C        OR  HX     DD B4
  540.           ADC A, LX   DD 8D        OR  LX     DD B5
  541.           SUB HX      DD 94        CP  HX     DD BC
  542.           SUB LX      DD 95        CP  LX     DD BD
  543.         
  544.         b) Verschiebeoperation SLIA reg8
  545.         Der Befehl SLIA schiebt den Inhalt des betroffenen Registers nach 
  546.         links wie der SLA-Befehl und füllt zusätzlich von links mit 1 auf. 
  547.         Das höchstwertige Bit wandert dabei ins Carry-Flag:
  548.         00001000 SLIA => 00010001 SLIA => 00100011
  549.         
  550.           Mnemonic:     Op-Code:      Mnemonic:     Op-Code:
  551.           SLIA B        CB 30         SLIA H        CB 34
  552.           SLIA C        CB 31         SLIA L        CB 35
  553.           SLIA D        CB 32         SLIA (HL)     CB 36
  554.           SLIA E        CB 33         SLIA A        CB 37
  555.         
  556.           SLIA (IX+ofs) DD CB ofs 36
  557.           SLIA (IY+ofs) FD CB ofs 36
  558.         
  559.         
  560.         c) Lade-Verschiebe- bzw. Lade-Bit-Operationen
  561.         Diese Operationen sind Kombinationen aus Lade- und Verschiebe- bzw. 
  562.         Bitoperationen. Die Verschiebe- bzw. Bitoperation bezieht sich dabei 
  563.         immer auf (IX+ofs) oder (IY+ofs). Das Ergebnis dieser Operation wird 
  564.         dabei direkt in (IX+ofs) oder (IY+ofs) gespeichert, zusätzlich aber 
  565.         auch in ein anderes Register übertragen.
  566.         Beispiele sind für IX gegeben. Durch Austausch des Prefixes 0DDH 
  567.         gegen 0FDH erhält man die entsprechenden IY-Befehle.
  568.         
  569.         Es gibt folgende Befehle:
  570.           LRLC wie RLC + LD        LSRA  wie SRA  + LD
  571.           LRRC wie RRC + LD        LSLIA wie SLIA + LD
  572.           LRL  wie RL  + LD        LSRL  wie SRL  + LD
  573.           LRR  wie RR  + LD        LRES  wie RES  + LD
  574.           LSLA wie SLA + LD        LSET  wie SET  + LD
  575.         
  576.         
  577.         
  578.  
  579.  
  580.  
  581.  
  582.           Lade-Verschiebe-Operationen:
  583.           Mnemonic: LBef reg8, (IX+ofs)  Op-Code: DD CB ofs xx
  584.           z.B.    : LRLL D, (IX+10)      Op-Code: DD CB 0A  12
  585.         
  586.         
  587.           xx  LBef  LRLC  LRRC  LRLL  LRR   LSLA  LSRA  LSLIA LSRL
  588.           reg8
  589.           B         00    08    10    18    20    28    30    38
  590.           C         01    09    11    19    21    29    31    39
  591.           D         02    0A    12    1A    22    2A    32    3A
  592.           E         03    0B    13    1B    23    2B    33    3B
  593.           H         04    0C    14    1C    24    2C    34    3C
  594.           L         05    0D    15    1D    25    2D    35    3D
  595.           A         07    0F    17    1F    27    2F    37    3F
  596.         
  597.         
  598.           Lade-Res-Operationen:
  599.           Mnemonic: LRES reg8, bit, (IX+ofs)  Op-Code: DD CB ofs xx
  600.           z.B.    : LRES H, 4, (IX+05)        Op-Code: DD CB 05  A4
  601.         
  602.           xx   bit 0   1   2   3   4   5   6   7
  603.           reg8  
  604.           B        80  88  90  98  A0  A8  B0  B8
  605.           C        81  89  91  99  A1  A9  B1  B9
  606.           D        82  8A  92  9A  A2  AA  B2  BA
  607.           E        83  8B  93  9B  A3  AB  B3  BB
  608.           H        84  8C  94  9C  A4  AC  B4  BC
  609.           L        85  8D  95  9D  A5  AD  B5  BD
  610.           A        87  8F  97  9F  A7  AF  B7  BF
  611.         
  612.         
  613.           Lade-Set-Operationen:
  614.           Mnemonic: LSET reg8, bit, (IX+ofs)  Op-Code: DD CB ofs xx
  615.           z.B.    : LSET L, 2, (IX+07)        Op-Code: DD CB 07  D5
  616.         
  617.           xx   bit 0   1   2   3   4   5   6   7
  618.           reg8
  619.           B        C0  C8  D0  D8  E0  E8  F0  F8
  620.           C        C1  C9  D1  D9  E1  E9  F1  F9
  621.           D        C2  CA  D2  DA  E2  EA  F2  FA
  622.           E        C3  CB  D3  DB  E3  EB  F3  FB
  623.           H        C4  CC  D4  DC  E4  EC  F4  FC
  624.           L        C5  CD  D5  DD  E5  ED  F5  FD
  625.           A        C7  CF  D7  DF  E7  EF  F7  FF
  626.         
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.