📄 p27.asm
字号:
.model small
.stack 100
.data
CR EQU 0AH
LF EQU 0DH
INP DB 2 DUP(0)
MES1 DB CR,LF,'ENTER HEX NO $'
MES2 DB CR,LF,'BCD NO $', CR,LF
MES3 DB CR,LF,'INPUT IS INVALID HEX NO $'
BUFF DB 05
DB 00
DB 05 DUP(0)
CNT1 DW 0
.code
MAIN : MOV AX,@data ; Initialise data segment
MOV DS,AX
; HEX to BCD
MOV AH,09H
LEA DX,MES1 ; Display string
INT 21H
MOV AH,0AH ; Buffered keyboard I/P
LEA DX,BUFF
INT 21H
MOV CH,02H
XOR DI,DI
MOV SI,01H
INC DI
INC DI
BACK: MOV AH,BUFF[DI]
; ASCII to HEX
CMP AH,60H
JG ALPHA
CMP AH,3AH
JL NEXT
SUB AH,37H
JMP DISP
NEXT: SUB AH,30H
JMP DISP
ALPHA: SUB AH,57H
DISP:
MOV CL,04H
ROR AH,CL
INC DI
MOV AL,BUFF[DI]
CMP AL,60H
JG ALPHA1
CMP AL,3AH
JL NEXT1
SUB AL,37H
JMP DISP1
NEXT1: SUB AL,30H
JMP DISP1
ALPHA1: SUB AL,57H
DISP1:
OR AH,AL
MOV INP[SI],AH
DEC SI
INC DI
DEC CH
JNZ BACK
MOV CNT1,00H
MOV AX,WORD PTR INP
LOOP2: MOV CH,00H
MOV BX,0AH
MOV DX,00H
DIV BX ; Divide the number by 10
PUSH DX ; Store the remainder
INC CNT1
CMP AX,0
JNZ LOOP2
MOV AH,09H
LEA DX,MES2 ; Display string
INT 21H
DIS : POP DX
MOV AH,02H
ADD DL,30H
INT 21H
DEC CNT1
CMP CNT1,0
JNZ DIS
JMP EXIT
TER: MOV DX,00H
MOV AX,09H
LEA DX,MES2 ; I/P is invalid HEX number
INT 21H
EXIT: MOV AH,4CH ; Terminate
INT 21H
END MAIN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -