3. Instrukce, pseudoinstrukce, makra

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, …

Výsledný kód je:

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.