Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
forth:fgforth:assembler [2013/04/30 18:48] volkerpforth:fgforth:assembler [2013/05/01 13:26] (aktuell) volkerp
Zeile 84: Zeile 84:
 | JRNZ #-5 | -5 # JRNZ, | | JRNZ #-5 | -5 # JRNZ, |
 | RES 0,(IY+4) | 0 4 IY # RES, | | RES 0,(IY+4) | 0 4 IY # RES, |
 +
  
 Hier waren nun hoffentlich alle Varianten dabei. Hier waren nun hoffentlich alle Varianten dabei.
Zeile 128: Zeile 129:
 Thomas Beierlein, 1990 Thomas Beierlein, 1990
  
-====== Reassembliert ======+===== Beispiel =====
  
  
-Ich habe obiges Beispiel getestet. Dabei ist mir aufgefallen, dass bei LABEL noch REVEAL fehlte, sonst ist das LAbel gar nicht sichtbar.+Ich habe obiges Beispiel getestet. Dabei ist mir aufgefallen, dass hinter LABEL noch REVEAL fehlte, sonst ist das Label gar nicht sichtbar. (Oder aber in LABEL muss das HIDE weggepatcht werden).
  
 Folgender Code wird durch den Assembler erzeugt. Man beachte die Umsetzung der Schleifenkonstrukte. Folgender Code wird durch den Assembler erzeugt. Man beachte die Umsetzung der Schleifenkonstrukte.
Zeile 148: Zeile 149:
 4699  0497                              DOVAR 4699  0497                              DOVAR
 469B  21 45 00         LD      HL,0045H         ZK # HL LD, 469B  21 45 00         LD      HL,0045H         ZK # HL LD,
-469E  7C            M1 LD      A,H              BEGIN, H A LD, +469E                M1                          BEGIN,  
-469F  B5               OR      L                L OR,+469E  7C               LD      A,H                H A LD, 
 +469F  B5               OR      L                  L OR,
 46A0  CA A7 46         JP      Z,46A7H          0= NOT WHILE, 46A0  CA A7 46         JP      Z,46A7H          0= NOT WHILE,
-46A3  2B               DEC     HL               HL DEC,+46A3  2B               DEC     HL                 HL DEC,
 46A4  C3 9E 46         JP      469EH            REPEAT, 46A4  C3 9E 46         JP      469EH            REPEAT,
 46A7  C9            M2 RET                      RET, 46A7  C9            M2 RET                      RET,
Zeile 159: Zeile 161:
 46AB  'ABTASTUNG'+#80 46AB  'ABTASTUNG'+#80
 46B4  $+2                               CODE 46B4  $+2                               CODE
-46B6  DB 23         M3 IN      A,(23H)          BEGIN, PORT # IN, +46B6                M3                          BEGIN,  
-46B8  CB 47            BIT     0,             P0 A BIT,+46B6  DB 23            IN      A,(23H)            PORT # IN, 
 +46B8  CB 47            BIT     0,               P0 A BIT,
 46BA  CA B6 46         JP      Z,46B6H          0= NOT UNTIL, 46BA  CA B6 46         JP      Z,46B6H          0= NOT UNTIL,
 46BD  CD 9B 46         CALL    469BH            WAIT #) CALL, 46BD  CD 9B 46         CALL    469BH            WAIT #) CALL,
Zeile 166: Zeile 169:
 46C2  CB 4F            BIT     1,             P1 A BIT, 46C2  CB 4F            BIT     1,             P1 A BIT,
 46C4  C2 CB 46         JP      NZ,46CBH         0= IF, 46C4  C2 CB 46         JP      NZ,46CBH         0= IF,
-46C7  B7               OR      A                A OR,+46C7  B7               OR      A                  A OR,
 46C8  C3 CC 46         JP      46CCH            ELSE, 46C8  C3 CC 46         JP      46CCH            ELSE,
-46CB  37            M4 SCF                      SCF, +46CB  37            M4 SCF                        SCF
-46CC  3A 90 46      M5 LD      A,(4690H)        THEN, PUFFER #) A LD,+46CC                M5                          THEN,  
 +46CC  3A 90 46         LD      A,(4690H)        PUFFER #) A LD,
 46CF  17               RLA                      RLA, 46CF  17               RLA                      RLA,
 46D0  32 90 46         LD      (4690H),       A PUFFER #) LD, 46D0  32 90 46         LD      (4690H),       A PUFFER #) LD,
Zeile 175: Zeile 179:
                                                 END-CODE                                                 END-CODE
 </code> </code>
 +
 +===== Strukturoperatoren =====
 +
 +Die Strukturoperatoren sind forth-gewohnt zu verwenden:
 +
 +flag 0=, CY, PE oder 0<
 +
 +IF...ELSE...THEN
 +
 +<code>
 +flag [NOT] IF,         ; JP /flag M1
 +...                             ; ...
 +[ELSE,                        ; JP M2
 +...                             ; M1: ...
 +THEN,                           ; M2:
 +</code>
 +
 +
 +BEGIN ...flag UNTIL
 +
 +<code>
 +BEGIN,                          ; M1:
 +...                             ; ...
 +flag [NOT] UNTIL,               ; JP /flag M1
 +</code>
 +
 +BEGIN...AGAIN
 +
 +<code>
 +BEGIN,                          ; M1:
 +...                             ; ...
 +AGAIN,                          ; JP M1
 +</code>
 +
 +BEGIN...flag  WHILE...REPEAT
 +
 +<code>
 +BEGIN,                          ; M1:
 +...                             ; ...
 +flag [NOT] WHILE,               ; JP /flag M2
 +...                             ; ...
 +REPEAT,                         ; JP M1
 +                                ; M2:
 +</code>                                 
 +
 +===== Literatur =====
 +
 +Der Assembler ist auch in "Vack, Gert Ulrich: Programmieren mit Forth. VEB Verlag Technik Berlin, 1990" Seite 263-271 beschrieben.
  
  • forth/fgforth/assembler.1367347712.txt.gz
  • Zuletzt geändert: 2013/04/30 18:48
  • von volkerp