回 帖 发 新 帖 刷新版面

主题:怎么程序只能运行一次? 请大家帮忙 有分给的

我编写了一个程序   是书上的例子 是一个在CMD上面显示  HOW ARE YOU! 的程序

当我用LINK生成1.EXE后 直接运行1.exe就能够显示HOW ARE YOU!   然后关了CMD窗口重新开一个CDM窗口  再运行程序1.exe就不会显示了  

程序如下所示:
STACK    SEGMENT STACK
DB       200 DUP(0)
STACK    ENDS
DATA     SEGMENT
BUF      DB 'HOW ARE YOU! $'
DATA     ENDS
CODE     SEGMENT
         ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN:   MOV   AX,DATA
         MOV   DS,AX
         LEA   DX,BUF
         MOV   AH,9
         INT   21H
         MOV   AH,4CH
         INT   21H
         CODE  ENDS
END BEGIN

大家帮我看下  最好在自己的机子上面试一下  谢谢 

还有就是这个程序为什么要有堆栈段了  它与代码段里面哪句代码有联系?

回复列表 (共5个回复)

沙发


[em2]不知道你说的"运行"是怎么运行哦,应该是用debug来调试吧!其实那个exe文件并没有把那个库文件包括进来,他是通过link.exe来把那个库文件包括进来的,当你再次打开一个cmd的时候当然不能直接再运行啦,必须要再次链接,不像一些高级语言!
都一个学期没有摸汇编了,上个学期老师讲的太少了,自己也花的时间太少,今天看到你的程序不难,似曾相似,但又怎么也想不起来.不得不打开masm的文件夹看有哪些命令,然后再回忆之前学过的,没想到还真让我给想出来了,也算是又学到了知识啦!在这也谢谢你的"提醒".看到你的签名很有个性,能交个朋友不?你应该也还是在读书吧?QQ:75205694

板凳

[color=FF0000]STACK    SEGMENT STACK
DB       200 DUP(0)
STACK    ENDS[/color]
DATA     SEGMENT
BUF      DB 'HOW ARE YOU! $'
DATA     ENDS
CODE     SEGMENT
         ASSUME CS:CODE,DS:DATA,[color=FF0000]SS:STACK[/color]
BEGIN:   MOV   AX,DATA
         MOV   DS,AX
         LEA   DX,BUF
         MOV   AH,9
         INT   21H
         MOV   AH,4CH
         INT   21H
         CODE  ENDS
END BEGIN
没错,就是像1楼所说的,每次要重新link一便,我试过了,还有你说堆栈段,就如上面红色的部分,上面的堆栈段没了的话,下面的那个SS:STACK也就没必要了,执行的时候会有个警告,no stack defined,也就是没定义堆栈段,不过对结果没影响。

3 楼

谢谢楼上两位大哥的解释  我明白了   不过还想问下  有没有办法让程序每次执行之前不需要重新LINK一次   而是直接可以运行

4 楼

这个我倒是不知道,你最好问一问身边的高手,每个人的思维总是有限的嘛。

5 楼

你是在XP的CMD下出现这种情况的吗?
这好象和库文件没啥关系。
根本不用重新LINK,用DEBUG -G 一下就行了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册