转移指令jmp和跳转指令call
【-1】寫在前面
以下內(nèi)容文字描述來自于 王爽老師的《匯編語言》教材,建議大家都買一本,哈哈。不是我打廣告,確實(shí)人家寫的好,應(yīng)該支持。我只是附上了自己的圖片和理解而已。
【0】先上干貨
只修改ip,稱為段內(nèi)轉(zhuǎn)移,如jmp ax
修改cs和ip,稱為段間轉(zhuǎn)移,如 jmp 1000:0
【1】分類
轉(zhuǎn)移指令分為:
無條件轉(zhuǎn)移,如jmp
條件轉(zhuǎn)移
循環(huán)指令, loop
過程
中斷
【2】我們的jmp
2.1 )jmp short 標(biāo)號(轉(zhuǎn)到標(biāo)號處執(zhí)行指令)
對ip的修改范圍在-128~127;
[attention] : cpu在執(zhí)行jmp指令時,并不需要轉(zhuǎn)移的目的地址, 而是包含轉(zhuǎn)移的位移;
2.2) jmp near ptr 標(biāo)號
它實(shí)現(xiàn)的是段內(nèi)近轉(zhuǎn)移, 只不過對ip的修改范圍在 -32768~32767;
2.3)jmp far ptr 標(biāo)號
它實(shí)現(xiàn)的是段間轉(zhuǎn)移,又稱遠(yuǎn)轉(zhuǎn)移; far ptr 指明了指令用標(biāo)號的段地址和偏移地址修改cs和ip;
2.4)轉(zhuǎn)移地址在內(nèi)存中
2.4.1)jmp word ptr 內(nèi)存單元地址(段內(nèi)轉(zhuǎn)移)
mov ax,0123h mov [bx], ax jmp word ptr [bx] 執(zhí)行后, (ip) = 0123h
function:從內(nèi)存單元地址處開始存放一個字,是轉(zhuǎn)移的目的偏移地址;
如,2.4.2)jmp dword ptr 內(nèi)存單元地址(段間轉(zhuǎn)移)
mov ax,0123h mov ds:[0], ax mov word ptr ds:[2],0 jmp dword ptr ds:[0] 執(zhí)行后, (cs) = 0; (ip) = 0123h 。
功能:內(nèi)存中存放兩個字,高地址處的字存放轉(zhuǎn)移的目的段地址;低地址處存放目的偏移地址;
(cs) = 內(nèi)存單元地址 + 2
(ip) = 內(nèi)存單元地址
如:
[Complementary]
MOV AX, WORD PTR [BX] ; 要有逗號
將DS:BX指向的內(nèi)存地址中的16位數(shù)讀到AX里面。
MOV是數(shù)值傳送指令,AX是目的操作數(shù),WORD PTR表示后面的儲存單元是字類型,[BX]表示用BX的值來尋址,默認(rèn)段地址是DS的值。
【3】我們的call
3.0)談?wù)剅et和retf
3.0.1)執(zhí)行ret 相當(dāng)于執(zhí)行:
(ip) = (ss) * 16+ (sp); (sp) = (sp) + 2;3.0.2)執(zhí)行retf, 相當(dāng)于執(zhí)行:
(ip) = (ss) * 16+ (sp) ; (sp) = (sp) + 2 ; cs = ss * 16 + sp ; sp = sp + 2 ;3.0.3)執(zhí)行ret,相當(dāng)于執(zhí)行 pop IP
3.0.4)執(zhí)行retf,相當(dāng)于執(zhí)行 pop IP; pop CS
(所以retf 返回的時候要先將cs壓棧)
3.1)依據(jù)位移進(jìn)行轉(zhuǎn)移的call 指令
相當(dāng)于——將當(dāng)前的IP或CS和IP壓入棧,然后轉(zhuǎn)移;
call指令除了不能實(shí)現(xiàn)短轉(zhuǎn)移之外,其他和jmp相同;
3.1.1)cpu執(zhí)行call時,相當(dāng)于進(jìn)行:
push ip jmp near ptr 標(biāo)號3.1.2)also, 相當(dāng)于:
sp = sp - 2 ss *16 +sp = ip ip = ip + 16位位移
3.2)轉(zhuǎn)移的目的地址在指令中的call指令
call far ptr 標(biāo)號實(shí)現(xiàn)的是段間轉(zhuǎn)移;3.2.1)cpu 執(zhí)行call far ptr 標(biāo)號時,相當(dāng)于進(jìn)行
push cs push ip jmp far ptr 標(biāo)號3.2.2)also 相當(dāng)于
sp = sp - 2 ss * 16 + sp = cs sp = sp - 2 ss * 16 + sp = ip cs = 段基地址 ip = 偏移地址
3.3)轉(zhuǎn)移地址在register中的call指令
指令格式:call 16為reg
功能:
3.4)轉(zhuǎn)移地址在內(nèi)存中的call指令
3.4.1)call word ptr 內(nèi)存單元地址
push ip jmp word ptr 內(nèi)存單元地址
相當(dāng)于3.4.2)call dword ptr 內(nèi)存單元地址
push cs push ip jmp dword ptr 內(nèi)存單元地址
相當(dāng)于:
總結(jié)
以上是生活随笔為你收集整理的转移指令jmp和跳转指令call的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IP怎么屏蔽网站域名(网站可以屏蔽ip地
- 下一篇: apk文件怎么上传到flashfxp(a