You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NASM中FFFFh十六进制语法为何报错?规范依据何处可查?

NASM十六进制数语法问题解析

问题重现

尝试用NASM编写以下汇编代码,将CX置0、AX置1:

mov cx, 0000h
mov ax, ffffh

汇编时触发错误:

$ nasm foo.asm
foo.asm:2: error: symbol `ffffh' not defined

将第二行改为mov ax, 0ffffh即可正常汇编,核心疑问是NASM为何不识别ffffh这种写法。

原因与文档依据

NASM对十六进制数的语法有明确规定:
在NASM文档的3.4.1 数值常量章节中,明确说明:

十六进制数可以用h作为后缀,但使用该后缀时,数字必须以数字开头,而非字母。因此0ffh是合法的十六进制数,但ffh不是——它会被识别为名为ffh的符号。

这是因为NASM的标识符(符号)规则允许以字母开头,由字母、数字、下划线等字符组成,所以ffffh会被解析为一个未定义的符号,而非数值。

如果不想加前导0,也可以使用0x前缀的十六进制写法,比如mov ax, 0xffff,同样合法且不会触发错误。

内容的提问来源于stack exchange,提问作者Lone Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:05:26