论坛: 编程破解 标题: link一个汇编程序时出现:nostacksegment 复制本贴地址    
作者: qwhacker [qwhacker]       登录
俺根据286的汇编教程编写(实际上是抄)了一个hello,world程序;全文如下:

;在屏幕上输出hello,world程序。

data segment
msg db'Hello,Mr.Frog.$'
data ends

code segment
    assume cs:code,ds:data

start:mov ax,data
      mov ds,ax
      lea dx,msg
      mov ah,9h              ;调用21号中断9h号功能
      int 21h
      mov ax,4c00h          ;调用21号中断4c00h号功能
      int 21h
code ends
end start
编译时没有warning error,也没有severe error;但是link的时候出现:
        LINK:warning L4021:no stack segment
286说:这个没关系,没有的话系统会自动给一个。
但是可以产生exe文件,执行exe文件后可以输出Hello,Mr.Frog.   

为了消除那个:no stack segment,我又在code segment 之前添加了如下内容:
         
stack segment
stack ends
同时将assum那一行改为:assume cs:code,ss:stack,ds:data
结果同没有添加时完全一样。
更改后全文如下:

;在屏幕上输出hello,world程序。

data segment
msg db'Hello,Mr.Frog.$'
data ends

stack segment
stack ends

code segment
    assume cs:code,ss:stack,ds:data

start:mov ax,data
      mov ds,ax
      lea dx,msg
      mov ah,9h
      int 21h
      mov ax,4c00h
      int 21h
code ends
end start

请问link时为什么会出现 no stack segment ?我已经定义了stack了呀。

   


[此贴被 青蛙(qwhacker) 在 05月24日10时13分 编辑过]


[此贴被 青蛙(qwhacker) 在 05月24日10时13分 编辑过]


[此贴被 青蛙(qwhacker) 在 05月24日10时15分 编辑过]


[此贴被 青蛙(qwhacker) 在 05月24日10时17分 编辑过]


[此贴被 青蛙(qwhacker) 在 05月24日10时22分 编辑过]

地主 发表时间: 05-05-24 10:12

回复: 286 [unique]   版主   登录
stack segment
db 500 dup(?)    <-----光定义,还得有实实在在的空间
stack ends

mov ax,stack    <-----也要赋值呀。
mov ss,ax

B1层 发表时间: 05-05-24 12:08

回复: qwhacker [qwhacker]      登录
哦,谢谢286。
再问一个问题:

用lea dx,msg将msg的地址赋值给dx后就直接调用中断输出了,而没有特别指明输出dx寄存器中地址所指的内容。是不是说21H号中断9h功能默认输出dx所指的内容?
如果改为lea ax,msg后输出的是乱码。能不能指定输出ax中的内容或所指的内存单元?

B2层 发表时间: 05-05-24 17:22

回复: 286 [unique]   版主   登录
是说21H号中断9h功能默认输出dx所指的内容

B3层 发表时间: 05-05-24 17:35

回复: qwhacker [qwhacker]      登录
谢谢286,多谢你的汇编连载,是你使我对汇编产生了浓厚的兴趣,让我能够继续学下去!
你的连载比课本有趣多了!

B4层 发表时间: 05-05-24 22:05

回复: 286 [unique]   版主   登录


B5层 发表时间: 05-05-25 09:10

回复: sunhw963 [sunhw963]   论坛用户   登录
如果写成
stack segment stack 'stack'
db 500 dup(?)   
stack ends
是不是就不要赋值了呢?


B6层 发表时间: 05-07-19 15:33

回复: future0906 [future0906]   论坛用户   登录
286斑竹,应该不是没有定义空间的问题吧?

stack segment
stack ends

他的这一句明显有个错误,这并不是一个堆栈段,只是一个名叫stack的段而已啊

应该是这样吧
stack segment stack
stack ends

这样才可以吧?

以上是个人看法

B7层 发表时间: 05-07-21 18:30

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号