如何防止汇编程序编译16位应用程序?

时间:2013-10-15 17:56:07

标签: windows assembly x86 fasm

我在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位程序编译?

2 个答案:

答案 0 :(得分:2)

您正在制作DOS COM文件。它是16位的,因为DOS是实模式操作系统。 要获得32位可执行文件,您需要使用PE - 可移植可执行格式 - Windows可执行格式。 您可以在互联网上找到有关它的信息; FASM实施 - Win programmingPE format

但你不能简单地把你的程序带到32位,因为你正在使用“int 0x21” - 它是DOS的系统调用

答案 1 :(得分:1)

引用的来源是DOS程序(.com文件格式),并且由FASM正确编译为DOS .com可执行文件。

为了获得32位程序,你必须首先编写它...我不能教你编写32位程序 - 这对于答案格式来说太长了。但您可以阅读FASM编程手册(下载的FASM包中有一个)并查看提供的示例。

阅读FASM message board还有很多例子和乐于助人的人。