题目要求
使用 Masm for Windows 软件编程,将一个十六进制数组转换成其ASCII码组并显示出来。
代码设计
采用查表法,实现一组十六进制数转换为ASCII码显示。先设置ASCII码表分别对应0-9以及A-F,以此来对应一位十六进制的数。为了使程序能够输出多个十六进制数的ASCII码,此时需要通过循环控制程序运行,而结束的标志是待查表hex的元素个数。
首先获取hex中的第一个元素,对其进行格式化设置,然后调用2号Dos功能进行输出操作。此时将循环标记si加1,再取出下一个元素,直到全部取出和转换。
代码
DATAS SEGMENT
;此处输入数据段代码
ASCII db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h
;对应0 ~ 9的ASCII码
db 41h,42h,43h,44h,45h,46h
;对应A ~ F的ASCII码
hex db 04h,0bh,0fh,06h,0ah,0dH,00H,09H
;待查的16进制数
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov bx,offset ASCII
;BX指向ASCII码表
lea si,hex
mov cx,LENGTHOF hex ;取得元素个数
again:
mov al, [si]
;AL取得一位16进制数
;恰好就是ASCII码表中的位移
and al, 0fh
;只有低4位是有效的,高4位清0
xlat ;换码:AL←DS:[BX+AL]
mov dl,al ;欲显示的ASCII码送DL
mov ah,2 ;2号DOS功能调用
int 21h ;显示一个ASCII码字符
add si,1 ;指针指向下一个字符
mov dl,20H ;输出空格,间隔
mov ah,2
int 21h
loop again
MOV AH,4CH
INT 21H
CODES ENDS
END START