装配中的标签和变量?
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) 相同。
假设我在汇编中有一个标签(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) 相同。