在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;。我可以计算出数学,但它更有意义以其扩展的形式。)
答案 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架构,后者是相同的。