Assembly MASM中没有堆栈段警告

Assembly MASM中没有堆栈段警告,assembly,stack,warnings,masm,Assembly,Stack,Warnings,Masm,我是集会的乞丐。 我正试图用MASM在屏幕上打印一封信。我定义了堆栈段,但当我尝试链接程序时,收到以下警告: 链接:警告L4021:无堆栈段 但是,该程序运行良好! 我怎样才能解决这个问题?请用简单的话解释。多谢各位 printa.asm: stk segment DW 32 dup(?) stk ends cds segment assume cs:cds,ss:stk main proc far mov ah,02 mov dl

我是集会的乞丐。 我正试图用MASM在屏幕上打印一封信。我定义了堆栈段,但当我尝试链接程序时,收到以下警告:

链接:警告L4021:无堆栈段

但是,该程序运行良好! 我怎样才能解决这个问题?请用简单的话解释。多谢各位

printa.asm:

stk segment
    DW 32 dup(?)
stk ends
cds     segment
    assume cs:cds,ss:stk
    main proc far
        mov ah,02
        mov dl, 'A'
        int 21h

        mov ah,01
        int 21h

        mov ah,4ch
        int 21h
    main endp
cds ends
END main
printa.lst:

Microsoft (R) Macro Assembler Version 6.00              11/06/15 09:38:16
printa.asm                           Page 1 - 1


 0000               stk segment
 0000  0020 [               DW 32 dup(?)
        0000
       ]
 0040               stk ends
 0000               cds     segment
                    assume cs:cds,ss:stk
 0000                   main proc far
 0000  B4 02                    mov ah,02
 0002  B2 41                    mov dl, 'A'
 0004  CD 21                    int 21h

 0006  B4 01                    mov ah,01
 0008  CD 21                    int 21h

 000A  B4 4C                    mov ah,4ch
 000C  CD 21                    int 21h
 000E                   main endp
 000E               cds ends
                END main
Microsoft (R) Macro Assembler Version 6.00              11/06/15 09:38:16
printa.asm                           Symbols 2 - 1




Segments and Groups:

                N a m e                 Size     Length   Align   Combine Class

cds  . . . . . . . . . . . . . .    16 Bit   000E     Para    Private 
stk  . . . . . . . . . . . . . .    16 Bit   0040     Para    Private 


Procedures,  parameters and locals:

                N a m e                 Type     Value    Attr

main . . . . . . . . . . . . . .    P Far    0000     cds   Length= 000E Private

       0 Warnings
       0 Errors
我找到了解决办法。 我们需要为堆栈段定义“组合类型”

stk segment
应该是:

stk segment stack
唯一适用于堆栈段的联合收割机类型是“堆栈”

(MASM官方参考)

参考1:根据,第一个
堆栈
不带引号将堆栈附加到
stk
段,而第二个
堆栈
带引号将类属性附加到is

参考2:引用人:

堆栈与PUBLIC相同,但在生成的二进制文件中创建元数据,以便操作系统使用此属性(在发生连接后)将SS:SP设置为段的末尾

段定义SSEG段堆栈“STACK”定义了一个具有以下内容的段:
*名称SSEG.
*组合属性堆栈,使链接器发出元数据以将SS:SP设置为指向其末尾。
*类属性“STACK”,使链接器将其识别为堆栈段

stk segment
但是有一种丑陋的方法:

assume cs:cds,ss:stk

stk segment
    dw 32 dup(0)
stk ends

cds segment
main:
  mov ss,stk ; (1)
  mov sp,64 ; (2)
  mov ax,4c00h
  int 21h
cds ends

end main

(1) (2)明确指定:以手动方式。SS而不是
stk段
,尝试
堆栈段堆栈使用16
,然后在
假设
列表中
SS:STACK
。从删除的链接中,仅回答:。另外:官方MASM参考:在MASM中完美工作