【发布时间】:2022-11-25 23:46:01
【问题描述】:
我正在尝试用 ASM 组装一小段代码。此代码将 CX 设置为零,将 AX 设置为 1。我的代码:
mov cx, 0000h
mov ax, ffffh
但我收到此错误:
$ nasm foo.asm
foo.asm:2: error: symbol `ffffh' not defined
我可以通过写 mov ax, 0ffffh 来解决这个错误。但是为什么它不理解ffffh 语法呢?在 NASM 文档的哪个位置指定允许使用什么十六进制语法?
我读过 https://nasm.us/doc/nasmdoc3.html#section-3.4.1 但在那里找不到任何不允许 ffffh 语法的内容。我错过了什么?
我阅读了其他一些类似的问题,也作为 cmets 提供给这个问题。但它们似乎都没有指向确认数字必须以数字开头的某些权威文档或规范。如果有人可以指出 NASM 文档中的确切摘录或证实这一点的某些规范,那将回答这个问题。
【问题讨论】:
-
f是一个字母和字母开始符号。数字必须以数字开头,因此您需要以0开头。 -
这是否回答了您的问题(链接的问题是关于 MASM 而不是 NASM,但它们支持十六进制常量的类似语法)? How do I write letter-initiated hexadecimal numbers in masm code?
-
@msaw328:How to represent hex value such as FFFFFFBB in x86 assembly programming? 有一个专门涵盖 NASM 的答案,并提到了同样的原因。
-
@PeterCordes 该问题的 answers 之一链接到我引用的问题。我想指出原始来源。
-
@msaw328:MASM 的回答实际上并不比我一年后的回答更能说明问题。我主要在我现有的答案中添加了一个指向它的链接,以便在它是更合适的重复项(MASM 问题)的情况下帮助找到它。我检查了编辑历史,我的 NASM/GAS/MASM 回答说在我找到之前需要前导数字并将该链接添加到早期的问答中。所以它不是我回答的“原始来源”。它们都不是原始来源(如 NASM 手册),只是重新解释一个共同的事实。