十六进制数转换成ASCII码,急急急!!!
要把一个字节单元中的两位十六进制数字转换成ASCII码,需要先分离这两个数字,即把高4位和低4位分开然后转换成各自的ASCII码。转换时,按0~9和A~F两种不同的情况,采用分支,分别处理,0~9的数字,加30H,而A~F的数字,加37H。
程序如下。
DATA SEGMENT
NUM DB 7CH
STR DB ?,?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START: MOV AX,DATA
MOV DS,AX ;数据段段址送DS
LEA BX,NUM ;取NUM的偏址,送BX
LEA DI,STR ;取STR的偏址,送DI
MOV AL,[BX]
AND AL,0F0H ;留下高四位
MOV CL,4
STR AL,CL
CALL CHANGE ;调转换成ASCII的子程序
MOV AL,[BX]
AND AL,0FH ;留下低四位
CALL CHANGE ;调转换成ASCII的子程序
MOV AH,4CH
INT 21H
MAIN ENDP
CHANGE PROC ;转换成ASCII的子程序
CMP AL, 10
JL NEXT ;如果(AL)<10,那么(AL)+30H,
ADD AL,’A’-‘0’-10 ;否则(AL)+37H
NEXT: ADD AL,’0’
MOV [DI],AL ;存ASCII码
INC DI ;修改地址指针
RET
CHANGE ENDP
CODE ENDS
END START
看不懂。
请高手帮我解释成C语言代码好吗?或是每句解释一下?