我无法理解汇编中绝对寻址和相对寻址的概念,尤其是在 gcc 内联汇编中。我在教程中看到了以下代码:
asm volatile(" \
cli; \
mov %0, %%ecx; \
mov %1, %%esp; \
mov %2, %%ebp; \
mov %3, %%cr3; \
mov $0x12345, %%eax; \
sti; \
jmp *%%ecx "
: : "r"(eip), "r"(esp), "r"(ebp), "r"(current_directory->physicalAddr));
这里最后一条指令 jmp *%%ecx 使用 *. 除了它用于绝对寻址之外,我找不到一个很好的描述星号的意义是什么。我得到这样的想法,绝对意味着实际的物理地址,而相对意味着从程序开始的偏移量。但是我不清楚相对寻址。我在汇编中阅读了有关 PC 相对寻址的信息,但我并不完全理解它,而且我不清楚相对和 PC 相对是否相同。请解释一下。