📄 22.asm
字号:
DATA SEGMENT
RBUF DB 10H ;定义缓冲区用于存放输入的数
DB ?
DB 10H DUP(?)
DATA ENDS
STACK SEGMENT PARA STACK
DB 10H DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV SI,02H
LEA DX,RBUF ;输入四位十六进制数,将ASCII码存入缓冲区中
MOV AH,0AH
INT 21H
MOV DL,0AH ;换行
MOV AH,02H
INT 21H
MOV DL,0DH ;回车
MOV AH,02H
INT 21H
MOV CX,3 ;赋计数初值
MOV DX,00H
L1: MOV AL,RBUF[SI] ;取缓冲区中的ASCII码
CALL ATH ;调用ASCII码转十六进制数子程序
OR DL,AL ;将转换后的数存入DL中
PUSH CX
CMP CX,0
JLE L2
MOV CL,4
SHL DX,CL ;左移四位,将新存入的数放DH中
POP CX
INC SI
DEC CX
JGE L1
L2: MOV AX,DX ;将数存入AX
MOV CX,4
L3: PUSH CX
CMP CX,0
JLE L4
MOV CL,4
ROL AX,CL ;循环左移,调整读取的数间位置
MOV BL,AL
CALL ASC ;调用转ASCII码子程序
PUSH AX
MOV DL,BL
MOV AH,02H ;显示结果
INT 21H
POP AX
POP CX
DEC CX
JGE L3
L4: MOV AH,4CH ;返回操作系统
INT 21H
ATH PROC ;ASCII码转十六进制数子程序
PUSH CX
AND AL,07FH ;保留低7位,即ASCII码
CMP AL,30H ;控制输入量是大于等于30H的数,否则无效
JGE J1
JMP J5
J1: CMP AL,39H ;大于则转J2,说明是字符A-F
JG J2
SUB AL,30H ;否则减30H后转J4,说明是数字0-9
JMP J4
J2: CMP AL,41H ;逐步缩小范围,控制字符在A-F
JGE J3
JMP J5
J3: CMP AL,46H
JG J5
SUB AL,37H
J4: AND AL,0FH
J5: POP CX
RET
ATH ENDP
ASC PROC ;转ASCII码子程序
PUSH CX
AND BL,0FH
CMP BL,09H
JLE J6
ADD BL,07H
J6: ADD BL,30H
POP CX
RET
ASC ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -