【问题标题】:MASM Compiler Error: initializer magnitude too large for specified sizeMASM 编译器错误:初始化程序幅度对于指定大小来说太大
【发布时间】:2018-11-24 08:29:03
【问题描述】:

我正在尝试构建一个与 64 位 C 运行时库动态链接的 64 位静态 C 库。

C 库在一个文件中包含一些无法构建的程序集。下面是代码:

JMEMDOSA_TXT segment byte public 'CODE'
    assume cs:JMEMDOSA_TXT
    public _jdos_open
    public _jdos_close
    public _jdos_seek
    public _jdos_read
...

我得到的编译器错误是:

A2071:初始化器幅度对于指定大小来说太大

这里是完整的 asm 源文件的链接: https://github.com/cloudflare/jpegtran/blob/master/jmemdosa.asm

【问题讨论】:

  • 链接的源代码不是 64 位 Windows 源代码,而是 16 位 DOS 源代码。我怀疑你可以用它构建一个 64 位库。
  • 谢谢迈克尔。我在研究 64 位寄存器时也发现了这一点,并决定暂时使用 C 代码。你证实了我的想法。我以为它是 32 位的,但更糟糕的是它是 16 位的。这证明了 C 代码是短期内从这里向前发展的方式。感谢您的帮助!

标签: visual-studio-2015 imagemagick jpeg x86-64 masm


【解决方案1】:

我想出了答案。这个汇编代码是 16 位的,基于上面迈克尔的评论。

要使其在 64 位上工作,需要将其重写为使用 64 位寄存器。

不可能将 16 位或 32 位程序集编译为 64 位二进制文​​件。

但是,如果有执行相同工作的 C 源代码,则可以将 C 代码编译成相应的程序集,然后编译成 32 位或 64 位二进制文​​件。

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 2017-07-24
    • 2016-09-10
    • 2022-12-20
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2013-06-15
    相关资源
    最近更新 更多