汇编语言 十六进制转换为ASCII码

用子程序设计的方法,分别把BUF字单元中的四个十六进制数转换为ASCLL代码存入MAS开始的单元中

第1个回答  推荐于2018-03-01
BUF 子单元的的 每个字节的 16 进制数 加上 30h本回答被提问者和网友采纳
第2个回答  2022-04-04

;将AL寄存器中的一位十六进制数转化成ASCII码,显示输出。

;程序如下:

ASSUME CS:CODE

CODE SEGMENT

START:

MOV AL, 0FH ;在这里可写 00H~0FH,这就是一位16进制数

AND AL, 0FH ;无用位清零,保留该数字

;下面是变成ASCII码

CMP AL, 0AH

JB NEXT

ADD AL, 07H

NEXT:

ADD AL, 30H

;下面是显示输出

MOV DL, AL ;送到DL

MOV AH, 2 ;显示单个字符

INT 21H ;显示

MOV AH, 4CH ;结束程序

INT 21H ;返回DOS

CODE ENDS

END START

第3个回答  2010-03-29
请关注最后的注意点
子程序如下:
TRANSLATE:;假设之前已经有LEA SI,BUF
;和LEA DI,MAS
PUSHA
TRANS:
MOV DX,2
LODSB
MOV AH,AL
MOV CL,4
SHR AH,CL
CMP AH,0AH
JB SAH
ADD AH,07H
SAH: ADD AH,30H
CHL AH,CL
AND AL,0FH
CMP AL,0AH
JB SAL
ADD AL,07H
SAL: ADD AL,30H
OR AL,AH
MOV [DI],AL
INC SI
INC DI
DEC DX
JNZ TRANS
POPA
RET
;------------------------END-----------------------

注意点一:
BUF为“字”,即十六位二进制数,分为四个十六进制数,则各数据各为四位二进制数。保证不超过0FH了。那么也就是十六进制数字的转换。

注意点二:
0~9这十个数的ASCII码与数字本身相差为30H,而A~F则是相差了37H,中间的7个是‘,’‘.’‘+’之类的符号。

主程序只需将BUF与MAS的地址关联,然后调用CALL TRANSLATE就可以了。