次のアセンブリ プログラムがあるとします。
BITS 64
mov rax, 0b111
Yasm の出力:
error: expected `,'
なぜここにコンマが必要なのですか? NASM は喜んでこれを組み立てます。
YASM マニュアルから:
3.5.1. 数値定数
数値定数は単なる数値です。NASM では、さまざまな基数でさまざまな方法で数値を指定できます。16進数、8 進数、および2進数の場合はH、Q または O、およびB の接尾辞を付けることができます。または、C のスタイルで 16 進数の場合は 0x の接頭辞を付けることができます。または、Borland Pascal のスタイルで 16 進数の前に $ を付けることができます。 いくつかの例:
mov ax,10010011b ; binary
NASM マニュアルには次のように追加されています。
さらに、現在のバージョンの NASM は、16 進数のプレフィックス0h、10 進数の 0d または 0t、8 進数の 0o または 0q、2 進数の0b または 0y を受け入れます。
TL;DR: NASM はバイナリ リテラルのb
-suffix と -prefix の両方をサポート0b
していますが、YASM は接尾辞バリアントのみをサポートしています。したがって0b111
、 のように記述する必要があります111b
。