A中的二进制数(0-F)转化为相应的ASCII码

来源:百度知道 编辑:UC知道 时间:2024/06/30 19:56:16
这是高教社教材上的一个例题,我拿来编译不能通过。
例4.8:将A中的二进制数(0-F)转化为相应的ASCII码。
程序如下:
CNV:ADD A,#90H;
DA A;
ADC A,#40H;
DA A;
RET;
以下是书上的解释:如果执行ADD A,#90H和DA A两条指令后产生进位,则说明被转换二进制数不大于09H,否则小于0AH,(这后面的我看不懂)后两条指令在于产生正确的高位ASCII代码;二进制数大于09H时为4H;二进制数大于0AH时为3H。在KEIL上编译不能通过。改为ADD(C) A,#40H;算出来的ASCII码也不正确。恳请高人指点!

我觉得这个讲的有些问题,按照我的理解,这代码是正确的

举例子说明如下:

假设 (1)A中的值是9
add a,#90h 之后 a中的值是 99h
da a 之后,a 还是 99h

这个时候 cy=0;

adc a,#40h 之后,a中的值是 0d9h
da a 之后, a 中的值是 39h

这个时候cy=1,而A中的值就是原来的9的ASCII码

(2)A=0AH
前两句执行之后,A中的值为 00H
此时CY=1;

接着 ADC A,#40H
得到 A=41H
DA A 执行之后,A=41H
这就是大写字母A的ASCII码
按上面的方法去验证,
所以说 书本上的这个方法是正确的,但是说法有误
正确的说法是: 如果执行前两条指令后产生进位,则说明被转换二进制数大
于09H,否则小于或者等于09H
如果被转换二进制数大于09H,那么执行完后两句指令之后
A的高位为4,否则是3