我正在x64 Windows操作系统中使用MASM。我想调用Windows api,然后输出一些字符串到屏幕上。
我正在Windows操作系统中学习x64汇编编程。今天我想打印一些结果到控制台。然而,与Linux操作系统不同,在Windows中我们可以直接使用系统调用,而不会有任何麻烦。我写了下面的程序来打印一个hello world消息到控制台,但它没有显示任何内容。我不知道这段代码有什么问题。
GetStdHandle PROTO
ExitProcess PROTO
WriteConsoleA PROTO
.data
message DB "Hello World",0
message_size DW SIZEOF message
.code
main PROC
SUB RSP, 5 * 8
MOV RCX, -11
CALL GetStdHandle
MOV RCX, RAX
LEA RDX, message
MOV R8, SIZEOF message - 1
LEA R9, message_size
MOV QWORD PTR [RSP + 4 * SIZEOF QWORD], 0
CALL WriteConsoleA
MOV RCX, 0
CALL ExitProcess
main ENDP
END
2条答案
按热度按时间tzdcorbm1#
您是否将其链接为控制台应用程序?Windows区分写入stdout的控制台应用程序(这是您正在做的)和创建窗口并运行消息循环的GUI应用程序。
您需要指定
/subsystem:console
作为链接器标志。可能有一个MASM选项/指令做同样的事情。l7wslrjt2#
将汇编语言文件添加到现有Visual Studio C++项目(控制台
/SUBSYSTEM:CONSOLE
X64应用程序)后,代码运行良好。