看一个高手给回的:
你老师的程序有语法错误!(当然也有可能是你抄错了)
DAA指令只能对AL中的结果进行十进制调整。
因此
ADD BX,AX
DAA
是错误的!
正确的写法应为:
MOV AL,59H
MOV BL,27H
ADD AL,BL
DAA
现在来进入正题:
你老师的题目为:编写程序实现将十进制数59与27相加
他的意思是让计算机直接十进制运算,就是结果要与十进制表示一样。
例如:十进制数59与27相加,其结果要形象的表示为86
而让计算机直接十进制运算的方案中有一个为:
将十进制翻译成二进制数去运算,然后对结果进行十进制调整,使之能得到正确的十进制的结果。
我们知道,计算机中的十进制数实际上是十进制数的二进制编码,简称为BCD码(Binary Coded Decimal)。
而在8086指令系统中,如果采用组合的8421-BCD码,即用一个字节表示2位十进制数。
那么:
十进制数35的应表示为:00110101B
写成16进制就为:35H
由此可见,35H能形象直接的表示十进制数的35
那么,题目中要求将十进制数59与27相加,则59写成16进制就为:59H;27写成16进制就为:27H。
当然直接让59H与27H相加的结果为80H,而我们知道十进制数59+27=86,可见59H与27H相加后的结果(80H)并不能形象直接的表示十进制数的86。
因此,还须进行十进制的加法调整,即加上DAA指令,在执行后,计算机会将所得结果80H自动加上06H,使结果为86H,
与十进制数的86相吻合。
当然DAA指令并不是总对结果加上06H,这要看加法后的结果如何,而相应采取不同的措施,但是,我们不用费神,这项工作是由计算机帮我们完成的,我们只要会用DAA指令就可以了。