Я не могу понять концепцию абсолютной адресации и относительной адресации в сборке, особенно в сборке gcc inline. В учебнике я видел следующий код:абсолютная и относительная адресация в сборке gcc inline
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-родственники. Пожалуйста, объясните.