| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 565 人关注过本帖
标题:下列的程序为什么输不出结果?谢谢指教
只看楼主 加入收藏
syuanq
Rank: 2
等 级:新手上路
威 望:3
帖 子:297
专家分:0
注 册:2006-12-11
结帖率:0
收藏
 问题点数:0 回复次数:7 
下列的程序为什么输不出结果?谢谢指教
data segment
mess db 10 dup(?)
data ends
stack segment stack
db 100 dup(?)
stack ends
code segment
assume cs:code,ds:data
main proc far
push ds
sub ax,ax
push ax

MOV CX,10
MOV AX,0
MOV BX,1
NEXT: ADD AX,BX
SHL BX,1
LOOP NEXT
end next

main endp
code ends
搜索更多相关主题的帖子: 结果 指教 
2006-12-18 19:10
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
收藏
得分:0 

首先每个程序都应该有个入口,你这个程序却找不着,而且也没见着程序返回或结束;虽然能编译通过,但运行这个程序会出错;还有应该这只是个简单的程序,我觉得不必要时尽量避免段间调用;再来没有代码开始,为什么要加上这个结束:end next;再来你想输出结果,程序中却未曾见到输出语句
初步看了你的程序,看来你是想实现1+2+4+...+1024吧保留你原来的方法和过程定义,修改如下:

......
next: ;在这增加一个入口吧,对应你原来的end next包括 ":"号
main proc far
......
NEXT0: ADD AX,BX ;这里的标号换一个吧,程序中不能出现重复标号
SHL BX,1
LOOP NEXT0 ;原标号已经更改,循环语句必然换掉
end next ;看得出这是结束源程序,这句删去吧,不应放在这里
RET ;子程序调用必须带有返回
main endp
code ends
END NEXT

经过上述程序,1+2+4+...+1024的结果就存放在AX中,如果要输出就看你想输入10进制或者是16进制数啦,楼主应该自己能搞定了吧


我是金子,我要闪光的
2006-12-18 20:08
syuanq
Rank: 2
等 级:新手上路
威 望:3
帖 子:297
专家分:0
注 册:2006-12-11
收藏
得分:0 
不行啊!输出还是有错误

[url]www.[/url]欢迎大家的光临,一起交流学习
2006-12-20 21:54
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
收藏
得分:0 
应该没错,我已经调试完
如果有错,把你得到的错误信息贴出来

我是金子,我要闪光的
2006-12-21 15:28
24tian
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-12-17
收藏
得分:0 
回复:(lefttime)[em13]应该没错,我已经调试完如果...
我用WIN-TC试了下楼上的程序是有问题
我改了下:
data segment
mess db 10 dup(?)
data ends
stack segment stack
db 100 dup(?)
stack ends
code segment
assume cs:code,ds:data
main proc far
push ds
sub ax,ax
push ax

MOV CX,10
MOV AX,0
MOV BX,1
NEXT: ADD AX,BX
SHL BX,1
LOOP NEXT
ret
main endp
code ends
END main
编译通过,但这程序没输出代码。
2006-12-21 19:38
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
收藏
得分:0 
嗯,看了下楼上的程序,不过没加程序入口,程序中我已经指出了next:
所以 END main 结束的只是远调用的过程,并不是程序啊

我是金子,我要闪光的
2006-12-21 20:18
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
收藏
得分:0 

没有入口就意味着你这个程序在没有被调用的情况下并不会被执行,举个例子:
CSEG SEGMENT
ASSUME CS:CSEG
MAIN PROC FAR
MOV AH,2
MOV DL,41H
INT 21H
RET
MAIN ENDP
CSEG ENDS
END MAIN

因为这样一个程序没有入口,程序也就不知道从哪里开始执行,也就不会产生我们想要的结果(输出大写字母A)


我是金子,我要闪光的
2006-12-21 20:23
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
收藏
得分:0 

当然没有入口还可以用退出语句来标志要执行代码段
可以在上个程序中添加两句
......
RET
MOV AX,4C00H
INT 21H
......
这样程序也能正常运行,不过这样可不是个好习惯啊


我是金子,我要闪光的
2006-12-21 20:28
快速回复:下列的程序为什么输不出结果?谢谢指教
数据加载中...
 
   



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

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