我在Windows 7 64位上使用Flat Assembler。我正在尝试编译一个简单的程序,但它正在编译为16位程序。有些程序似乎编译得很好,但是在搜索了一个hello world示例之后,该程序没有运行。
org 0x100
mov dx, msg ; the address of or message in dx
mov ah, 9 ; ah=9 - "print string" sub-function
int 0x21 ; call dos services
mov ah, 0x4c ; "terminate program" sub-function
int 0x21 ; call dos services
msg db 'Hello, World!', 0x0d, 0x0a, '$'
我应该怎么做以防止它作为16位程序编译?
答案 0 :(得分:2)
您正在制作DOS COM文件。它是16位的,因为DOS是实模式操作系统。 要获得32位可执行文件,您需要使用PE - 可移植可执行格式 - Windows可执行格式。 您可以在互联网上找到有关它的信息; FASM实施 - Win programming 或PE format
但你不能简单地把你的程序带到32位,因为你正在使用“int 0x21” - 它是DOS的系统调用
答案 1 :(得分:1)
引用的来源是DOS程序(.com文件格式),并且由FASM正确编译为DOS .com可执行文件。
为了获得32位程序,你必须首先编写它...我不能教你编写32位程序 - 这对于答案格式来说太长了。但您可以阅读FASM编程手册(下载的FASM包中有一个)并查看提供的示例。
阅读FASM message board还有很多例子和乐于助人的人。