IF-SINON-ELSE-ENDIF (sans le point) sont des directives de compilation. L'assembleur testera les conditions et, en fonction des résultats, n'inclura qu'une des séquences d'instructions dans le programme résultant. Ils ont la même fonction que les directives du préprocesseur C #if
, #elif
, #else
et #endif
. .IF-.ELSEIF-.ELSE-.ENDIF (avec le point) sont des directives d'exécution. L'assembleur générera des instructions de comparaison et de saut. Ils servent le même but que les déclarations C sous la forme if (...) { ... } else if (...) { ... } else { ... }
.
Note: Je ne suis pas à l'aise masm, donc il pourrait y avoir des erreurs dans la notation de ces exemples.
something EQU 1
somewhere:
mov ax, 42
IF something == 1
xor bx, 10
ELSE
mov bx, 20
ENDIF
add ax, bx
Au cours de la phase de pré-traitement de la compilation, le compilateur testera les conditions dans IF
et ELSEIF
déclarations (sans le point), puis sélectionnez l'un des blocs de code qui prendra fin dans le programme. Le code ci-dessus est transformé en ce qui suit:
somewhere:
mov ax, 42
xor bx, 10
add ax, bx
Un autre exemple:
something EQU 1
somewhere:
mov ax, 42
mov dx, something
.IF dx == 1
xor bx, 10
.ELSE
mov bx, 20
.ENDIF
add ax, bx
Au cours de la phase de pré-traitement de la compilation, le compilateur tournera .IF
-statements (avec le point) dans les instructions d'assemblage. Le code ci-dessus est probablement transformé en ce qui suit:
something EQU 1
somewhere:
mov ax, 42
mov dx, 1
cmp dx, 1
jnz else_clause
xor bx, 10
jmp past_endif
else_clause:
mov bx, 20
past_endif:
add ax, bx
Les conditions sont réellement vérifiées au moment de l'exécution.
Avez-vous par exemple pour montrer diffrent? –
Ajout d'exemples, comme demandé. –
Merci par exemple –