Syntaxe générale

La syntaxe supportée par RASM se veut souple. Il n'est pas nécessaire d'indenter vos sources, si ce n'est pour des raisons esthétiques. Il n'est pas nécessaire d'utiliser le symbole ":" pour définir un label, bien qu'il soit possible de le faire. Les deux points seront simplement ignorés.

Les fichiers peuvent être au format windows ou linux, une conversion interne et transparente sera réalisée.

RASM n'est pas sensible à la casse, toutes les lettres sont converties en majuscules, aussi ne soyez pas surpris de ne voir que des majuscules dans les messages d'erreur (sauf affichage étendu). Les symboles sont aussi par défaut exportés en majuscules mais il est possible de les exporter en respectant la casse avec l'option de ligne de commande -ec

Ne tentez pas de donner un nom identique à un label, une macro, un alias, une variable, l'erreur sera sans appel.

Commentaires

La saisie de commentaires sous RASM est classique et précédée du point-virgule. Tous les caractères suivants sont ignorés jusqu'au prochain retour chariot. Il est aussi possible d'utiliser la syntaxe du C, à savoir le double slash (//) pour débuter un commentaire, ainsi que les marqueurs /* et */ pour délimiter des blocs de commentaires sur plusieurs lignes.

Labels

Les labels permettent de nommer une adresse mémoire liée à du code ou des données. Il n'est pas nécessaire de les placer en début de ligne ou de les faire suivre par ":"
Il existe des labels spéciaux (voir chapitre sur les labels) dits de contexte (proximité, locaux, points d'arrêt)

Mnémoniques Z80

Toutes les instructions documentées et non documentées sont supportées.

L'adressage 8 bits des registres d'index IX et IY se fait indifféremment avec LX, IXL ou XL, etc.

Les instructions complexes avec IX et IY s'écrivent de la façon suivante:

RES 0,(ID+d),r

Instructions non documentées:

out (<byte>),a
in a,(<byte>)
in 0,(c)
in f,(c)
sll <registre ou mémoire>
sl1 <registre ou mémoire>

Syntaxes spéciales

Il existe des raccourcis qui permettent de rendre le code plus compact et plus lisible.

PUSH BC,DE,HL => PUSH BC:PUSH DE:PUSH HL

POP BC,DE,HL => POP BC:PUSH DE:PUSH HL

NOP 5 => NOP:NOP:NOP:NOP:NOP

LD BC,BC => LD B,B:LD C,C
LD BC,DE => LD B,D:LD C,E
LD BC,HL => LD B,H:LD C,L
LD DE,BC => LD D,B:LD E,C
LD DE,DE => LD D,D:LD E,E
LD DE,HL => LD D,H:LD E,L
LD HL,BC => LD H,B:LD L,C
LD HL,DE => LD H,D:LD L,E
LD HL,HL => LD H,H:LD L,L
LD HL,(IX+n) => LD H,(IX+n+1):LD L,(IX+n) ; idem avec BC et DE
LD (IX+n),HL => LD (IX+n+1),H:LD (IX+n),L ; idem avec BC et DE

LD HL,SP => LD HL,0 : ADD HL,SP ; attention, modifie les flags!

EXA => EX AF,AF'

SRL BC => SRL B : RR C
SRL DE => SRL D : RR E
SRL HL => SRL H : RR L

SRA BC => SRA B : RR C
SRA DE => SRA D : RR E
SRA HL => SRA H : RR L

SLL BC => SLL C : RL B
SLL DE => SLL E : RL D
SLL HL => SLL L : RL H

SLA BC => SLA C : RL B
SLA DE => SLA E : RL D
SLA HL => SLA L : RL H

RR BC => RR B : RR C
RR DE => RR D : RR E
RR HL => RR H : RR L

RL BC => RR C : RR B
RL DE => RR E : RR D
RL HL => RR L : RR H

RLC BC => SLA B : RL C : RR B : RLC B
RLC DE => SLA D : RL E : RR D : RLC D
RLC HL => SLA H : RL L : RR H : RLC H

RRC BC => SRL B : RR C : RL B : RRC B
RRC DE => SRL D : RR E : RL D : RRC D
RRC HL => SRL H : RR L : RL H : RRC H

SRL8 BC => LD C,B : LD B,0
SRL8 DE => LD E,D : LD D,0
SRL8 HL => LD L,H : LD H,0
SRL8 IX => LD XL,XH : LD XH,0
SRL8 IY => LD YL,YH : LD YH,0

RST Z,#38 => JR Z,$+1 ; l'opcode est l'adresse relative de saut!
RST NZ,#38 => JR NZ,$+1
RST C,#38 => JR C,$+1
RST NC,#38 => JR NC,$+1
Sauf mention contraire, le contenu de cette page est protégé par la licence Creative Commons Attribution-ShareAlike 3.0 License