法一:
由于0-9的ASCII码=实际值+30h,A-Z的ASCII码=实际值+37h,故直接加对应的数即可
;该程序将一个字节数据以十六进制形式显示(直接加对应数值)
.model small
.stack
.data
hex db 4bh
.code
.startup
;显示高位
mov al,hex
mov cl,4
shr al,cl
mov dl,al
call disp
;显示低位
mov dl,hex
and dl,0fh ;将高位置0
call disp
.exit 0
;显示字符的子程序
disp PROC
cmp dl,9
jbe next ;如果小于等于9,就直接加30h,如果是字母,就需要另外加7
zimu:
add dl,7h
next:
add dl,30h
;显示
mov ah,02h
int 21h
ret
disp ENDP
end
法二:
用查表的方式来实现
;该程序将一个字节数据以十六进制形式显示(以查表方法)
.model small
.stack
.data
hex db 4bh
ascii db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h
db 41h,42h,43h,44h,45h,46h
.code
.startup
mov bx,offset ascii ;取得表的偏移地址,为换码做准备
;显示高位
mov al,hex
mov cl,4
sar al,cl
xlat ;al<--ds:[bx+al]
mov dl,al
mov ah,02h
int 21h
;显示低位
mov al,hex
and al,0fh ;高位为0
xlat
mov dl,al
mov ah,02h
int 21h
.exit 0
end
参考资料:钱晓解《汇编语言程序设计》第4章例4.1