十六进制转ascii_十六进制转ASCII在线转换
把一位16进制数转化为对应的ASCII码。
4个2进制位为一个16进制数,2进制1111为16进制F,2进制中千位的1=8,百位的1=4,十位的1=2,个位的1=1,将各个位的数作相应转换再相加,的到的数就是10进制数0-15,可轻松转换成16进制。如01011100,可看成是两组2进制数0101和1100,则这个数就是16进制的5C。
十六进制转ascii_十六进制转ASCII在线转换
十六进制转ascii_十六进制转ASCII在线转换
10转16:
100以内一点的10转16心算比较快,复杂的用“计算器”算了。10转16用传统的计算方式可以了,就是大于15小于256的10进制数除以16为的值为十位的16进制数,其余数为个位的16进制数,没余数则个位为0。如61的16进制是3D,61除以16得3余13,3作十位数,13转成D为各位数。
16转10:
用相反的道理,将十位数乘以16加上个位数。如5A,将5乘以16得80,加上A的10进制10,结果是90。
这段程序的难点就是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不变
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
---------al为41-46H,正是A-F的ASCII码。
daa
---------al不变
;设x,已经在r2中。
mov
a,
r2
;取来x
clr
csubb
a,
#3ah
jc
end_c
subb
a,
#07h
end_c:
add
a,
#0ah
;转换后的十六进制数,在a中。
ret
就这些。
理解DAA的作,就不难明白
以下截取自INTEL手册,应该已经很清楚了,无需更多描述
old_AL
AL;
old_CF
CF;
CF
0;
IF
(((AL
AND
0FH)
>9)
or
AFal,40h
1)
THC;清进(借)位位EN
AL
AL
+6;
CF
old_CF
or
(Carry
from
AL
AL
+6);
AF
1;
ELSE
AF
0;
FI;
IF
((old_AL
>99H)
or
(old_CF
=1))
THEN
AL
AL
+60H;
CF
1;
ELSE
CF
0;
FI;
用汇编怎么将16进制转ASCII码?
入栈比如说1aH
---------al为d0-d9转换成ASCII就是31h,41h
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。