永发信息网

如何把一位16进制的数转换成对应的ASCII码 2

答案:2  悬赏:20  手机版
解决时间 2021-01-31 01:14
  • 提问者网友:相思似海深
  • 2021-01-30 08:21
如何把一位16进制的数转换成对应的ASCII码 2
最佳答案
  • 五星知识达人网友:几近狂妄
  • 2021-01-30 09:02
补充:之前第一段话说的有问题,所以修改了下,如下:(另外提交的时候没注意,第一个兄弟的回答已经是正确的了^_^)
主要思想是0~9转为对应的ASCII码时加30h,而a,b,c,d,e,f则加37h,比30h多出来的7h就是通过adc(多加了CF的01h)以及daa(多加了06h)实现的。

先说对0~9的,以5为例,
and al,0fh
add al,90h
变为95h
daa
这个时候的daa,由于95h低位,高位都小于9,且无进位,所以不变
adc al,40h
95h + 40h + CF = D5h
daa
低位不变,高位大于9,所以加60h,变为35h,且CF = 1
最终结果为35h,即字符5对应的ascii码53.

然后是A~F,以C为例:
and al,0fh
add al,90h
变为9Ch
daa
这个时候的daa,先看低位,由于低位是C,大于9,所以加06h,结果变为A2h,再看高位,高位A,大于9,所以加60h,变为02h,CF = 1(有进位)

adc al,40h
adc操作,02h + 40h + CF = 43h
daa
此时43h低高位都小于9,所以无变化。最后结果43h,也即C的ASCII码67
全部回答
  • 1楼网友:蕴藏春秋
  • 2021-01-30 10:30
这段程序的难点就是daa的作用: 如果al的低4位大于9或af=1,则al的内容加06h,并将af置1;然后如果al的高4位大于9或cf=1,则al的内容加60h,且将cf置1。如果两个都不满足,则将af,cf清零。 1. 如果al的值是0-9,那么: add al,90h ---------al变成90-99h daa ---------al不变 adc al,40h ---------al为d0-d9 daa ---------al加上60h,变成30-39h,正是0-9的ascii码。 2. 如果al的值是a-f,那么: add al,90h ---------al变成9a-9fh daa ---------al加6,高4位变a,所以再加60h,成00-05,且cf=1 adc al,40h ---------al为41-46h,正是a-f的ascii码。 daa ---------al不变
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯