好吧,首先讓我說清楚:這與微優化無關。
但是,我知道在分割區上的引導程式中,很多使用編碼jmp short; nop
。但據我了解,jmp「跳轉」的次數越少:)處理器完成所需的週期就越少,並且某些處理器會看到它0x90
並跳過它而不對其進行評估。
答案1
您可能想看看Intel 64 與 IA-32 架構軟體開發人員手冊,它們是從程式設計師的角度理解 x86 架構的重要資源(假設您已經熟悉彙編)。
[...]我的理解是,jmp「跳躍」的次數越少:)處理器完成所需的週期就越少
您需要區分近跳和遠跳。近跳轉只需增加(或透過 2 的補碼數學運算減去)指令指標 (IP) 的偏移量,或從目前代碼段 (CS) 重新載入 IP 偏移量。近跳轉通常可以將偏移量儲存在指令字本身或暫存器中 - 因此可以在一個週期內取得整個跳轉指令。
遠跳轉將指令指標的實際新位址儲存在下一個字或記憶體位置,因此這需要額外的提取 - 因此需要更長的時間。在 x86 和 x86-64 上,您可以不是遠跳到暫存器中儲存的位置(它必須是下一個指令字或記憶體中的某個位置)。
有些處理器看到 0x90 後就跳過它而不對其進行評估。
NOP
是的,這就是指令應該做什麼的定義。 CPU 仍然需要取得0x90
操作碼,但計算本質上不執行任何操作。