JMP 改變 EIP 的原理
CPU執行一條指令的過程:
1. 取指令——把程序計數器(PC)所存的指令地址裝入地址寄存器(AR),地址寄存器通過地址總線找到指令地址對應的主存單元,取出指令;然后通過數據總線將指令傳給CPU的指令寄存器(IR);當一條指令被取出后,PC中的數值將根據指令字長度而自動遞增;
2. 指令譯碼——指令寄存器(IR)將指令發送給指令譯碼器,進行譯碼;指令譯碼器首先分析這條指令的操作碼是什么,以決定操作的性質和方法(算術操作、邏輯操作、數據傳輸、條件分支操作),然后才能控制計算機其他各部件協同完成指令表達的功能;
3. 計算操作數地址——確定本條指令操作數的地址,共有立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、寄存器相對尋址、基址加變址尋址、相對基址加變址尋址等七種尋址方式
4. 取操作數——將指令中的有效地址(EA)輸出到地址總線,地址總線從存儲單元讀出數據,然后將讀出的數據通過數據總線送到CPU的暫存寄存器(TR)中;如果操作數在寄存器中,此階段可以跳過;
5. 執行指令——完成指令所規定的各種操作,具體實現指令的功能;例如,如果要求完成一個加法運算,算術邏輯單元ALU將被連接到一組輸入和一組輸出,輸入端提供需要相加的數值,輸出端將含有最后的運算結果;
6. 數據寫回:CPU 將計算結果存回寄存器或者將寄存器的值存入內存,這個部分稱為 Store。
但無條件跳轉指令jmp的指令周期比較簡單:
1. 例如指令 000015H:jmp 11H,CPU把位于內存地址000015h指令“jmp 11H”取出送到指令寄存器(IR),同時程序計數器PC內容加1,變為 000016H;指令譯碼后知道指令寄存器(IR)中的指令是無條件轉移指令;
2. CPU把指令寄存器(IR)中地址碼部分0011H送到程序計數器,從而用新內容0011H代替PC原先的內容0016H。這樣,下一條指令將不從0016H單元讀出,而是從內存0011H單元開始讀出并執行,從而改變了程序原先的執行順序。
總的來說,一條無條件跳轉指令JMP的指令周期內,PC的值被修改了2次。取指周期結束后,PC值自動加1;執行周期中,PC值修改為要跳轉的地址。
浙公網安備 33010602011771號