Assembly MASM中没有堆栈段警告
我是集会的乞丐。 我正试图用MASM在屏幕上打印一封信。我定义了堆栈段,但当我尝试链接程序时,收到以下警告: 链接:警告L4021:无堆栈段 但是,该程序运行良好! 我怎样才能解决这个问题?请用简单的话解释。多谢各位 printa.asm: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
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中完美工作