我通过“MIPS汇编”学习了汇编语言编程的概念。我写了几个程序,如斐波纳契,堆栈相关的东西等。现在我想进入下一个层次,32位Windows汇编的.386指令集。
这是我已经拥有的。
.386
.model flat, stdcall
.stack 4096
ExitProcess PROTO, deExitCode:DWORD
.data
msg db "Hello, World!", 0
.code
main PROC
INVOKE ExitProcess, 0
main ENDP
END main
但是我怎么调用像print_string这样的系统函数呢?我真的不知所措。我尝试了一些相关的SO答案,但是它们使用NASM,所以对我来说不起作用。
2条答案
按热度按时间hmae6n7t1#
这是一个基本的WIN32控制台模式 HelloWorld! ASM程序,用MASM 615编译,运行在我的Win10,64位系统上。如果有任何修改(如果有),可以咨询作者的网站,使其编译VS 2019等。
uqjltbpv2#
启用指令并使用指向字符串的指针调用printf的示例masm代码。之所以指定旧库,是因为从Visual Studio 2015开始,printf和scanf现在在编译C源文件时内联,而汇编将需要使用旧库。如果程序同时包含C和汇编源文件,则不需要旧库。
可能需要自定义生成步骤。创建一个空的Windows控制台项目,添加程序集源文件,右键单击程序集源文件名,然后单击属性,将"从生成中排除"设置为"否",然后设置自定义生成步骤参数:
对于调试版本:
对于发布版本,不需要Zi:
示例源代码:
对于64位版本,请使用ml64.exe而不是ml.exe。