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