以下是我在Youtube视频教程中获得的汇编程序的源代码:
.386
.model flat, stdcall
option casemap:none
include c:\masm32\include\windows.inc
include c:\masm32\include\masm32.inc
include c:\masm32\include\kernel32.inc
includelib c:\masm32\lib\masm32.lib
includelib c:\masm32\lib\kernel32.lib
.data
message1 db "Type your name: ", 0
message2 db "Your name is ", 0
.data?
buffer db 100 dup(?)
.code
start:
invoke StdOut, addr message1
invoke StdIn, addr buffer, 100
invoke StdOut, addr message2
invoke StdOut, addr buffer
invoke StdIn, addr buffer, 100
invoke ExitProcess, 0
end start我用bat文件编译了这个程序
ml /c /coff %1.asm
Link /SUBSYSTEM:WINDOWS %1.OBJ我将bat文件命名为assemble.bat,所以我调用assemble,它将汇编可执行文件。
问题是,当我运行程序时(程序组装得很好,没有错误),程序什么也不做。我在控制台提示符中调用它,它什么也不做,程序只显示一个空行,并返回到命令提示符,就好像什么都没发生一样。
在视频教程中,这家伙组装了他的程序,编译和工作得很好,但对我来说什么都没有发生。
发布于 2011-06-15 06:25:47
我解决了这个问题。
由于我使用命令"Link /SUBSYSTEM:WINDOWS %1.OBJ“进行链接,因此无法正常工作。对于控制台应用程序,链接命令应为"Link /SUBSYSTEM:CONSOLE %1.OBJ”。
发布于 2011-06-15 05:48:54
至少在正常情况下,StdIn和StdOut将是标准输入和输出的句柄。要读/写,您需要调用像ReadFile和WriteFile这样的函数,将StdIn或StdOut作为参数传递,分别指定要读/写的文件。
编辑:下面是一个简短的示例:
.386
.MODEL flat, stdcall
getstdout = -11
WriteFile PROTO NEAR32 stdcall, \
handle:dword, \
buffer:ptr byte, \
bytes:dword, \
written: ptr dword, \
overlapped: ptr byte
GetStdHandle PROTO NEAR32, device:dword
ExitProcess PROTO NEAR32, exitcode:dword
.stack 8192
.data
message db "Hello World!"
msg_size equ $ - offset message
.data?
written dd ?
.code
main proc
invoke GetStdHandle, getstdout
invoke WriteFile, \
eax, \
offset message, \
msg_size, \
offset written, \
0
invoke ExitProcess, 0
main endp
end main发布于 2018-07-31 14:22:24
紧跟在MODEL平面语句之后添加:
includelib \masm32\lib\kernel32.lib ;fixed the problem!https://stackoverflow.com/questions/6350514
复制相似问题