STACK1 SEGMENT STACK ;堆栈段开始
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT ;数据段开始
MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$'
MES1 DB 'Show a as hex:',0AH,0DH,'$'
SD DB 'a'
DATA ENDS
CODE SEGMENT ;代码段开始
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA ;设置 DS 寄存器
MOV DS,AX
MOV DX,OFFSET MES ;取字符串首地址,显示退出提示
MOV AH,09H ;在 DOS 界面显示字符串
INT 21H
MOV DX,OFFSET MES1 ;取字符串首地址,显示字符串
MOV AH,09H
INT 21H
MOV SI,OFFSET SD
MOV AL,DS:[SI] ;把’a’送到 AL 中
AND AL,0F0H ;取字节的高 4 位
MOV CL,4
SHR AL,CL
CMP AL,0AH ;判断是否是 A 以上的数
JB C2
ADD AL,07H ;大于等于 A,数值加 7H
C2: ADD AL,30H ;数值加 30H,转换成 ASCII 码
MOV DL,AL
MOV AH,02H ;将转换的相应 ASCII 码在 DOS 界面下显示
INT 21H
MOV AL,DS:[SI]
AND AL,0FH ;取字节的低 4 位
CMP AL,0AH
JB C3
ADD AL,07H
C3: ADD AL,30H
MOV DL,AL ;显示字符
MOV AH,02H
INT 21H
KEY: MOV AH,1 ;判断是否有按键按下?
INT 16H ;(为观察运行结果,使程序有控制的退出)
JZ KEY
MOV AX,4C00H ;结束程序,退出
INT 21H
CODE ENDS
END START