分裂导致括号不平衡

时间:2016-07-24 03:23:55

标签: assembly x86 att

在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>将一个立即数嵌入到汇编的输出中;即一个常量。算术在&#34;编译时执行&#34;。我可以计算出数学,但它更有意义以其扩展的形式。)

1 个答案:

答案 0 :(得分:7)

在我的特定情况下,

/表示评论的开始。

  

--divide

     

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

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

  

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

我碰巧正在为x86_64-elf目标进行组装,我认为这与提到的i386-elf非常相似(前者适用于amd64或&#34; {{1对于较旧的32位x86架构,后者是相同的。