title: absolute and relative addressing in gcc inline assembly
body: <p>I am not able to understand the concept of absolute addressing and relative addressing in assembly particularly in gcc inline assembly. I saw the following code in a tutorial :</p>
  
  <pre><code>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-&gt;physicalAddr));
  </code></pre>
  
  <p>Here the last instruction jmp *%%ecx uses a *. I could not find a good description of what is the significance of the asterisk except that it is used for absolute addressing. I am getting the idea that absolute means actual physical address while relative means offset from the start of the program. However I am not clear about the relative addressing. I read about PC-relative addressing in assembly but i don't understand it completely and it is not clear to me whether relative and PC-relative are same.Please explain.</p>