版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、jmp指令,jmp為無條件轉(zhuǎn)移,可以只修改IP,也可以同時修改CS和IP; jmp指令要給出兩種信息: 轉(zhuǎn)移的目的地址 轉(zhuǎn)移的距離(段間轉(zhuǎn)移、段內(nèi)短轉(zhuǎn)移,段內(nèi)近轉(zhuǎn)移,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,jmp short 標號(轉(zhuǎn)到標號處執(zhí)行指令) 這種格式的 jmp 指令實現(xiàn)的是段內(nèi)短轉(zhuǎn)移,它對IP的修改范圍為 -128127,也就是說,它向前轉(zhuǎn)移時可以最多越過128個字節(jié),向后轉(zhuǎn)移可以最多越過127個字節(jié),比如:程序9.1 assume cs:codesg codesg segment start:mov ax,0 jmp short s add ax,1 s:inc ax codesg e
2、nds end start,左面的程序執(zhí)行后, ax中的值為 1 ,因為執(zhí)行 jmp short s 后 ,越過了add ax,1 ,IP 指向了標號 s處的 inc ax。也就是說,程序只進行了一次ax加1操作,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,匯編指令jmp short s 對應的機器指令應該是什么樣的呢? 我們先看一下別的匯編指令和其對應的機器指令,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,匯編指令與機器碼的對應示例 可以看到,在一般的匯編指令中,匯編指令中的idata(立即數(shù)),不論它是表示一個數(shù)據(jù)還是內(nèi)存單元的偏移地址,都會在對應的機器指令中出現(xiàn),因為CPU執(zhí)行的是機器指令,它必須要處理這些
3、數(shù)據(jù)或地址,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,對照匯編源程序,我們可以看到,Debug 將 jmp short s 中的 s 表示為inc ax 指令的偏移地址 8 ,并將jmp short s 表示為 jmp 0008 ,表示轉(zhuǎn)移到cs:0008處,下面現(xiàn)在我們在Debug中將程序9.1翻譯成為機器碼, 看看結果,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,這一切似乎合理,可是當我們查看jmp short s或jmp 0008所對應的機器碼,卻發(fā)現(xiàn)了問題,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,jmp 0008 ( Debug 中的表示)或jmp short s (匯編語言中的表示)所對應的機器碼為EB 0
4、3,注意,這個機器碼中竟不包含轉(zhuǎn)移的目的地址。 這意味著,CPU 在執(zhí)行EB 03的時候,并不知道轉(zhuǎn)移目的地址,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,那么,CPU根據(jù)什么進行轉(zhuǎn)移呢? 沒有了目的地址,CPU如何知道轉(zhuǎn)移到哪里呢,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,令人奇怪的是,匯編指令jmp short s中,明明是帶有轉(zhuǎn)移的目的地址(由標號 s 表示)的,可翻譯成機器指令后,怎么目的地址就沒了呢,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,沒有了目的地址,CPU如何知道轉(zhuǎn)移到哪里? 我們把程序9.1改寫一下,變成這樣: 程序9.2,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,程序9.2 assume cs:codes
5、g codesg segment start:mov ax,0 mov bx,0 jmp short s add ax,1 s:inc ax codesg ends end start 我們在Debug中將程序9.2翻譯為機器碼,看看結果,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,比較一下程序1和2用Debug查看的結果,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,注意,兩個程序中的 jmp指令都要使IP 指向 inc ax 指令,但是程序 1 的 inc ax 指令的偏移地址為 0008 ,而程序 2 的 inc ax 指令的偏移地址為000BH。 我們再來看兩個程序中的jmp指令所對應的機器碼,都是EB 0
6、3,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,這說明CPU在指令jmp指令的時候并不需要轉(zhuǎn)移的目的地址。 兩個程序中的jmp指令的轉(zhuǎn)移目的地址并不一樣,一個是cs:0008,另一個是cs:000B。 如果機器指令中包含了轉(zhuǎn)移的目的地址的話,那么它們對應的機器碼應該是不同的,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,可是它們對應的機器碼都是 EB 03,這說明在機器指令中并不包含轉(zhuǎn)移 的目的地址。 如果機器指令中不包含目的地址的話,那么,也就是說 CPU不需要這個目的地址就可以實現(xiàn)對IP的修改,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,這種信息是什么呢? 我們一步步地分析。 我們先簡單回憶一下CPU執(zhí)行指令的過程,1、
7、依據(jù)位移進行轉(zhuǎn)移的jmp指令,CPU執(zhí)行指令的過程: (1)從CS:IP指向內(nèi)存單元讀取指令,讀取的指令進入指令緩沖區(qū); (2)(IP) = (IP)+所讀取指令的長度,從而指向下一條指令; (3)執(zhí)行指令。轉(zhuǎn)到1,重復這個過程,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,按照這個步驟,我們參照程序9.2的圖看一下: jmp short s指令的讀取和執(zhí)行過程,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,jmp short s指令的讀取和執(zhí)行過程: (1)(CS)=0BBDH,(IP)=0006,CS:IP指向EB 03(jmp short s的機器碼); (2)讀取指令碼EB 03進入指令緩沖器; (3)(IP
8、)=(IP)+所讀取指令的長度=(IP)+2=0008,CS:IP指向add ax,1; (4)CPU指行指令緩沖器中的指令EB 03; (5)指令EB 03執(zhí)行后,(IP)=000BH,CS:IP指向inc ax,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,從上面的過程中我們看到,CPU 將指令EB 03 讀入后,IP 指向了下一條指令,即 CS:0008 處的add ax,1,接著執(zhí)行EB 03。 如果 EB 03 沒有對 IP 進行修改的話,那么,接下來 CPU將執(zhí)行 add ax,1,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,可是,CPU 執(zhí)行的 EB 03確是一條修改IP的轉(zhuǎn)移指令,執(zhí)行后 (IP)
9、= 000BH ,CS:IP指向inc ax,CS:0008處的add ax,1沒有被執(zhí)行。 CPU在執(zhí)行EB 03的時候是根據(jù)什么修改的 IP,使其指向目標指令呢?就是根據(jù)指令碼中的03,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,注意,要轉(zhuǎn)移的目的地址是CS:000B,而CPU 執(zhí)行 EB 03時,當前的(IP)=0008,如果將當前的IP值加3,使(IP)=000BH,CS:IP就可以指向目標指令。 在轉(zhuǎn)移指令EB 03中并沒有告訴CPU要轉(zhuǎn)移的目的地址,卻告訴了 CPU 要轉(zhuǎn)移的位移,即將當前的IP向后移動3個字節(jié),1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,因為程序1、2中的jmp 指令轉(zhuǎn)移的位移相同,
10、都是向后 3 個字節(jié),所以它們的機器碼都是EB 03。 原來如此,在“jmp short 標號”指令所對應的機器碼中,并不包含轉(zhuǎn)移的目的地址,而包含的是轉(zhuǎn)移的位移。 這個位移,使編譯器根據(jù)匯編指令中的“標號”計算出來的,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,轉(zhuǎn)移位移具體的計算方法如下圖,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,結論: CPU執(zhí)行 jmp short 標號 指令時并不需要轉(zhuǎn)移的目的地址,只需要知道轉(zhuǎn)移的位移就行了,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,實際上,指令“jmp short 標號”的功能為(IP)=(IP)+8位位移。 (1)8位位移=“標號”處的地址-jmp指令后的第一個字節(jié)的地址
11、; (2)short指明此處的位移為8位位移; (3)8位位移的范圍為-128127,用補碼表示 (如果你對補碼還不了解,請閱讀附注2) (4)8位位移由編譯程序在編譯時算出,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,還有一種和指令“jmp short 標號”功能相近的指令格式: jmp near ptr 標號 它實現(xiàn)的時段內(nèi)近轉(zhuǎn)移。 指令“jmp near ptr 標號”的功能為: (IP)=(IP)+16位位移,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,指令“jmp near ptr 標號”的說明: (1)16位位移=“標號”處的地址-jmp指令后的第一個字節(jié)的地址; (2)near ptr指明此處的位移
12、為16位位移,進行的是段內(nèi)近轉(zhuǎn)移; (3)16位位移的范圍為 -3276932767,用補碼表示; (4)16位位移由編譯程序在編譯時算出,1、依據(jù)位移進行轉(zhuǎn)移的jmp指令,2、轉(zhuǎn)移的目的地址在指令中的jmp指令,前面講的jmp指令,其對應的機器碼中并沒有轉(zhuǎn)移的目的地址,而是相對于當前IP的轉(zhuǎn)移位移。 指令 “jmp far ptr 標號” 實現(xiàn)的是段間轉(zhuǎn)移,又稱為遠轉(zhuǎn)移,指令 “jmp far ptr 標號” 功能如下: (CS)=標號所在段的段地址; (IP)=標號所在段中的偏移地址。 far ptr指明了指令用標號的段地址和偏移地址修改CS和IP。 我們看下面的程序,2、轉(zhuǎn)移的目的地址在
13、指令中的jmp指令,程序9.3: assume cs:codesg codesg segment start:mov ax,0 mov bx,0 jmp far ptr s db 256 dup (0) s: add ax,1 inc ax codesg ends end start,2、轉(zhuǎn)移的目的地址在指令中的jmp指令,我們在Debug中將程序9.3翻譯成為機器碼,看到的結果如圖,2、轉(zhuǎn)移的目的地址在指令中的jmp指令,如圖中所示: 源程序中的db 256 dup (0),被Debug解釋為相應的若干條匯編指令 。這不是關鍵,關鍵是,我們要注意一下jmp far ptr s所對應的機器碼:
14、EA 0B 01 BD 0B ,其中包含轉(zhuǎn)移的目的地址,2、轉(zhuǎn)移的目的地址在指令中的jmp指令,0B 01 BD 0B” 是目的地址在指令中的存儲順序,高地址的“BD 0B”是轉(zhuǎn)移的段地址:0BBDH,低地址的“0B 01” 是偏移地址:010BH,2、轉(zhuǎn)移的目的地址在指令中的jmp指令,3、轉(zhuǎn)移地址在寄存器中的jmp指令,指令格式:jmp 16位寄存器 功能:IP =(16位寄存器) 這種指令我們在前面的課程(參見2.11節(jié))中已經(jīng)講過,這里就不再詳述,轉(zhuǎn)移地址在內(nèi)存中的jmp指令有兩種格式: (1) jmp word ptr 內(nèi)存單元地址(段內(nèi)轉(zhuǎn)移) 功能:從內(nèi)存單元地址處開始存放著一個字
15、,是轉(zhuǎn)移的目的偏移地址。 內(nèi)存單元地址可用尋址方式的任一格式給出。 示例,4、轉(zhuǎn)移地址在內(nèi)存中的jmp指令,1) jmp word ptr 內(nèi)存單元地址(段內(nèi)轉(zhuǎn)移) 示例,mov ax,0123H mov bx,ax jmp word ptr bx 執(zhí)行后,(IP)=0123H,mov ax,0123H mov ds:0,ax jmp word ptr ds:0 執(zhí)行后,(IP)=0123H,4、轉(zhuǎn)移地址在內(nèi)存中的jmp指令,轉(zhuǎn)移地址在內(nèi)存中的jmp指令的第二種格式: (2) jmp dword ptr 內(nèi)存單元地址(段間轉(zhuǎn)移) 功能:從內(nèi)存單元地址處開始存放著兩個字,高地址處的字是轉(zhuǎn)移的目的段地址,低地址處是轉(zhuǎn)移的目的偏移地址。 (CS)=(內(nèi)存單元地址+2) (IP)=(內(nèi)存單元地址) 內(nèi)存單元地址可用尋址方式的任一格式給出。 示例,4、轉(zhuǎn)移地址在內(nèi)存中的jmp指令,2) jmp dwor
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度科技創(chuàng)新項目招投標與合同執(zhí)行監(jiān)管服務協(xié)議3篇
- 2024中區(qū)房產(chǎn)租賃合同簽訂及履行監(jiān)督服務協(xié)議3篇
- 2024年幼兒園食堂潲水處理與環(huán)保產(chǎn)業(yè)合作框架合同6篇
- 2024年度直飲水工程綠色施工與環(huán)保驗收合同3篇
- 2024年版企業(yè)勞務派遣合作協(xié)議模板版B版
- 牛飼養(yǎng)與疫病防控策略研究考核試卷
- 電子線路課程設計報告
- 生產(chǎn)線智能化布局與優(yōu)化考核試卷
- 糖果電眼芭比妝課程設計
- 統(tǒng)編版語文七年級上冊第二單元練習題 (含答案)
- 無人機測試與評估標準
- 2024版國開電大法學本科《國際經(jīng)濟法》歷年期末考試總題庫
- 陪診服務培訓課件模板
- 兒童食物過敏的流行病學調(diào)查與風險因素分析
- 2023南頭古城項目簡介招商手冊
- 核心期刊投稿指南課件
- 2023-2024學年四川省成都市錦江區(qū)重點中學八年級(上)期末數(shù)學試卷(含解析)
- 嚴重精神障礙患者管理課件
- 杏樹主要病蟲害及其防治方法
- 人身安全及注意事項
- ACL導管維護三步曲臨床應用
評論
0/150
提交評論