topic
Input 4-digit decimal data from the keyboard, and output it on the screen in hexadecimal
reference program
DATA SEGMENT
DATA ENDS
STACK SEGMENT PARA STACK
BUF_1 DW 100H DUP (0)
LEN1 EQU $-BUF_1
STACK ENDS
CODESEG SEGMENT
ASSUME CS:CODESEG,SS:STACK,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,LEN1
CALL ENTER
CALL IN_4_DEC ;
MOV DX,AX
CALL DISP_4_HEX ;
MOV AH,4CH
INT 21H
DISP_1_HEX: ;
PUSHF
PUSH AX
PUSH DX
CMP DL,9
JBE L_1_1
ADD DL,07H
L_1_1:
ADD DL,30H
MOV AH,02H
INT 21H
POP DX
POP AX
POPF
RET
DISP_2_HEX:
PUSHF
PUSH AX
PUSH DX
MOV AL,DL
MOV AH,0
MOV DL,10H
DIV DL
MOV DL,AL
CALL DISP_1_HEX
MOV DL,AH
CALL DISP_1_HEX
POP DX
POP AX
POPF
RET
DISP_4_HEX:
PUSHF
PUSH AX
PUSH DX
MOV AX,DX
MOV DL,AH
CALL DISP_2_HEX
MOV DL,AL
CALL DISP_2_HEX
POP DX
POP AX
POPF
RET
ENTER:
PUSH AX
PUSH DX
MOV DL,20H
MOV AH,02H
INT 21H
POP DX
POP AX
RET
IN_1_DEC:
PUSHF
PUSH BX
MOV BH,AH
MOV AH,01H
INT 21H
SUB AL,30H
MOV AH,BH
POP BX
POPF
RET
IN_2_DEC:
PUSHF
PUSH DX
MOV DL,AH
CALL IN_1_DEC
MOV AH,10
MUL AH
MOV DH,AL
CALL IN_1_DEC
ADD AL,DH
MOV AH,DL
POP DX
POPF
RET
IN_4_DEC:
PUSHF
PUSH DX
CALL IN_2_DEC
MOV DL,100
MUL DL ;AL*DL=AX
MOV DX,AX
CALL IN_2_DEC
MOV AH,0
ADD AX,DX
POP DX
POPF
RET
CODESEG ENDS
END START