版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、jmp指令,jmp為無(wú)條件轉(zhuǎn)移,可以只修改IP,也可以同時(shí)修改CS和IP; jmp指令要給出兩種信息: 轉(zhuǎn)移的目的地址 轉(zhuǎn)移的距離(段間轉(zhuǎn)移、段內(nèi)短轉(zhuǎn)移,段內(nèi)近轉(zhuǎn)移,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,jmp short 標(biāo)號(hào)(轉(zhuǎn)到標(biāo)號(hào)處執(zhí)行指令) 這種格式的 jmp 指令實(shí)現(xiàn)的是段內(nèi)短轉(zhuǎn)移,它對(duì)IP的修改范圍為 -128127,也就是說(shuō),它向前轉(zhuǎn)移時(shí)可以最多越過(guò)128個(gè)字節(jié),向后轉(zhuǎn)移可以最多越過(guò)127個(gè)字節(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 ,因?yàn)閳?zhí)行 jmp short s 后 ,越過(guò)了add ax,1 ,IP 指向了標(biāo)號(hào) s處的 inc ax。也就是說(shuō),程序只進(jìn)行了一次ax加1操作,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,匯編指令jmp short s 對(duì)應(yīng)的機(jī)器指令應(yīng)該是什么樣的呢? 我們先看一下別的匯編指令和其對(duì)應(yīng)的機(jī)器指令,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,匯編指令與機(jī)器碼的對(duì)應(yīng)示例 可以看到,在一般的匯編指令中,匯編指令中的idata(立即數(shù)),不論它是表示一個(gè)數(shù)據(jù)還是內(nèi)存單元的偏移地址,都會(huì)在對(duì)應(yīng)的機(jī)器指令中出現(xiàn),因?yàn)镃PU執(zhí)行的是機(jī)器指令,它必須要處理這些
3、數(shù)據(jù)或地址,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,對(duì)照匯編源程序,我們可以看到,Debug 將 jmp short s 中的 s 表示為inc ax 指令的偏移地址 8 ,并將jmp short s 表示為 jmp 0008 ,表示轉(zhuǎn)移到cs:0008處,下面現(xiàn)在我們?cè)贒ebug中將程序9.1翻譯成為機(jī)器碼, 看看結(jié)果,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,這一切似乎合理,可是當(dāng)我們查看jmp short s或jmp 0008所對(duì)應(yīng)的機(jī)器碼,卻發(fā)現(xiàn)了問(wèn)題,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,jmp 0008 ( Debug 中的表示)或jmp short s (匯編語(yǔ)言中的表示)所對(duì)應(yīng)的機(jī)器碼為EB 0
4、3,注意,這個(gè)機(jī)器碼中竟不包含轉(zhuǎn)移的目的地址。 這意味著,CPU 在執(zhí)行EB 03的時(shí)候,并不知道轉(zhuǎn)移目的地址,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,那么,CPU根據(jù)什么進(jìn)行轉(zhuǎn)移呢? 沒(méi)有了目的地址,CPU如何知道轉(zhuǎn)移到哪里呢,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,令人奇怪的是,匯編指令jmp short s中,明明是帶有轉(zhuǎn)移的目的地址(由標(biāo)號(hào) s 表示)的,可翻譯成機(jī)器指令后,怎么目的地址就沒(méi)了呢,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,沒(méi)有了目的地址,CPU如何知道轉(zhuǎn)移到哪里? 我們把程序9.1改寫(xiě)一下,變成這樣: 程序9.2,1、依據(jù)位移進(jìn)行轉(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 我們?cè)贒ebug中將程序9.2翻譯為機(jī)器碼,看看結(jié)果,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,比較一下程序1和2用Debug查看的結(jié)果,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,注意,兩個(gè)程序中的 jmp指令都要使IP 指向 inc ax 指令,但是程序 1 的 inc ax 指令的偏移地址為 0008 ,而程序 2 的 inc ax 指令的偏移地址為000BH。 我們?cè)賮?lái)看兩個(gè)程序中的jmp指令所對(duì)應(yīng)的機(jī)器碼,都是EB 0
6、3,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,這說(shuō)明CPU在指令jmp指令的時(shí)候并不需要轉(zhuǎn)移的目的地址。 兩個(gè)程序中的jmp指令的轉(zhuǎn)移目的地址并不一樣,一個(gè)是cs:0008,另一個(gè)是cs:000B。 如果機(jī)器指令中包含了轉(zhuǎn)移的目的地址的話(huà),那么它們對(duì)應(yīng)的機(jī)器碼應(yīng)該是不同的,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,可是它們對(duì)應(yīng)的機(jī)器碼都是 EB 03,這說(shuō)明在機(jī)器指令中并不包含轉(zhuǎn)移 的目的地址。 如果機(jī)器指令中不包含目的地址的話(huà),那么,也就是說(shuō) CPU不需要這個(gè)目的地址就可以實(shí)現(xiàn)對(duì)IP的修改,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,這種信息是什么呢? 我們一步步地分析。 我們先簡(jiǎn)單回憶一下CPU執(zhí)行指令的過(guò)程,1、
7、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,CPU執(zhí)行指令的過(guò)程: (1)從CS:IP指向內(nèi)存單元讀取指令,讀取的指令進(jìn)入指令緩沖區(qū); (2)(IP) = (IP)+所讀取指令的長(zhǎng)度,從而指向下一條指令; (3)執(zhí)行指令。轉(zhuǎn)到1,重復(fù)這個(gè)過(guò)程,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,按照這個(gè)步驟,我們參照程序9.2的圖看一下: jmp short s指令的讀取和執(zhí)行過(guò)程,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,jmp short s指令的讀取和執(zhí)行過(guò)程: (1)(CS)=0BBDH,(IP)=0006,CS:IP指向EB 03(jmp short s的機(jī)器碼); (2)讀取指令碼EB 03進(jìn)入指令緩沖器; (3)(IP
8、)=(IP)+所讀取指令的長(zhǎng)度=(IP)+2=0008,CS:IP指向add ax,1; (4)CPU指行指令緩沖器中的指令EB 03; (5)指令EB 03執(zhí)行后,(IP)=000BH,CS:IP指向inc ax,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,從上面的過(guò)程中我們看到,CPU 將指令EB 03 讀入后,IP 指向了下一條指令,即 CS:0008 處的add ax,1,接著執(zhí)行EB 03。 如果 EB 03 沒(méi)有對(duì) IP 進(jìn)行修改的話(huà),那么,接下來(lái) CPU將執(zhí)行 add ax,1,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,可是,CPU 執(zhí)行的 EB 03確是一條修改IP的轉(zhuǎn)移指令,執(zhí)行后 (IP)
9、= 000BH ,CS:IP指向inc ax,CS:0008處的add ax,1沒(méi)有被執(zhí)行。 CPU在執(zhí)行EB 03的時(shí)候是根據(jù)什么修改的 IP,使其指向目標(biāo)指令呢?就是根據(jù)指令碼中的03,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,注意,要轉(zhuǎn)移的目的地址是CS:000B,而CPU 執(zhí)行 EB 03時(shí),當(dāng)前的(IP)=0008,如果將當(dāng)前的IP值加3,使(IP)=000BH,CS:IP就可以指向目標(biāo)指令。 在轉(zhuǎn)移指令EB 03中并沒(méi)有告訴CPU要轉(zhuǎn)移的目的地址,卻告訴了 CPU 要轉(zhuǎn)移的位移,即將當(dāng)前的IP向后移動(dòng)3個(gè)字節(jié),1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,因?yàn)槌绦?、2中的jmp 指令轉(zhuǎn)移的位移相同,
10、都是向后 3 個(gè)字節(jié),所以它們的機(jī)器碼都是EB 03。 原來(lái)如此,在“jmp short 標(biāo)號(hào)”指令所對(duì)應(yīng)的機(jī)器碼中,并不包含轉(zhuǎn)移的目的地址,而包含的是轉(zhuǎn)移的位移。 這個(gè)位移,使編譯器根據(jù)匯編指令中的“標(biāo)號(hào)”計(jì)算出來(lái)的,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,轉(zhuǎn)移位移具體的計(jì)算方法如下圖,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,結(jié)論: CPU執(zhí)行 jmp short 標(biāo)號(hào) 指令時(shí)并不需要轉(zhuǎn)移的目的地址,只需要知道轉(zhuǎn)移的位移就行了,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,實(shí)際上,指令“jmp short 標(biāo)號(hào)”的功能為(IP)=(IP)+8位位移。 (1)8位位移=“標(biāo)號(hào)”處的地址-jmp指令后的第一個(gè)字節(jié)的地址
11、; (2)short指明此處的位移為8位位移; (3)8位位移的范圍為-128127,用補(bǔ)碼表示 (如果你對(duì)補(bǔ)碼還不了解,請(qǐng)閱讀附注2) (4)8位位移由編譯程序在編譯時(shí)算出,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,還有一種和指令“jmp short 標(biāo)號(hào)”功能相近的指令格式: jmp near ptr 標(biāo)號(hào) 它實(shí)現(xiàn)的時(shí)段內(nèi)近轉(zhuǎn)移。 指令“jmp near ptr 標(biāo)號(hào)”的功能為: (IP)=(IP)+16位位移,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,指令“jmp near ptr 標(biāo)號(hào)”的說(shuō)明: (1)16位位移=“標(biāo)號(hào)”處的地址-jmp指令后的第一個(gè)字節(jié)的地址; (2)near ptr指明此處的位移
12、為16位位移,進(jìn)行的是段內(nèi)近轉(zhuǎn)移; (3)16位位移的范圍為 -3276932767,用補(bǔ)碼表示; (4)16位位移由編譯程序在編譯時(shí)算出,1、依據(jù)位移進(jìn)行轉(zhuǎn)移的jmp指令,2、轉(zhuǎn)移的目的地址在指令中的jmp指令,前面講的jmp指令,其對(duì)應(yīng)的機(jī)器碼中并沒(méi)有轉(zhuǎn)移的目的地址,而是相對(duì)于當(dāng)前IP的轉(zhuǎn)移位移。 指令 “jmp far ptr 標(biāo)號(hào)” 實(shí)現(xiàn)的是段間轉(zhuǎn)移,又稱(chēng)為遠(yuǎn)轉(zhuǎn)移,指令 “jmp far ptr 標(biāo)號(hào)” 功能如下: (CS)=標(biāo)號(hào)所在段的段地址; (IP)=標(biāo)號(hào)所在段中的偏移地址。 far ptr指明了指令用標(biāo)號(hào)的段地址和偏移地址修改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指令,我們?cè)贒ebug中將程序9.3翻譯成為機(jī)器碼,看到的結(jié)果如圖,2、轉(zhuǎn)移的目的地址在指令中的jmp指令,如圖中所示: 源程序中的db 256 dup (0),被Debug解釋為相應(yīng)的若干條匯編指令 。這不是關(guān)鍵,關(guān)鍵是,我們要注意一下jmp far ptr s所對(duì)應(yīng)的機(jī)器碼:
14、EA 0B 01 BD 0B ,其中包含轉(zhuǎn)移的目的地址,2、轉(zhuǎn)移的目的地址在指令中的jmp指令,0B 01 BD 0B” 是目的地址在指令中的存儲(chǔ)順序,高地址的“BD 0B”是轉(zhuǎn)移的段地址:0BBDH,低地址的“0B 01” 是偏移地址:010BH,2、轉(zhuǎn)移的目的地址在指令中的jmp指令,3、轉(zhuǎn)移地址在寄存器中的jmp指令,指令格式:jmp 16位寄存器 功能:IP =(16位寄存器) 這種指令我們?cè)谇懊娴恼n程(參見(jiàn)2.11節(jié))中已經(jīng)講過(guò),這里就不再詳述,轉(zhuǎn)移地址在內(nèi)存中的jmp指令有兩種格式: (1) jmp word ptr 內(nèi)存單元地址(段內(nèi)轉(zhuǎn)移) 功能:從內(nèi)存單元地址處開(kāi)始存放著一個(gè)字
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)存單元地址處開(kāi)始存放著兩個(gè)字,高地址處的字是轉(zhuǎn)移的目的段地址,低地址處是轉(zhuǎn)移的目的偏移地址。 (CS)=(內(nèi)存單元地址+2) (IP)=(內(nèi)存單元地址) 內(nèi)存單元地址可用尋址方式的任一格式給出。 示例,4、轉(zhuǎn)移地址在內(nèi)存中的jmp指令,2) jmp dwor
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度城市公共交通車(chē)輛運(yùn)營(yíng)管理合同3篇
- 2025年度柴油市場(chǎng)分析與預(yù)測(cè)服務(wù)合同范本4篇
- 專(zhuān)業(yè)設(shè)備銷(xiāo)售協(xié)議模板集(2024版)版
- 2025年廠(chǎng)區(qū)綠化生態(tài)教育推廣與培訓(xùn)服務(wù)協(xié)議4篇
- 2024年起重機(jī)研發(fā)與購(gòu)銷(xiāo)合作項(xiàng)目合同范本3篇
- 二零二四家居建材店員工勞動(dòng)合同模板3篇
- 2025年度智能機(jī)器人技術(shù)研發(fā)合作協(xié)議4篇
- 2024版企業(yè)技術(shù)改造借款的合同范本
- 二零二五版醫(yī)療設(shè)備采購(gòu)與租賃合同范本3篇
- 2024年04月吉林銀行總行投資銀行部2024年社會(huì)招考1名負(fù)責(zé)人筆試歷年參考題庫(kù)附帶答案詳解
- GB/T 6913-2008鍋爐用水和冷卻水分析方法磷酸鹽的測(cè)定
- GB/T 18717.2-2002用于機(jī)械安全的人類(lèi)工效學(xué)設(shè)計(jì)第2部分:人體局部進(jìn)入機(jī)械的開(kāi)口尺寸確定原則
- 教案:第三章 公共管理職能(《公共管理學(xué)》課程)
- 中國(guó)文化概論(第三版)全套課件
- 117-鋼結(jié)構(gòu)工程質(zhì)量常見(jiàn)問(wèn)題與管控措施
- SHS5230三星指紋鎖中文說(shuō)明書(shū)
- 諾和關(guān)懷俱樂(lè)部對(duì)外介紹
- 保定市縣級(jí)地圖PPT可編輯矢量行政區(qū)劃(河北省)
- 新蘇教版科學(xué)六年級(jí)下冊(cè)全冊(cè)教案(含反思)
- 供方注冊(cè)指南-ZTE
- 真心英雄合唱歌詞
評(píng)論
0/150
提交評(píng)論