Assembly 64位windows汇编程序

Assembly 64位windows汇编程序,assembly,64-bit,compatibility,32-bit,Assembly,64 Bit,Compatibility,32 Bit,我想编程64位windows程序集(最好使用NASM)。我在谷歌上搜索了很多,但似乎找不到64位windows编译器。一些网站提到了ml64,但它似乎不再包含在VC++中。我试过使用32位汇编,但显然它只是在我的64位机器上崩溃了。是否可以在64位windows计算机上编写、编译和运行32位汇编应用程序?还是应该为64位编写和编译 谢谢。可以在64位Windows上编写、组装和运行32位汇编。我已经在我的Windows7x64机器上用masm32编写了一些实用程序。如果您想汇编64位代码,我相信

我想编程64位windows程序集(最好使用NASM)。我在谷歌上搜索了很多,但似乎找不到64位windows编译器。一些网站提到了ml64,但它似乎不再包含在VC++中。我试过使用32位汇编,但显然它只是在我的64位机器上崩溃了。是否可以在64位windows计算机上编写、编译和运行32位汇编应用程序?还是应该为64位编写和编译


谢谢。

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

Yasm(*)是一种现代的、多平台的NASM重写汇编程序,能够汇编x86和AMD64/x86-64指令集

然而。。。您可能的意思是,您需要一个链接器来链接组装好的目标代码/文件,以创建一个可执行文件。至少完全免费的MinGW(Windows最小GNU)项目包附带了一个链接器(称为ld),该链接器能够从对象文件(至少是ELF和PE对象格式)组装32位和64位Windows可执行文件

如果您向汇编程序和链接器提供了正确的命令行参数,那么您肯定可以在64位环境中交叉编译/构建32位项目,反之亦然。有关更精确的详细信息,请参阅所选工具的文档


*)

为了记录在案,我安装的VS2010中包含了ml64.exe。但我不确定它是否包含在Express版本中…这里的VS2010 Express用户,ml64.exe存在于Visual Studio/VC/bin/amd64和bin/x86_amd64文件夹中。如果您想使用NASM,请转到并下载Win32版本的NASM。它将在64位系统上运行,并将创建64位应用程序。@PinnyM和DCoder-感谢我从未检查过自己的dir-doh。我也在我的电脑上找到了。@JimMischel-我试过了,但是我的程序崩溃了。。也许我有一些坏代码。我会努力找到一个比我之前学的更好的教程。没错。谢谢你指出,我在匆忙中完全误解了上下文,混淆了术语。我已经编辑并增强了答案,以获得更多细节。非常感谢你的帖子。我正在使用ld链接它,但它似乎仍然崩溃。您是否可以向我提供一段汇编代码,该代码可以用yasm编译并链接到64位系统上,但用32位汇编编写?它不需要做任何事情。只需编译并运行而不会崩溃。那太好了。我没有可用的Windows机器,但在Linux机器上,您真正需要做的就是使用带有“elf32”(“win32 for Windows”)的yasm'-f'标志(\f in Windows?)作为参数。然后,对于ld,使用'-m'(再次使用带'elf_i386'参数的\而不是-)标志来生成32位可执行文件。但是,在Windows上需要不同的标志。您可以使用'-V'(\V..?)标志查看可用的仿真标志,然后选择最佳候选标志并进行尝试。总之,它看起来是这样的:“yasm some.asm-o some.o-f elf32”和“ld some.o-o some.bin-m elf386”。所以只要改变elf32和elf_i386就行了