2

给定以下汇编程序:

BITS 64
mov rax, 0b111

Yasm 输出:

error: expected `,'

为什么这里需要逗号?NASM 很高兴地组装了它。

4

1 回答 1

3

来自 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

于 2015-04-01T08:40:21.047 回答