jmp、call和ret指令的近轉移形式只是在當前**段中執行程式控制轉移,因此不會執行特權級檢查。jmp、call或ret指令的遠轉移形式會把控制轉移到另外乙個**段中,因此處理器一定會執行特權級檢查。
1、jmp指令:
不影響堆疊
。緊緊進行執行流程的跳轉,不會儲存返回位址。(書p55)對於jmp而言,長短jmp僅僅是結果不同罷了,短跳轉對應段內,長跳轉對應段間。
2、call指令:
影響堆疊
。在進行流程跳轉前會儲存返回位址(下一條指令的位址),以便在跳轉目標**中可以使用ret指令返回到call指令的下一條指令處繼續執行。執行段內跳轉(或稱「長call」)時,只儲存eip;如果是段間跳轉(或稱「短call」),還儲存cs。
3、ret和retf:這兩個指令的功能都是呼叫返回。
(1)ret在返回時只從堆疊中取得eip;ret
f中的字母f表示far,即段間轉移返回,要從堆疊中取出eip和cs。
(2)兩個指令都可以帶引數,表示發生過程呼叫時引數的個數,返回時要從堆疊中退出相應個數的引數。
(3)恢復cs時,如果發現將發生特權級變化(當前cs的低2位不等於從堆疊中取得的新的cs值的低2位。由跳轉的相關理論可知,只有跳轉到非一致**段時才會發生特權級變化,那麼,也只有從非一致**段返回時才會發生特權級變化的返回),則還要從呼叫者堆疊中取得esp和ss恢復到相應暫存器中,也即恢復呼叫者堆疊。
彙編 跳轉指令
助記符 標誌位說明 jz je zf 1 等於零 相等 jnz jne zf 0 不等於零 不相等 jssf 1 符號為負 jnssf 0 符號為正 jp jpe pf 1 低8位 1 的個數為偶 jnp npo pf 0 低8位 1 的個數為奇 joof 1 溢位jno of 0 無溢位jc jb...
學習 跳轉指令
jz je指令 根據z標誌位進行跳轉 jz和je相同 shark恆老師說的,我就記錄下,但是他也說過不是完全相同 1 直接定位到乙個存在je跳轉的位址,然後發現是存在跳轉的,如圖 上圖的z標誌位為1,所以會進行跳轉,但是如果修改z標誌位為0則不會,如圖 同時je和jz也相同 jnz jne指令 根據...
條件跳轉指令 383
7.5 條件跳轉指令 383 2006 6 29 15 00 00 7.2 低階控制結構 378 7.3 語句標號 378 7.4 無條件控制轉移 jmp 380 7.6 中級 控制結構 jt和jf 386 7.7 使用組合語言實現通用控制結構 386 7.8 選擇 386 雖然jmp指令提供了控制...