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
cpm:arnold_assembler [2017/06/09 12:40] – [Hinweise] volkerpcpm:arnold_assembler [2025/09/03 14:55] (aktuell) volkerp
Zeile 26: Zeile 26:
  
  assume RP:0C0h ; keine Optimierung durch AS!  assume RP:0C0h ; keine Optimierung durch AS!
 +
 +Beim **Z80-Prozessor** kann man eine alternative Syntax für Hex-Zahlen aktivieren. Das erfolgt mit
 +       INTSYNTAX +0xhex
 +Dann sind Hex-Zahlen in C-Notation zulässig, z.B. 0xc000
 +
 +Eine weitere Variante ist
 + INTSYNTAX +$hex, +%bin
 +Das erlaubt $efb0, %00100111 zusätzlich zur Suffix-Notation 0EFBh.
 +
 +**Diverses**
 +
 +statt equ EVAL oder .SET
 +
 +SET  und EQU  erlauben die  Definition typenloser  Konstanten, d.h. sie
 +werden  keinem Segment zugeordnet  und ihre Verwendung  erzeugt in kei-
 +nem  Fall eine Warnung wegen  Segment-Vermischung. Während EQU Konstan-
 +ten  definiert, die nicht wieder (mit  EQU) geändert werden können, er-
 +laubt  SET die Definition  von Variablen.
 +
 +Einige  Prozessoren  besitzen  leider  bereits selber einen SET-Befehl.
 +Bei  diesen muß EVAL anstelle von  SET verwendet werden, falls sich der
 +Maschinenbefehl  nicht durch  die andere  Anzahl der Argumente erkennen
 +läßt.  Alternativ ist es auch  immer möglich, durch einen vorangestell-
 +ten Punkt (.SET anstelle SET) explizit den Pseudobefehl aufzurufen.
 +
 +Ausdrücke in IF .. ELSEIF .. ENDIF
 +
 +   !!   log. XOR           
 +   ||   log. OR            
 +   &&   log. AND           
 +   ~~   log. NOT           
 +   >>   log. Rechtsschieben
 +   <<   log. Linksschieben 
 +      Gleichheit         
 +   ==   Alias für =        
 +   <>   Ungleichheit       
 +   !=   Alias für <>       
 +   
 +   MOD #
 +   SHL <<
 +   SHR  >>
 +   
 +PAGE --> NEWPAGE
 +
 +
 +Symbolnamen
 +
 +Wann immer der
 +Name  eines  Symboles  mit  einem  Punkt  (.)  anfängt, wird das Symbol
 +nicht  mit  diesem  Namen  in  der  Symboltabelle abgelegt. Stattdessen
 +wird  der  Name  des  zuletzt  definierten Symbols ohne vorangestellten
 +Punkt  davor gehängt. Auf diese Weise  nehmen Symbole, deren Name nicht
 +mit  einem  Punkt  anfängt,  quasi  die Rolle von 'Bereichsgrenzen' ein
 +und  Symbole, deren Name  mit einem Punkt  anfängt, können in jedem Be-
 +reich  neu verwendet werden. 
 +
 +===== Standard-Funktionen =====
 +
 +<code>
 +; AS-Funktionen
 +hi              function x,(x>>8)&255
 +lo              function x, x&255
 +</code>
  
  
 ===== Makros ===== ===== Makros =====
 +
 +Beim  Aufruf eines Makros werden die beim Aufruf angegebenen Parameter-
 +namen  überall textuell im Befehlsblock eingesetzt  und der sich so er-
 +gebene  Assemblercode wird  normal assembliert. Das funktioniert auch beim Ersetzen des Befehls
 +
 +  LOGOP MACRO LINST
 + LD A,B
 + LINST D ;;apply logical instruction to B and D
 + LD B,A ;;and result to B
 + LD A,C
 + LINST E ;;apply logical instruction to C and E
 + LD C,A ;;and result to C
 + RET
 + ENDM
 +  LOGOP XOR
 +
 +Wichtig  ist, daß der  Assembler alle Parameterna-
 +men  im  case-sensitiven  Modus  in  Großbuchstaben umsetzt, in Strings
 +aber  nie eine  Umwandlung in  Großbuchstaben erfolgt. Die Makroparame-
 +ternamen  müssen in  den Stringkonstanten  daher groß  geschrieben wer-
 +den.
 +
 +Der Unter-
 +strich  erlaubt es, einzelne Makroparameternamen zu einem Symbol zusam-
 +menzuketten, z.B. CALL    part1_part2
 +
 +Ein  etwas  verstecktes  (und  mit  Vorsicht zu nutzendes) Feature ist,
 +Symbolnamen  aus String-Variablen zusammenzubauen,  indem man den Namen
 +des  Strings mit geschweiften  Klammern in den  Symbolnamen einbaut. So
 +kann  man z.B. den Namen eines  Symbols anhand des Wertes eines anderen
 +Symbols festlegen:
 +
 +<code>
 +cnt .set cnt+1
 +temp equ "\{CNT}"
 + jrnz skip{temp}
 + .
 + .
 +skip{temp}: nop
 +</code>
 +
  
 Beispiele: Beispiele:
  • cpm/arnold_assembler.1497012038.txt.gz
  • Zuletzt geändert: 2017/06/09 12:40
  • von volkerp