2
given a a label 
L1: db "beat it",10,0
L2:


what is the meaning of:
mov eax,L2
sub eax,L1

L2 进行注册,标签中的子注册包括字符串

4

2 回答 2

6

MOV EAX,L2将标签表示的地址移动到寄存器。

MOV EAX,[L2]which 从该地址获取值(内存的内容)不同。

于 2012-09-20T14:38:16.053 回答
2

这是在运行时执行您应该在汇编时执行的操作mov eax, L2 - L1以获取这些标签之间的字节数的一种毫无意义的低效方法。 即让汇编程序sizeof为您计算数组,而不是对常量进行硬编码。

通常你会做一些类似L1_length equ $ - L1定义组装时间常数的事情。请参阅$ 如何在 NASM 中工作,究竟是什么?

但无论如何,由于符号不在内部[](这是 NASM,而不是其他类型的 Intel 语法),L1它是直接操作数;符号的绝对地址(在这种情况下由标签定义)。

例如,mov eax, L2将标号的绝对地址放入EAX,用一条mov r32,imm32指令。

于 2020-01-18T10:22:41.887 回答