# Program that prompts the user to type a hex number of four hex digits or less, and outputs it in binary on the next line. If the user......

``` .MODEL SMALL
.STACK 100H

.DATA
PROMPT_1  DB  \'Enter the hexadecimal number ( max 4-digit ) : \$\'
PROMPT_2  DB  0DH,0AH,\'The equivalent 16-bit binary number is : \$\'
ILLEGAL   DB  0DH,0AH,\'Illegal hex number. Try again : \$\'

COUNT     DB  ?

.CODE
MAIN PROC
MOV AX, @DATA                ; initialize DS
MOV DS, AX

LEA DX, PROMPT_1             ; load and display the string PROMPT_1
MOV AH,9
INT 21H

@START_1:                    ; jump label
LEA DX, ILLEGAL            ; load and display the string ILLEGAL
MOV AH, 9
INT 21H

@START:                      ;
XOR BX, BX                 ; clear BX
MOV COUNT, 30H             ; initialize loop counter

@START_2:                    ; jump label
MOV AH, 1                  ; set input function
INT 21H                    ; read a character

CMP AL, 0DH                ; compare Al with CR

CMP COUNT, 30H             ; compare COUNT with 0

@SKIP:                     ; jump label

CMP AL, \"A\"                ; compare AL with \"A\"

CMP AL, \"F\"                ; compare AL with \"F\"

@DECIMAL:                  ; jump label
CMP AL, 30H              ; compare AL with 0

CMP AL, 39H              ; compare AL with 9

@OK:                       ; jump label

INC COUNT                  ; increment the COUNT variable

AND AL, 0FH                ; convert the ascii into binary code

MOV CL, 4                  ; set CL=4
SHL AL, CL                 ; shift AL towards left by 4 positions

MOV CX, 4                  ; set CX=4

@LOOP_1:                   ; loop label
SHL AL, 1                ; shift AL towards left by 1 position
RCL BX, 1                ; rotate BX towards left by 1 position
; through carry

CMP COUNT, 34H              ; compare COUNT with 4

@END:                        ; jump label

LEA DX, PROMPT_2             ; load and display the string PROMPT_2
MOV AH, 9
INT 21H

MOV CX, 16                   ; set CX=16
MOV AH, 2                    ; set output function

@LOOP_2:                     ; loop label
SHL BX, 1                  ; shift BX towards left by 1 position
MOV DL, 30H                ; set DL=0

@ONE:                      ; jump label
MOV DL, 31H              ; set DL=1

@DISPLAY:                  ; jump label
INT 21H                  ; display a character