Reputation: 6033
what is the difference of .IF and IF directive in assembly? in document for .IF :
.IF condition1
statements
[[.ELSEIF condition2
statements]]
[[.ELSE
statements]]
.ENDIF
and for IF :
IF expression1
ifstatements
[[ELSEIF expression2
elseifstatements]]
[[ELSE
elsestatements]]
ENDIF
Upvotes: 0
Views: 5383
Reputation: 1
Wrong "IF-ELSEIF-ELSE-ENDIF (without the dot) are compile-time directives. The assembler will test the conditions, and based on the results, will only include one of the sequences of statements in the resulting program. They serve the same purpose as the C preprocessor directives #if, #elif, #else, and #endif.
.IF-.ELSEIF-.ELSE-.ENDIF (with the dot) are execution-time directives. The assembler will generate comparison and jumping instructions. They serve the same purpose as C statements in the form if (...) { ... } else if (...) { ... } else { ... }."
True .if marks the beginning of a section of code which is only considered part of the source program being assembled if the argument (which must be an absolute expression) is non-zero.
reference: http://web.mit.edu/gnu/doc/html/as_toc.html#SEC65
Upvotes: -3
Reputation:
IF-ELSEIF-ELSE-ENDIF (without the dot) are compile-time directives. The assembler will test the conditions, and based on the results, will only include one of the sequences of statements in the resulting program. They serve the same purpose as the C preprocessor directives #if
, #elif
, #else
, and #endif
.
.IF-.ELSEIF-.ELSE-.ENDIF (with the dot) are execution-time directives. The assembler will generate comparison and jumping instructions. They serve the same purpose as C statements in the form if (...) { ... } else if (...) { ... } else { ... }
.
Note: I'm not fluent in masm, so there might be errors in the notation of these examples.
something EQU 1
somewhere:
mov ax, 42
IF something == 1
xor bx, 10
ELSE
mov bx, 20
ENDIF
add ax, bx
During the preprocessing phase of compilation, the compiler will test the conditions in IF
and ELSEIF
statements (without the dot), and select one of the blocks of code that will end up in the program. The above code is turned into the following:
somewhere:
mov ax, 42
xor bx, 10
add ax, bx
Another example:
something EQU 1
somewhere:
mov ax, 42
mov dx, something
.IF dx == 1
xor bx, 10
.ELSE
mov bx, 20
.ENDIF
add ax, bx
During the preprocessing phase of compilation, the compiler will turn .IF
-statements (with the dot) into assembly instructions. The above code is probably turned into the following:
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
The conditions are actually checked at execution time.
Upvotes: 4