2012-05-15 58 views
1

我無法理解彙編中的絕對尋址和相對尋址的概念,特別是在gcc內聯彙編中。我在教程中看到以下代碼: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使用a *。除了用於絕對尋址之外,我無法找到星號的重要性的很好描述。我意識到絕對意味着實際物理地址,而相對意味着從程序開始時的偏移量。但是我不清楚相對尋址。我在彙編中閱讀了有關PC的相對尋址,但我完全不瞭解它,並且我不清楚相對和PC相對是否相同。請解釋一下。

回答

1

星號意味着什麼。沒有星號的指令是無效的。這是來自AT語法的僞像,基本上是「將ecx加載到指令譯碼器中」的等同於「跳轉到ecx」的助記符。

在Intel語法中,非常相同的指令是jmp ecx

寄存器中沒有偏移量跳轉指令和偏移距離。 「PC」在x86上被稱爲ip(指令指針),沒有任何進一步上下文的「相對」通常意味着「相對於ip」。