| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1137 人关注过本帖
标题:大家看看我们编的汇编语言为什么不对啊?
取消只看楼主 加入收藏
仁者无敌
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2006-3-5
收藏
 问题点数:0 回复次数:2 
大家看看我们编的汇编语言为什么不对啊?
题目是这样子的:编写程序实现将十进制数59与27相加.
我们系几乎所有的人都是这样写的:
MOV AX,59
ADD AX,27
而老师说不对,应该这样写:
MOV AX,59H
MOV BX,27H
ADD BX,AX
DAA
不知道为什么?请哪位高手解释一下啊
搜索更多相关主题的帖子: 汇编语言 
2006-05-03 19:45
仁者无敌
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2006-3-5
收藏
得分:0 
四楼兄弟,给大家解释一下嘛

I am a programmer !
2006-05-06 11:59
仁者无敌
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.016688 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved