【问题标题】:Why can db accept more than 1 byte?为什么 db 可以接受超过 1 个字节?
【发布时间】:2024-01-22 07:50:01
【问题描述】:

如果db代表Define Byte并且可以容纳8位(1个字节),为什么我们可以在db中使用6个字节的字符串?我知道一个字符只有1个字节,而db拥有1个字节。

section .data
    text db "Yellow"

db 在更高级的语言(与 asm 相比)中就像 char 一样,我们可以只增加缓冲区,但汇编会自动吗?

#include <stdio.h>

int main(void)
{
    char c = 'Y';
    char string[7] = "Yellow";
    return 42;
}

【问题讨论】:

  • 定义字节s
  • 您可能会收到char c = "Y"; 的编译器警告,它应该是char c = 'Y';
  • @ikegami 我也是这么想的,不过看here
  • db 定义每个元素的大小。

标签: c assembly x86


【解决方案1】:

数据定义dbdwdddq等接受多个值,依次存储。例如

db 'Y', 'e', 'l', 'l', 'o', 'w', 0

组装成

59 65 6C 6C 6F 77 00

由于单独指定所有字符很麻烦,所以有一个字符串的表示法,两者是等价的:

db "Yellow", 0

请注意,终止零字节必须在汇编中单独指定(与 C 相比)。

【讨论】:

  • 在 C 中甚至是一样的(除了 C 增加了 NUL)。 char s[] = "Yellow";char s[] = { 'Y', 'e', 'l', 'l', 'o', 'w', 0 }; 的缩写
  • 酷!我不知道。 @ikegami
最近更新 更多