【问题标题】:Assembly: 32 bit registers not recognized?汇编:32 位寄存器无法识别?
【发布时间】:2012-09-20 12:40:08
【问题描述】:

我正在尝试使用 32 位寄存器,因为我需要更大的最大整数值。当我尝试使用 EAX、EBX、ECX 或 EDX 时,TASM 显示 UNDEFINED SYMBOL。 TASM 正在将寄存器作为变量读取。知道原因吗? 我正在使用 DOSBOX 0.74 并在 Windows 7 64 位上运行。

【问题讨论】:

  • 代码?命令行调用? 上下文?
  • DOSBOX 模拟在 16 位模式下运行的 MS-DOS。您现在可能应该使用 Windows(尽管我很欣赏有很多关于 16 位系统的汇编教程)。正如@paxdiablo 建议的那样,您应该使用类似 nasm 的东西。
  • @jleahy:DOSBox 模拟了(至少)在 16 位模式下运行的 386 兼容。 32 位操作数大小可与操作数大小前缀一起使用。 IDK 为什么有人想为该目标编写新代码,但您当然可以在 16 位模式下使用 32 位寄存器。在 16 位模式下,在真实硬件上唯一无法访问的是 64 位寄存器(和 AVX 指令;在 16 位模式下无法识别 VEX 前缀)。

标签: assembly 32-bit tasm


【解决方案1】:

TASM 与 Borland Turbo Assembler 中的一样吗?如果老的东西甚至知道 32 位寄存器,我会感到惊讶:-)

TASM v5 大约是 15 年前的版本。

根据记忆,有一个 TASM32(这可能是您的软件包的一部分)可以做到这一点,但我建议使用更现代的汇编程序,例如 nasm

【讨论】:

  • 哦!原来如此。如果我切换到nasm之类的,所有的代码都是一样的,对吧?
  • TASM 3.x 汇编 32 位代码。可能需要在文件开头放置一个特殊指令来启用它:.386
  • @Alexey,可能,我不确定。我仍然认为使用更现代的汇编程序会更好。这与我给 TurboC 用户的建议相同——当免费提供更现代(更好)的东西时,没有必要使用这些过时的东西。
  • @shriekyphantom 使用 NASM。它是免费的,非常棒,可用于 DOS、Windows 和 Linux。
  • ".386" 如果在一个地方,将启用 32 位寄存器/指令,并在另一个地方请求 32 位代码。我认为“.386”想要在“.model”指令之后执行您想要的操作,但如果这不起作用,请先尝试。我是 Nasm 的忠实粉丝 - nasm.us - 但 Tasm 是一个很好的汇编程序,如果你愿意,你应该可以使用它。当然,您必须知道如何使用任何工具。如果一切都失败了,RTFM。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 2011-04-09
  • 1970-01-01
  • 2014-11-18
  • 1970-01-01
相关资源
最近更新 更多