| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1137 人关注过本帖
标题:大家看看我们编的汇编语言为什么不对啊?
只看楼主 加入收藏
T.O.E
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-5-5
收藏
得分:0 

DAA

执行操作:执行之前必须先执行ADDADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存话在AL寄存器中.

不过我不太明白是什么意思.嘿嘿


2006-05-06 14:04
汪洋
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-5-5
收藏
得分:0 

在计算机中,ADD等指令对BCD码做运算也是用的与十六进制相同的进位方式,即满十六进一。
可是BCD码表示的十进制数却应该是满十进一。
因此,可以这样说,ADD对BCD码运算时,该进位的时候却没有进位,必然带来错误的结果。
DAA就是用来校正这个结果的,使结果成为一个正确的BCD码。


2006-05-06 15:32
仁者无敌
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2006-3-5
收藏
得分:0 
看一个高手给回的:
你老师的程序有语法错误!(当然也有可能是你抄错了)
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指令就可以了。

I am a programmer !
2006-05-07 08:53
快速回复:大家看看我们编的汇编语言为什么不对啊?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022299 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved