'What is IF ELSE and ENDIF Directives in Assembly language? I am trying to make a program in which some conditon true message is show up
Dosseg
.model small
.stack 100h
.data
X db 89
z db ?
msg1 db "heloo$"
.code
main proc
mov ax,@data
mov ds,ax
mov z,offset x
;X=89
Y=-3
IF (z LT 0) OR (z GT 79)
lea dx,msg1
mov ah,9
int 21h
ENDIF
IF (Y LT 0)
lea dx,msg1
mov ah,9
int 21h
ENDIF
mov ah,4ch
int 21h
MAIN ENDP
END MAIN
Solution 1:[1]
As shown in the question, if else endif are assembly time conditionals that either include or exclude lines of assembly code. In Microsoft Masm (6.11 or later), .if .else .endif are run time conditionals. Link to Masm dot directives:
https://docs.microsoft.com/en-us/cpp/assembler/masm/directives-reference?view=msvc-170
Solution 2:[2]
In structured programming we have the if-then statement, which has a pattern like this:
if ( condition )
then-part
In assembly language's if-goto-label style (while still in C) the same pattern is like this:
if ( ! condition ) goto endIf1;
then-part
endIf1:
In the if-goto-label style, we tell the program when to skip the then-part, as compared with C where we tell the program when to execute the then-part. Thus, the condition for if-goto-label needs to be negated.
The construct if ( condition ) goto endIf1; is C's version of a conditional branch. In assembly language that conditional branch is usually done as a compare & branch sequence. For example:
if ( Y < 0 )
print "hello"
becomes:
if ( Y >= 0 ) goto endIf1;
print "hello"
endIf1:
which becomes:
cmp Y, 0
jge endIf1
lea dx, msg1
mov ah, 9
int 21h
endIf1:
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | rcgldr |
| Solution 2 |
