64位Windows汇编器

8
我想编写64位Windows汇编代码(最好使用NASM)。我在谷歌上搜索过,但好像找不到一个64位Windows编译器。有些网站提到了ml64,但似乎已不再包含在VC++中。我试过32位汇编,但显然它只会在我的64位机器上崩溃。在64位Windows机器上,是否可以编写、编译和运行32位汇编应用程序?还是必须为64位编写和编译代码?谢谢。

记录一下,ml64.exe 已经包含在我的 VS2010 安装中了。但我不确定它是否包含在 Express 版本中... - PinnyM
1
我是VS2010 Express用户,ml64.exe位于Visual Studio/VC/bin/amd64和bin/x86_amd64文件夹中。 - DCoder
如果您想使用NASM,只需访问http://nasm.us并下载NASM的Win32版本。它可以在64位系统上运行,并创建64位应用程序。 - Jim Mischel
@PinnyM和DCoder - 谢谢,我从来没有检查过自己的目录doh。我也在我的电脑上找到了它。 - Jayson Kane
@JimMischel - 我尝试过了,但我的程序总是崩溃。也许我有一些糟糕的代码。我会尝试找一个比我之前跟随的更好的教程。 - Jayson Kane
2个回答

6
Yasm(*)是一款现代化的、多平台的NASM重写汇编器,可以为x86和AMD64/x86-64指令集进行汇编。然而,您可能需要的是链接器,将汇编后的目标代码/文件链接起来创建可执行文件。至少完全免费的MinGW(Minimal GNU for Windows)项目包含一个链接器(称为ld),能够从对象文件(ELF和PE对象格式,至少)中汇编出32位和64位Windows可执行文件。您可以在64位环境下交叉编译/构建32位项目,反之亦然,只要您向汇编器和链接器提供正确的命令行参数即可。有关更精确的详细信息,请参阅您选择的工具的文档。

*) http://yasm.tortall.net/


没错。谢谢你指出来,我匆忙之间完全误解了上下文并混淆了术语。我已经编辑和增强了答案以提供更多细节。 - zxcdw
非常感谢您的帖子。我正在使用ld进行链接,但它似乎仍然崩溃。您是否可以提供一小段汇编代码片段,可以使用yasm编译并在64位系统上链接,但是以32位汇编语言编写?它不必执行任何操作。只需编译并运行而不崩溃即可。那将是太好了。 - Jayson Kane
我没有Windows机器可用,但在Linux机器上,你只需要使用yasm的“-f”标志(在Windows中是'\f'吗?)以“elf32”(Windows为“win32”)作为参数。然后,对于ld,您可以使用“-m”(再次,使用\而不是-)标志,并使用“elf_i386”参数来生成32位可执行文件。但是,在Windows上,您需要不同的标志。您可以通过使用“-V”(\V ..?)标志查看可用的仿真标志,然后选择最佳候选项并尝试一下。总的来说,代码如下:“yasm some.asm -o some.o -f elf32”和“ld some.o -o some.bin -m elf_i386”。所以只需更改elf32和elf_i386即可。 - zxcdw

3

在64位Windows上,可以编写、汇编和运行32位汇编语言。我曾经在我的Windows 7 x64机器上用masm32编写了一些实用程序。如果您想要汇编64位代码,我相信FASM支持64位目标代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接