【问题标题】:Division causes unbalanced parentheses除法导致括号不平衡
【发布时间】:2016-11-27 15:44:12
【问题描述】:

在 GNU as(GNU 汇编器)中,以下代码可以正确汇编:

mov $(80 * 24 + 4), %cx

但是,这段代码没有:

mov $(80 * 24 / 4), %cx

发出高度意外的错误:

example.S: Assembler messages:
example.S:42: Error: unbalanced parenthesis in operand 1.

唯一的区别是后者使用除法,而不是加法。这应该是有效的,according to the manual

$<expression> 将立即数嵌入到汇编输出中;即常量。算术是在“编译时”执行的。我可以计算出数学,但它的扩展形式更有意义。)

【问题讨论】:

    标签: assembly x86 att


    【解决方案1】:

    / 表示评论的开始,在我的特殊情况下。

    --divide

    在 SVR4 派生的平台上,字符 / 被视为注释字符,这意味着它不能在表达式中使用。 --divide 选项将/ 转换为普通字符。这不会在注释的开头禁用/,也不会影响使用# 来开始注释。

    This post on the binutils mailing list 也提出了类似的故事:

    为了与其他汇编程序兼容,'/' 开始对 i386-elf 目标。所以你不能使用除法。如果您配置为 i386-linux (或任何 bsds, 或 netware), 你不会有这个 问题。

    我碰巧正在为x86_64-elf 目标进行组装,我认为它与提到的i386-elf 非常相似(前者用于amd64 或“x86_64”拱门,后者是相同的但对于较旧的 32 位 x86 架构)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      相关资源
      最近更新 更多