【发布时间】:2021-11-27 18:05:57
【问题描述】:
假设我在程序集中有一个标签(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
【问题讨论】:
-
你不是说你的第 5 行要读
mov (var), %eax,带括号。您已将其与第 4 行相同! -
请注意,
mov $test_label,%eax可能是个问题,因为地址通常为 64 位,而您将其加载到 32 位寄存器中。通常应该使用lea test_label(%rip), %rax。
标签: assembly label 64-bit x86-64 att