Preprocesor
Instrukce pro preprocesor začínají vždy tečkou. Provedou se ještě před parsováním zdrojového textu.
Pseudoinstrukce | Význam |
---|---|
.include filename | Vloží obsah jiného souboru do tohoto místa. |
.incbin filename | Vloží obsah jiného souboru do tohoto místa binárně, tj. nepovažuje ho za zdrojový kód pro assembler, ale za sérii dat, která bude vložena tak jak je. |
.macro macro_name | Označuje začátek definice makra. Tyto definice nelze vnořovat. |
.rept počet | Zopakuje instrukce od tohoto místa až po .endm tolikrát, kolik říká parametr |
.endm | Konec definice makra / smyčky REPT |
Makra
Makro se definuje pomocí pseudoinstrukcí .macro a .endm. Parametry jsou číslovány od 1 a odkazovány pomocí zápisu %%1, %%2, %%3, …
.macro decadd adi %%1 daa .endm ; Ukázka použití decadd $22
Výsledný kód je:
0000 ; Ukázka použití **MACRO UNROLL - DECADD 0000 87 22 ADI $22 0001 27 DAA
Pseudoinstrukce
Slouží k ovlivnění běhu překladače nebo pro vložení obsahu do výsledného kódu. Některé z nich lze z důvodu zpětné kompatibility používat bez úvodní tečky, ty jsou v následující tabulce uvedené bez tečky (ale lze použít i tečkovanou verzi).
Pseudoinstrukce | Význam |
---|---|
db (aliasy: defb, fcb) | Vložení bajtů. Umožňuje DB čísel i řetězců. Lze použít syntaxi 10 DUP (123) – N krát zopakuje to, co je v závorce. |
dw (aliasy: defw, fdb) | Vložení slov. Lze použít syntaxi 10 DUP (123) – N krát zopakuje to, co je v závorce. |
ds (aliasy: defm, defs, rmb) | Vložení prázdného místa |
fill value, count | Vyplní paměť (count byte) hodnotou value. |
bsz (alias: zmb) | Vložení určeného počtu nulových bajtů |
org addr | Nastavení počáteční adresy překladu |
.phase addr | Kód bude vygenerován na tom místě, kde je zapsán (tedy dle příslušného ORG), ale bude vygenerován tak, jako by byl od adresy addr. Hodí se k psaní rutin, co budou později v paměti přeneseny na jiné místo |
.dephase | Konec bloku .phase |
.align N | Další instrukce bude na adrese, která je dělitelná N. Volné místo je volné a ve výsledném HEX není nijak ovlivněné. |
.ent addr | Nastavení adresy, od které se kód spustí v emulátoru. Použití např.: .ent $ |
.engine název | Nastavení emulátoru, ve kterém bude spouštěn kód při emulaci. Dostupné jsou: pmi, pmd, bob, jpr, sbcz80, sbc6502, sbc09 a zxs |
equ (alias: =) | Přiřazení hodnoty návěští. Např. VIDRAM equ $4000 |
.if cond | Podmínka – blok instrukcí až po .endif se vloží pouze tehdy, pokud podmínka platí (výraz je nenulový) |
.ifn cond | Podmínka – blok instrukcí až po .endif se vloží pouze tehdy, pokud podmínka neplatí (výraz je nulový) |
.endif | Ukončuje blok s podmínkou. Pozor! Podmínky nelze vnořovat! |
.block | Zahajuje blok lokálních proměnných. Všechna návěští v tomto bloku jsou lokální, tzn. mimo blok na ně nelze odkazovat. Pokud chcete definovat takové návěští, |
které bude vidět i zvenčí bloku, napište před jeho jméno znak @. Možné využití je u knihoven, vkládaných pomocí include. | |
.endblock | Ukončuje blok lokálních proměnných |
4. Výrazy a čísla
Assembler z důvodu kompatibility umožňuje zápis v různých formátech. Decimální čísla se zapisují bez jakéhokoli prefixu či postfixu (10,42,-5). Hexadecimální v několika různých tvarech – s prefixy 0x nebo $ či s postfixem h: 0x12AB, $12AB nebo 12ABh jsou ekvivaletní zápisy. Binární konstanty se zapisují pomocí prefixu „%“ nebo postfixem „b“: 01001b / %01001
Parser v assembleru zvládne i složitější matematické výrazy se závorkami apod. Lze použít operátory +, -, *, /, % (modulo), # (modulo – alias k % kvůli komaptibilitě) a další. Ve výrazech lze použít návěští v roli proměnných. Lze použít i pseudoproměnnou $, která obsahuje aktuální hodnotu čítače adres.