【问题标题】:How to prevent assembler compiling 16 bit applications?如何防止汇编程序编译 16 位应用程序?
【发布时间】:2013-10-15 17:56:06
【问题描述】:

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

【问题讨论】:

  • 您必须先停止编写 16 位汇编代码。然后使用use32 指令。
  • FASM 汇编器可能有一个 32 位格式的命令行标志。如果您使用 32 位寄存器和 32 位代码,它会有所帮助吗?把它扔出去……
  • @tommycake50 - FASM 根本没有命令行标志。它完全编译源代码中的内容,并且相同的源始终提供相同的二进制文件。

标签: windows assembly x86 fasm


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    阅读FASM message board 也很有帮助,这里有大量示例和乐于助人的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-28
      • 2017-04-03
      • 2010-10-22
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多