一 代码实现
DATA SEGMENT ;数据段
DATA ENDS
CODE SEGMENT ;代码段
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA ;设置数据段
MOV DS,AX
GET_CHAR:MOV AH,1 ;DOS 1号功能调用
INT 21H ;AL=键入数字ASCII码
CMP AL,0DH ;与回车符的ASCII码比较
JE EXIT ;是回车符,转EXIT
SUB AL,30H ;ASCII码转换成BCD码
JL EXIT ;<0(非数字),则退出
CMP AL,9 ;>0,则与9比较
JG EXIT ;>9,退出
CBW
XCHG AX,BX ;将先键入的数->AX
MOV CX,10 ;将10赋值给CX
MUL CX ;将先键入的数×10->AX
XCHG AX, BX ;再次将AX和BX中的值交换,新键入数->AX
ADD BX,AX ;累加,结果存入BX
JMP GET_CHAR ;无条件转移到GET_CHAR处执行
EXIT:
CALl BIN_HEX ;调用子程序,转十六进制并且显示
MOV AH,4CH;返回DOS
INT 21H
MAIN ENDP
;子程序
BIN_HEX PROC NEAR
MOV CH,4;转换后产生4个十六进制数字
ROTATE:MOV CL,4;小循环次数(左移四次)
ROL BX,CL;对BX左移4次
MOV AL,BL;AL<-BL
AND AL,0FH;截得一个十六进制数字
ADD AL,30H;加30H,转换成ASCII码
CMP AL,3AH;与‘9+1’比,>9?
JL DISPLAY;<=9,转显示
ADD AL,7H;>9,将数字0AH-0FH转换成ACSII码
DISPLAY:MOV DL,AL;DL<-待显示数字的ASCII码
MOV AH,2
INT 21H;显示DL中的数字
DEC CH;4个数字是否显示完?
JNE ROTATE;否,转回循环
RET;显示完,退出
BIN_HEX ENDP
CODE ENDS
END MAIN
二 运行结果