汇编案例 之 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
相关推荐
一品人家5 天前
win32汇编环境,得到当前日期时间的例子
汇编
试试看1685 天前
自制操作系统第三天
汇编·系统架构
0xCC说逆向7 天前
Windows逆向工程入门之汇编位运算
c语言·汇编·windows·安全·逆向
矮油0_o7 天前
30天开发操作系统 第 20 天 -- API
c语言·汇编·操作系统
charlie1145141918 天前
从0开始的操作系统手搓教程 4:做好准备,跳到加载器(Loader)
汇编·学习·操作系统·调试·mbr·手搓教程·bochs
官子无敌刘小路10 天前
汇编简介&常用语法
汇编
二进制怪兽14 天前
[笔记] 汇编杂记(持续更新)
汇编
bae-唯一15 天前
关于32位和64位程序的传参方法及虚拟机调试工具总结
汇编·学习
E_han16 天前
7.list
开发语言·汇编·数据结构·c++·算法·list
二进制怪兽16 天前
[笔记] x86汇编语言:从实模式到保护模式之第一章 十六进制计数法
汇编