日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

转移指令jmp和跳转指令call

發(fā)布時間:2023/12/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转移指令jmp和跳转指令call 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【-1】寫在前面

以下內(nèi)容文字描述來自于 王爽老師的《匯編語言》教材,建議大家都買一本,哈哈。不是我打廣告,確實人家寫的好,應該支持。我只是附上了自己的圖片和理解而已。

【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 標號(轉(zhuǎn)到標號處執(zhí)行指令)

對ip的修改范圍在-128~127;

[attention] : cpu在執(zhí)行jmp指令時,并不需要轉(zhuǎn)移的目的地址, 而是包含轉(zhuǎn)移的位移;

2.2) jmp near ptr 標號

它實現(xiàn)的是段內(nèi)近轉(zhuǎn)移, 只不過對ip的修改范圍在 -32768~32767;

2.3)jmp far ptr 標號

它實現(xiàn)的是段間轉(zhuǎn)移,又稱遠轉(zhuǎn)移; far ptr 指明了指令用標號的段地址和偏移地址修改cs和ip;

2.4)轉(zhuǎn)移地址在內(nèi)存中

  • 2.4.1)jmp word ptr 內(nèi)存單元地址(段內(nèi)轉(zhuǎn)移)
    function:從內(nèi)存單元地址處開始存放一個字,是轉(zhuǎn)移的目的偏移地址;
    如,

    mov ax,0123h mov [bx], ax jmp word ptr [bx] 執(zhí)行后, (ip) = 0123h

  • 2.4.2)jmp dword ptr 內(nèi)存單元地址(段間轉(zhuǎn)移)
    功能:內(nèi)存中存放兩個字,高地址處的字存放轉(zhuǎn)移的目的段地址;低地址處存放目的偏移地址;
    (cs) = 內(nèi)存單元地址 + 2
    (ip) = 內(nèi)存單元地址
    如:

    mov ax,0123h mov ds:[0], ax mov word ptr ds:[2],0 jmp dword ptr ds:[0] 執(zhí)行后, (cs) = 0; (ip) = 0123h 。


    [Complementary]
    MOV AX, WORD PTR [BX] ; 要有逗號
    將DS:BX指向的內(nèi)存地址中的16位數(shù)讀到AX里面。
    MOV是數(shù)值傳送指令,AX是目的操作數(shù),WORD PTR表示后面的儲存單元是字類型,[BX]表示用BX的值來尋址,默認段地址是DS的值。

【3】我們的call

3.0)談談ret和retf

  • 3.0.1)執(zhí)行ret 相當于執(zhí)行:

    (ip) = (ss) * 16+ (sp); (sp) = (sp) + 2;
  • 3.0.2)執(zhí)行retf, 相當于執(zhí)行:

    (ip) = (ss) * 16+ (sp) ; (sp) = (sp) + 2 ; cs = ss * 16 + sp ; sp = sp + 2 ;
  • 3.0.3)執(zhí)行ret,相當于執(zhí)行 pop IP

  • 3.0.4)執(zhí)行retf,相當于執(zhí)行 pop IP; pop CS

    (所以retf 返回的時候要先將cs壓棧)

3.1)依據(jù)位移進行轉(zhuǎn)移的call 指令

相當于——將當前的IP或CS和IP壓入棧,然后轉(zhuǎn)移;
call指令除了不能實現(xiàn)短轉(zhuǎn)移之外,其他和jmp相同;

  • 3.1.1)cpu執(zhí)行call時,相當于進行:

    push ip jmp near ptr 標號
  • 3.1.2)also, 相當于:

    sp = sp - 2 ss *16 +sp = ip ip = ip + 16位位移


3.2)轉(zhuǎn)移的目的地址在指令中的call指令

call far ptr 標號實現(xiàn)的是段間轉(zhuǎn)移;
  • 3.2.1)cpu 執(zhí)行call far ptr 標號時,相當于進行

    push cs push ip jmp far ptr 標號
  • 3.2.2)also 相當于

    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
功能:

sp = sp -2 ss * 16 + sp = ip ip = 16位regalso 相當于 push ip jmp 16位reg

3.4)轉(zhuǎn)移地址在內(nèi)存中的call指令

  • 3.4.1)call word ptr 內(nèi)存單元地址
    相當于

    push ip jmp word ptr 內(nèi)存單元地址
  • 3.4.2)call dword ptr 內(nèi)存單元地址
    相當于:

    push cs push ip jmp dword ptr 內(nèi)存單元地址

總結

以上是生活随笔為你收集整理的转移指令jmp和跳转指令call的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。