法一:
由于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