分裂导致括号不平衡

Tha*_*tos 7 x86 assembly att

在GNU as(GNU汇编程序)中,以下代码无错误地汇编:

mov $(80 * 24 + 4), %cx
Run Code Online (Sandbox Code Playgroud)

但是,此代码不会:

mov $(80 * 24 / 4), %cx
Run Code Online (Sandbox Code Playgroud)

发出非常意外的错误:

example.S: Assembler messages:
example.S:42: Error: unbalanced parenthesis in operand 1.
Run Code Online (Sandbox Code Playgroud)

唯一的区别是后者使用除法而不是加法.根据手册,这应该是有效.

($<expression>将一个立即嵌入到已组合的输出中;即一个常量.算术在"编译时"执行.我可以计算出数学,但它在扩展形式中更有意义.)

Tha*_*tos 8

/ 在我的特定情况下,表示评论的开始.

--divide

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

binutils邮件列表上的这篇文章也提出了类似的故事:

为了与其他汇编程序兼容,' /'开始对i386-elf目标发表评论.所以你不能使用除法.如果配置i386-linux(或任何bsds或netware),则不会出现此问题.

我碰巧正在为x86_64-elf目标进行组装,我认为这与上面提到的非常相似i386-elf(前者用于amd64x86_64"拱",后者是相同的,但对于较旧的32位x86架构而言).