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

我的原则很简单:不做不喜欢的事!
2006-05-04 10:53
公子吕
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2006-5-4
收藏
得分:0 
什么学校啊 你们老师那么菜吗?或者他题目有其他要求?
其实汇编和其他的语言不一样的地方就是新手不能马上在电脑上看到自己代码运行的结果,
你找一找网上有没有 ASCII到数字转换 和 数字到ASCII转换 的过程(函数)或者宏 ,有了这两个过程
在机器上运行你自己的代码 ,你会发现汇编和C一样简单.
当然上面说的那两个宏你也可以自己实现,不会很难
2006-05-04 19:28
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
老师说的有道理,确实应该这样写:
MOV AX,59H
MOV BX,27H
ADD BX,AX
DAA 关键就在这一条10进制加法调整指令
请你在DEBUG上调试一下(去掉后缀H)就会明白

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-04 21:14
公子吕
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2006-5-4
收藏
得分:0 

楼上是南大的?景仰一下.

我不知道这个老师的原题是什么样子的,但我觉得
MOV AX,59
ADD AX,27
这两行代码就够了,也没有必要进行DAA
可以试试下面的代码(masm5下汇编通过)
data segment
data ends

code segment
assume cs:code,ds:data

start:
mov ax,data
mov ds,ax
mov al,59
add al,27
mov dl,al
mov ah,2
int 21h
mov ah,7
int 21h
mov ah,4ch
int 21h

code ends
end start

汇编 连接运行后的输出结果是一个大写的字母V(ASCII=86=59+27)所以我上面说要是有把数字转换
为ascii的宏或者过程,输出结果就更明白了.大家练习起来就很容易了.这也是大学里汇编教学不好的
地方,总是纸上谈兵.

2006-05-04 21:43
仁者无敌
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2006-3-5
收藏
得分:0 
四楼兄弟,给大家解释一下嘛

I am a programmer !
2006-05-06 11:59
公子吕
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2006-5-4
收藏
得分:0 
四楼的兄弟是说把两个16进制数相加,然后用DAA转换成BCD (看起来就是十进制)
你们老师既然说求两个十进制数的和,为什么还要把它弄成16进制相加再DAA转换呢
可能你老师说的题目不是你说的那样.
2006-05-06 12:43
汪洋
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-5-5
收藏
得分:0 

我认为老师的意思是输出的结果也应该是十进制,这是问题的关键。
十进制数和十六进制数在内存中的表示是不同的。
比如,MOV AX,27 ;AX中存的是1BH,也就是00011011。
而 MOV AX,27H;AX中存的是27H,也就是00100111。
要想加法得出组合的十进制数,一定要用MOV AX,27H才行。
我也说不大清楚了。


2006-05-06 13:42
汪洋
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-5-5
收藏
得分:0 
那两个十六进制数(27H,59H)其实就是两个十进制数(27,59)的BCD码。

2006-05-06 13:45
公子吕
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2006-5-4
收藏
得分:0 
楼上说的没错,老师就是要求把两个BCD码数相加得出结果也一个BCD码数
2006-05-06 14:00
快速回复:大家看看我们编的汇编语言为什么不对啊?
数据加载中...
 
   



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

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