用查表的方法将一位十六进制数转换成与它相应的ASCII码

首先对于将十六进制数转换成他相应的ascll这句话是什么意思?
举个例子,比如说一位十六进制他的取值为
0-f,那么我们将它存贮在内存中,他们的ascll字符显示并不是0,1,2,3,…,a,b,c这样的字符

而我们的目的就是让他们在内存中转化为相应的0,1,2,3,…,a,b,c(ascll字符)

这个转换方式我们不采用通过运算方式来取得,而是采用查表的方式

这是我们需要查的表
他要怎么使用的呢?

举个例子:
我们有一个以字节存储的存储单元,保存的值为:01H
他的ascll吗对应的16进制为31H,我们只要找到表中的31H将他保存起来就能得到对应的ascll

以次类推我们可以得到1,2,3,4,5,6,…这些16进制对应的ascll了

查表方法:
xlat指令
设置bx为偏移地址,al为偏移量,找到[bx+al]中的值后保存到al中
bx这个偏移地址就是我们表头地址,表头地址通过lea指令取得

最后相应的源程序在下面(说明:中间用来暂时保存数据的寄存器si可以替换成其他的寄存器)

assume ds:data,cs:code
data segment
table	DB  30H,31H,32H,33H,34H,35H,36H,37H
       	DB  38H,39H,41H,42H,43H,44H,45H,46H

hex DB 03H;设置你想要的转换的16进制数
ascll DB 0;用于保存转换之后的值
data ends

code segment
start:
mov ax,data
mov ds,ax
lea si,table
mov al,hex
mov bx,si
XLAT
mov ascll,al
code ends
end start
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值