help with "no stack segment" warning

Started by zhoujian, March 11, 2009, 02:33:26 AM

Previous topic - Next topic

zhoujian

i have a "HOW ARE YOU !" program:

.386
DATA    SEGMENT USE16
BUF     DB "HOW ARE YOU !$"
DATA    ENDS

STACK   SEGMENT USE16
        DB 200 DUP(0)
STACK   ENDS

CODE    SEGMENT USE16
        ASSUME CS:CODE,DS:DATA,SS:STACK
START:  MOV AX,DATA
        MOV DS,AX
        LEA DX,BUF
        MOV AH,9
        INT 21H
        MOV AH,4CH
        INT 21H
CODE    ENDS
        END START

i cmd like this:

C:\masm32\bin>ml /c howareyou.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

Assembling: howareyou.asm

C:\masm32\bin>link16 howareyou.obj;

Microsoft (R) Segmented Executable Linker  Version 5.60.339 Dec  5 1994
Copyright (C) Microsoft Corp 1984-1993.  All rights reserved.

LINK : warning L4021: no stack segment

C:\masm32\bin>howareyou
HOW ARE YOU !
C:\masm32\bin>

i have already assumed "SS:STACK"
but i get a  "no stack segment" warning when i link it
can anyone tell me why?
thank you!

MichaelW

#1
The linker is apparently looking for the combine type STACK. The syntax is:

name SEGMENT [align] [READONLY] [combine] [use] ['class']

So this should work:

STACK SEGMENT STACK USE16

Also, for ML 6.0 and later it's not necessary to specify ASSUME CS:CODE.
eschew obfuscation

dedndave

before we had USE16, we declared the stack segment as follows:

STACK   SEGMENT PARA STACK 'STACK'
            dw          256 dup(?)
STACK   ENDS

there is no reason for it to be paragraph aligned, however
i always used WORD align type
notice that the combine type is unique to stack segments
i.e. the segment will not be combined with other segment types