在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>将一个立即嵌入到已组合的输出中;即一个常量.算术在"编译时"执行.我可以计算出数学,但它在扩展形式中更有意义.)
/ 在我的特定情况下,表示评论的开始.
--divide在SVR4派生的平台上,该字符
/被视为注释字符,这意味着它不能在表达式中使用.该--divide选项变为/普通字符.这不会/在开始评论的行的开头禁用,也不会影响使用#开始评论.
binutils邮件列表上的这篇文章也提出了类似的故事:
为了与其他汇编程序兼容,'
/'开始对i386-elf目标发表评论.所以你不能使用除法.如果配置i386-linux(或任何bsds或netware),则不会出现此问题.
我碰巧正在为x86_64-elf目标进行组装,我认为这与上面提到的非常相似i386-elf(前者用于amd64或x86_64"拱",后者是相同的,但对于较旧的32位x86架构而言).
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |