assembly 以64位masm格式打印hello

ne5o7dgx  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(180)

我对编程一窍不通。
我想写一个用64位masm来显示hello的程序。
我将VS代码与ml64.exe和gcc一起使用。
下面是我写的:

;; file name: hello.asm
printf proto

.data
    messenge dq "hello", 0

.code
main proc
    sub rsp, 40h
    mov rcx, messenge
    call printf
    add rsp, 40h
    ret
main endp

end

然后我编写一个脚本来进行组装、链接和执行:

@:: file name: run.cmd
@ml64 /c hello.asm
@gcc -o hello.exe hello.obj
@del *.obj
@hello.exe

它是这样的:

C:\code\MASM>run.cmd
Microsoft (R) Macro Assembler (x64) Version 14.25.28614.0
Copyright (C) Microsoft Corporation.  All rights reserved.

 Assembling: hello.asm

它没有输出hello字符串。
我该怎么修呢?

6bc51xsx

6bc51xsx1#

我只使用ml64 hello.asm(没有gcc)构建了这个。

;; file name: hello.asm
printf proto
includelib msvcrt.lib
includelib legacy_stdio_definitions.lib

.data
    messenge db "hello", 13, 0

.code
main proc
    sub rsp, 40h
    mov rcx, offset messenge
    call printf
    add rsp, 40h
    ret
main endp

end

基本上就是迈克尔说的。

zc0qhyus

zc0qhyus2#

要使ml 64 hello.asm正常工作,需要在命令行上将LIB环境变量设置为:
Microsoft Visual Studio中的所有程序文件都是由Microsoft Visual Studio开发的。C:\程序文件(x86)\Windows工具包\10\Lib\10.0.18362.0\um\x64; C:\程式档(x86)\Windows套件\10\数据库\10.0.18362.0\ucrt\x64
您可以使用文件资源管理器查找x64版本的libcmt.lib、kernel32.lib和ucrt.lib,并将它们替换为上面的LIB设置。
ml64.exe位于C:\程序文件(x86)\Microsoft Visual Studio \2019\社区\VC\工具\MSVC\14.28.29333\bin\Hostx64\x64中,您需要将其添加到PATH变量中。
然后:ml 64 hello. asm
它将创建您可以运行的hello.exe。

相关问题