我对asm指令db实际上做了什么感到有点困惑。我已经读过它定义了一个字节,但这究竟意味着什么?它是将值移动到内存中的某个位置,还是在代码组装之前预先定义了一个值?
答案 0 :(得分:51)
它确实将该字节放在可执行文件中。
答案 1 :(得分:2)
来自 ARM 手册:
<块引用>〚label:〛 DB表达式〚,表达式...〛
DB 语句用一个或多个字节值初始化内存。 label 是分配了当前内存地址的符号。表达式是存储在内存中的字节值。每个表达式可以是一个符号、一个字符串或一个表达式。
因此,此语句执行以下操作:
操作后,如果我们比较新的“当前”内存地址与操作前的内存地址(按标签保存),我们可以计算“表达式”列表的长度(因为每个字符是一个字节,并且与内存地址加1相同)。
让汇编器计算此处(在某些汇编器中为 $
)和标签之间的距离适用于任何指令或伪指令,而不仅仅是 db
,并且在某些汇编语言中看起来像这样.确切的指令语法因汇编程序而异(ARMASM、NASM、MASM、FASM 等都使用 db
将文字字节发送到输出中,但在 equ
的细节或其他方面有所不同。)>
msg: db "Hello, World!", 0x10, 0
msglen equ $ - msg @ includes the 0 terminator