.MODEL SMALL
.STACK 100H
.DATA
M1 DB 'enter a hex digit : $'
M2 DB 'in decimal : $'
M3 DB 'Do you want to continue? $'
M4 DB 'illigal character.( 0..9 or A..F)$'
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
AGAIN:
LEA DX,M1
MOV AH,9
INT 21H
MOV AH,1
INT 21H
MOV BL,AL
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
CMP BL,48
JGE L1
JMP CHAR
L1:
CMP BL,57
JLE L2
JMP CHAR
L2:
LEA DX,M2
MOV AH,9
INT 21H
MOV AH,2
MOV DL,BL
INT 21H
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
LEA DX,M3
MOV AH,9
INT 21H
MOV AH,1
INT 21H
MOV CL,AL
CMP CL,89
JE AGAIN
CMP CL,121
JE AGAIN
CHAR:
CMP BL,65
JGE L3
JMP WRONG
L3:
CMP BL,70
JLE L4
JMP WRONG
L4:
LEA DX,M2
MOV AH,9
INT 21H
SUB BL,17
MOV AH,2
MOV DL,49
INT 21H
MOV DL,BL
INT 21H
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
LEA DX,M3
MOV AH,9
INT 21H
MOV AH,1
INT 21H
MOV CL,AL
CMP CL,89
JE AGAIN
CMP CL,121
JE AGAIN
JMP EXIT
WRONG:
LEA DX,M4
MOV AH,9
INT 21H
JMP AGAIN
EXIT:
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN