首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Masm32汇编程序未按预期工作

Masm32汇编程序未按预期工作
EN

Stack Overflow用户
提问于 2011-06-15 05:45:16
回答 3查看 2.5K关注 0票数 2

以下是我在Youtube视频教程中获得的汇编程序的源代码:

代码语言:javascript
复制
.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文件编译了这个程序

代码语言:javascript
复制
ml /c /coff %1.asm
Link /SUBSYSTEM:WINDOWS %1.OBJ

我将bat文件命名为assemble.bat,所以我调用assemble,它将汇编可执行文件。

问题是,当我运行程序时(程序组装得很好,没有错误),程序什么也不做。我在控制台提示符中调用它,它什么也不做,程序只显示一个空行,并返回到命令提示符,就好像什么都没发生一样。

在视频教程中,这家伙组装了他的程序,编译和工作得很好,但对我来说什么都没有发生。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-15 06:25:47

我解决了这个问题。

由于我使用命令"Link /SUBSYSTEM:WINDOWS %1.OBJ“进行链接,因此无法正常工作。对于控制台应用程序,链接命令应为"Link /SUBSYSTEM:CONSOLE %1.OBJ”。

票数 1
EN

Stack Overflow用户

发布于 2011-06-15 05:48:54

至少在正常情况下,StdInStdOut将是标准输入和输出的句柄。要读/写,您需要调用像ReadFileWriteFile这样的函数,将StdInStdOut作为参数传递,分别指定要读/写的文件。

编辑:下面是一个简短的示例:

代码语言:javascript
复制
.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
票数 0
EN

Stack Overflow用户

发布于 2018-07-31 14:22:24

紧跟在MODEL平面语句之后添加:

代码语言:javascript
复制
includelib  \masm32\lib\kernel32.lib   ;fixed the problem!
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6350514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档