装配中的标签和变量?

Labels and Variables in Assembly?

假设我在汇编中有一个标签(at&t 语法,x86-64),如下所示:

test_tabel:
    mov test_label,%eax #1
    mov (test_label),%eax #2
    mov $test_label,%eax #3

谁能告诉我这三个之间有什么区别,因为我经常看到它们,但不能真正理解每个的真正含义(地址、价值等...)

现在,如果我在 .data 部分有一个变量(假设它的大小为 int,即 4 个字节),这 3 个之间有什么区别:

mov var,%eax #4
mov var,%eax #5
mov $var,%eax #6

(1) 和 (2) 相同,从 test_label 处的内存加载 4 个字节到 eax。 (3) 加载test_label的地址到eax.

变量只是一个标签,因此您的第二组示例没有任何特殊之处。

(4) 和 (5) 在行为上与 (1) 和 (2) 相同,(6) 在行为上与 (3) 相同。