所以我想知道为什么我不能这样做
mov eax, ffffffffh
但我可以这样做:
mov eax, 0ffffffffh
请问有人可以解释一下吗?在这种情况下,我使用的是 Flat Assembler,但我认为这不是特定于汇编程序的。
所以我想知道为什么我不能这样做
mov eax, ffffffffh
但我可以这样做:
mov eax, 0ffffffffh
请问有人可以解释一下吗?在这种情况下,我使用的是 Flat Assembler,但我认为这不是特定于汇编程序的。
大多数汇编程序要求数字常量以数字开头,这样他们就可以区分它们和标签。
您可以在FASM 基本语法规则中看到它:
数字与名称的区别在于,它们要么以十进制数字开头,要么以“$”字符后跟任何十六进制数字开头。这意味着即使令牌不是有效数字,也可以将其视为数字。要成为正确的数字,它必须是以下之一:十进制数(可选地在末尾附加字母“d”)、二进制数后跟字母“b”、八进制数后跟字母“o” " 或 "q",或以 "$" 或 "0x" 开头或后跟字符 "h" 的十六进制数。由于十六进制数的第一个数字可以是字母,因此可能需要在其前面加上数字零以使其可识别为数字。例如,“0Ah”
以及在MASM 手册中:
十六进制数字必须始终以十进制数字 (0–9) 开头。如有必要,添加前导零以区分符号和以字母开头的十六进制数字。
看着0ffffffffh
你可以看到 8 个有效的十六进制数字,正如你所期望的那样。这不是唯一的0ffffffffh
,另一个数字文字也应该用前导零编写 - 0d1h
, 0aah
, 0b0h
。
现在,汇编程序支持0xffffffff
语法是很常见的。如果您的不是(FLAT 支持),请务必注意前导零,否则十六进制值将被解释为标签或其他符号名称。