given a a label
L1: db "beat it",10,0
L2:
what is the meaning of:
mov eax,L2
sub eax,L1
L2 进行注册,标签中的子注册包括字符串
MOV EAX,L2
将标签表示的地址移动到寄存器。
与MOV EAX,[L2]
which 从该地址获取值(内存的内容)不同。
这是在运行时执行您应该在汇编时执行的操作mov eax, L2 - L1
以获取这些标签之间的字节数的一种毫无意义的低效方法。 即让汇编程序sizeof
为您计算数组,而不是对常量进行硬编码。
通常你会做一些类似L1_length equ $ - L1
定义组装时间常数的事情。请参阅$ 如何在 NASM 中工作,究竟是什么?
但无论如何,由于符号不在内部[]
(这是 NASM,而不是其他类型的 Intel 语法),L1
它是直接操作数;符号的绝对地址(在这种情况下由标签定义)。
例如,mov eax, L2
将标号的绝对地址放入EAX,用一条mov r32,imm32
指令。