汇编案例 之 HEX到ASCII码的转换

如何对一位十六进制的数字,将之转换为ASCII码?

需要提前熟悉的一些指令:

数据传送:MOV指令

位操作:SHR

十进制调整指令DAA

加法指令 ADC ADD

将 DL中的2位16进制数,分别转换为ASCII码,存入BH,BL。 (16进制数默认大写存储)

例:DL = 6AH => BH = 36H, BL = 41H

方案一:

assembly 复制代码
;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

方案二:

assembly 复制代码
;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
相关推荐
JCBP_3 天前
QT(4)
开发语言·汇编·c++·qt·算法
sheepwjl4 天前
《嵌入式硬件(十二):基于IMX6ULL的时钟操作》
汇编·arm开发·单片机·嵌入式硬件·时钟·.s编译
DebugKitty4 天前
硬件开发2-ARM裸机开发1-I.MX6ULL - 汇编点灯
汇编·makefile·imax6ull·gpio·电路复用
我菜就多练4 天前
ARM-汇编的基础知识
汇编·arm开发
(Charon)4 天前
函数之间跳转的实现方式详解:setjmp/longjmp、ucontext 与汇编
汇编
起个昵称吧5 天前
立即数、栈、汇编与C函数的调用
c语言·开发语言·汇编
mysla7 天前
嵌入式学习day46-硬件—汇编
汇编·学习
zgc12453677 天前
汇编基础2
汇编
出门吃三碗饭8 天前
编译器构造:从零手写汇编与反汇编程序(一)
android·汇编
JCBP_8 天前
QT(3)
开发语言·汇编·c++·qt·算法