NASM 如何为每个标签分配内存

How is NASM able to allocate so memory per label

本人新手assembly.I有疑问

code: db 1111

如果我们只分配一个字节,代码如何包含这个数字?据我所知,一个字节最多可以包含。 255 号没有了。 还有第二个问题

variable: dw 100

它是如何存储在内存中的?我知道大多数 64 位架构每个 address.How 使用一个字节,一个地址可以指定两个地址吗?(据我所知,在 nasm 中每个字有 16 位,因为它是排列)。

谢谢你,如果这个问题很愚蠢,我很抱歉。

你的问题并不愚蠢,而是涉及一些基本主题:

  1. 声明 code: db 1111 可以表示不同的意思:

    1. 1111 可以是十进制或十六进制类型,或其他类型(如八进制)- 使其 无效.
    2. 1111 可以是二进制类型,等于十进制的 15,因此它适合一个字节。这是最有可能接受此声明的方式。

    通常类型由前缀(如 0x... 表示 C 中的十六进制)或后缀(如 1111bb对于二进制),但这里不是......我不知道你是否可以 set/change NASM 中的默认编号格式,但没有词缀,表达式是 无效/不适合一个字节

  2. 声明variable: dw 100确实在内存中保留了两个BYTE。第一个字节存储在您访问并用作参考的地址处,WORD 的第二个字节存储在地址+1 处。所以一个WORD确实确实占用了2个BYTE。 16 位值的哪个 8 位部分存储在哪个位置由一个称为 Endianness 的概念设置。在 x86/x64 计算机上,顺序为 Little-endian