所以我想知道为什么我不能这样做

mov eax, ffffffffh


但是我可以这样做:有人解释吗?在这种情况下,我使用的是平面汇编程序,但我认为这不是特定于汇编程序的。

#1 楼

大多数汇编程序都要求数字常数以数字开头,这样可以区分它们和标签。

您可以在FASM基本语法规则中看到它:


数字与名称的区别在于,它们要么以小数位开头
,或带“ $”字符,后跟任意
十六进制数字。这意味着即使令牌不是有效数字,也可以将其视为数字
。为正确起见,它必须是以下内容之一:十进制数字(可选的在末尾附加字母“ d”
),二进制数字后跟字母“ b”,
八进制数字,后跟字母“ o”或“ q”,或十六进制
数字,其前面带有“ $”或“ 0x”,或后跟字符
“ h”。由于十六进制数字的第一位数字可以是字母,因此可能需要在数字前加上数字零,以使其可以识别为数字。例如,“ 0Ah”是有效数字,而
“ Ah”只是一个名称。


以及《 MASM手册》中:


十六进制数字必须始终以十进制数字(0–9)开头。如果需要
,请添加前导零以区分符号和以字母开头的十六进制数字。


看看0ffffffffh,您可以看到8个有效的十六进制数字,完全符合您的期望。这不是0ffffffffh所独有的,另一个数字文字也应以前导零写入-0d1h0aah0b0h

如今,汇编程序支持0xffffffff语法很常见。如果您的不是(FLAT支持),请确保注意前导零,否则十六进制值将被解释为标签或其他符号名称。