"end main" 指令破坏了 MASM Hello World,与 "end" 一起工作正常吗?
"end main" directive breaks a MASM Hello World, works fine with "end"?
我正在调试我的 hello world 程序,结果 so I straight up copied and pasted the example from this website 陷入了 visual studio 和 运行。
成功了。然后我又花了三十分钟试图找出破坏它的错误。原来这是最后一行。下面的代码不起作用,唯一改变的是文件末尾的 end main
到 end
.
所以这个汇编,但不起作用,使用 end main
; requires /coff switch on 6.15 and earlier versions
.386
.model small,c
.stack 1000h
.data
hello db "Hello world!",0
.code
includelib libucrt.lib
includelib legacy_stdio_definitions.lib
includelib libcmt.lib
includelib libvcruntime.lib
extrn printf:near
extrn exit:near
public main
main proc
push offset hello
call printf
push 0
call exit
main endp
end main
但这个版本确实有效,只使用 end
; requires /coff switch on 6.15 and earlier versions
.386
.model small,c
.stack 1000h
.data
hello db "Hello world!",0
.code
includelib libucrt.lib
includelib legacy_stdio_definitions.lib
includelib libcmt.lib
includelib libvcruntime.lib
extrn printf:near
extrn exit:near
public main
main proc
push offset hello
call printf
push 0
call exit
main endp
end
我只听说这是一个可选步骤,您可以采取该步骤来告诉程序代码从哪里开始。另外,为什么它甚至会破坏程序?
您不需要“end main”,因为您不希望您的入口点是 main,因为这是一个 libc 程序,您希望在调用 main 之前启动 C 库和 运行。
您不是 start.asm 自己写的;不要像使用无 libc 的汇编程序那样设置“end main”。
我正在调试我的 hello world 程序,结果 so I straight up copied and pasted the example from this website 陷入了 visual studio 和 运行。
成功了。然后我又花了三十分钟试图找出破坏它的错误。原来这是最后一行。下面的代码不起作用,唯一改变的是文件末尾的 end main
到 end
.
所以这个汇编,但不起作用,使用 end main
; requires /coff switch on 6.15 and earlier versions
.386
.model small,c
.stack 1000h
.data
hello db "Hello world!",0
.code
includelib libucrt.lib
includelib legacy_stdio_definitions.lib
includelib libcmt.lib
includelib libvcruntime.lib
extrn printf:near
extrn exit:near
public main
main proc
push offset hello
call printf
push 0
call exit
main endp
end main
但这个版本确实有效,只使用 end
; requires /coff switch on 6.15 and earlier versions
.386
.model small,c
.stack 1000h
.data
hello db "Hello world!",0
.code
includelib libucrt.lib
includelib legacy_stdio_definitions.lib
includelib libcmt.lib
includelib libvcruntime.lib
extrn printf:near
extrn exit:near
public main
main proc
push offset hello
call printf
push 0
call exit
main endp
end
我只听说这是一个可选步骤,您可以采取该步骤来告诉程序代码从哪里开始。另外,为什么它甚至会破坏程序?
您不需要“end main”,因为您不希望您的入口点是 main,因为这是一个 libc 程序,您希望在调用 main 之前启动 C 库和 运行。
您不是 start.asm 自己写的;不要像使用无 libc 的汇编程序那样设置“end main”。