如何把一位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
主要思想是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不变
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯