给定以下汇编程序:
BITS 64
mov rax, 0b111
Yasm 输出:
error: expected `,'
为什么这里需要逗号?NASM 很高兴地组装了它。
来自 YASM 手册:
3.5.1。数值常数
数值常数只是一个数字。NASM 允许您以多种方式指定各种数字基数中的数字:您可以为 H、Q 或 O 加上后缀,B 表示十六进制、八进制和二进制,或者您可以在 C 样式中为十六进制添加前缀 0x ,或者您可以按照 Borland Pascal 的样式为十六进制添加 $ 前缀。
一些例子:
mov ax,10010011b ; binary
NASM 手册添加:
此外,当前版本的 NASM 接受前缀0h 表示十六进制,0d 或 0t 表示十进制,0o 或 0q 表示八进制,0b 或 0y 表示二进制。
TL;DR:虽然 NASM 支持二进制文字的b
-suffix 和 -prefix,但 YASM0b
仅支持 suffix 变体。所以0b111
需要写成111b
。