Directives conditionnelles

Directives conditionnelles

RASM supporte un ensemble de directives qui permettent d'influer sur l'assemblage en vérifiant des expressions conditionnelles. D'une manière générale, lorsque des variables sont utilisées dans ces expressions, il faut impérativement qu'elles soient définies au moment de l'évaluation.

ASSERT

ASSERT condition
ASSERT condition,texte,...

Cette directive évalue la condition et arrête l'assemblage si la condition est fausse. Un texte optionnel (usage similaire à la directive PRINT) peut-être envoyé à la console.

ASSERT $<#38
ASSERT data<#3FFF,'les donnees debordent de la page!'

IF, IFNOT, ELSE, ELSEIF, ELSEIFNOT condition

IF condition  ... ELSE ...  ENDIF
IF condition  ... ELSEIF condition ...  ENDIF
IF condition  ... ELSEIF condition ...  ELSE ... ENDIF
IFNOT condition  ... ELSE ...  ENDIF
IFNOT condition  ... ELSEIF condition ...  ENDIF
IFNOT condition  ... ELSEIF condition ...  ELSE ... ENDIF

Définir des blocs d'assemblage conditionnel en fonction d'une expression

CODE_PRODUCTION=1
if CODE_PRODUCTION
   or #80
else
  and #7F
endif
out (c),a

IFDEF, IFNDEF

Définir des blocs conditionnel en fonction de l'existence ou non d'une variable, d'un label, d'un alias ou d'une macro

IFDEF production
or #80
ENDIF

UNDEF

UNDEF variable

Supprime une variable de RASM. Si la variable n'existe pas, la directive est sans effet.

IFUSED, IFNUSED

Définir des blocs conditionnels selon qu'une variable, un label ou un alias ait été utilisé ou non dans une expression, au moment de l'appel de ces directives.

SWITCH, CASE, DEFAULT, BREAK, ENDSWITCH

La syntaxe est similaire au switch/case du langage C, avec la particularité de pouvoir écrire plusieurs blocs CASE avec la même valeur, ce qui offre plus de souplesse au code conditionnel (mutualiser partiellement du code entre différents cas). On termine un bloc SWITCH avec la direction ENDSWITCH.

grouik=5
switch grouik
nop ; en dehors du périmètre d'un CASE, ce NOP ne sera pas produit
case 3
defb 'A'
case 5
defb 'B'
case 7
defb 'C'
break
case 8
defb 'D'
case 5
defb 'E'
break
default
defb 'F'
endswitch

; sortie => BCE

L'analyseur passera dans le case 5, continuera dans le case 7 qui fait un break, il y aura une reprise dans le deuxième case 5. La balise default sera ignorée car nous sommes passés précédemment dans au moins un case.

Sauf mention contraire, le contenu de cette page est protégé par la licence Creative Commons Attribution-ShareAlike 3.0 License