0

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

4

2 回答 2

2

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

但是你不能简单地把你的程序变成 32 位的,因为你使用的是“int 0x21”——它是 DOS 的系统调用

于 2013-10-15T18:21:10.083 回答
1

引用的源是 DOS 程序(.com 文件格式),因此被 FASM 正确编译为 DOS .com 可执行文件。

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

阅读FASM 留言板也很有帮助,那里有大量示例和乐于助人的人。

于 2013-10-15T18:04:35.167 回答