汇编案例 之 HEX到ASCII码的转换
如何对一位十六进制的数字,将之转换为ASCII码?
需要提前熟悉的一些指令:
数据传送:MOV
指令
位操作:SHR
十进制调整指令DAA
加法指令 ADC
ADD
将 DL中的2位16进制数,分别转换为ASCII码,存入BH,BL。 (16进制数默认大写存储)
例:DL = 6AH => BH = 36H, BL = 41H
方案一:
;th:数H => A =>
MOV dl ,6AH
;高位
MOV AL,DL ; AL = 高低H
MOV CL,4 ;
SHR AL,CL ; 两位H数右移1位,左边补0 ,即0高H
ADD AL,00H
DAA ;
;通过AF标志位,判定是否多加一
LAHF
AND AH,10H
SHR AH,CL
ADD AL,AH
DAA
ADD AL,30H ;
DAA ;高H 转换完成
MOV BH,AL ;存到BH
;低位类似操作
MOV AL,DL
AND AL,0FH ;保留低位数 即0低H
ADD AL,00H
DAA
LAHF
AND AH,10H
SHR AH,CL
ADD AL,AH
DAA
ADD AL,30H ;
DAA ;低H 转换完成
MOV BL,AL ;存到BL
HLT
方案二:
;th: 0 - 30H , A - 41H
MOV DL ,6Ah
MOV AL,DL ; AL = 高低H
MOV CL,4 ;
SHR AL,CL ; 两位H数右移1位,左边补0 ,即0高H
ADD AL,90H ; 9高H
DAA ;
ADC AL,40H ;
DAA ;高H 转换完成
MOV BH,AL ;存到BH
MOV AL,DL
AND AL,0FH ;保留低位数 即0低H
ADD AL,90H
DAA
ADC AL,40H ;
DAA ;低H 转换完成
MOV BL,AL ;存到BL
HLT