• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            focus on linux, c/c++, lua

            深層理解指令跳轉(zhuǎn)

            這段時間看王爽的匯編看的效率很高,看樣在學(xué)習(xí)高級語言后再學(xué)習(xí)asm是速度比較快。其中有講到指令跳轉(zhuǎn)的地方,我當(dāng)時想到的就是goto,用匯編來解釋再貼切不過了。我貼上一道習(xí)題與講解,加深印象。

            ---------------------------------

            分析下面的程序,在運行前思考:這個程序可以正確返回嗎?

            運行后再思考:為什么是這種結(jié)果?

            通過這個程序加深對相關(guān)內(nèi)容的理解。

            assume cs:codesg

            codesg segment

                    mov ax,4c00h

                    int 21h

            start:

                    mov ax,0

            s:

                    nop

                    nop       

                    mov di,offset s

                    mov si,offset s2

                    mov ax,cs:[si]

                    mov cs:[di],ax

            s0:

                    jmp short s

            s1:

                    mov ax,0

                    int 21h

                    mov ax,0

            s2:

                    jmp short s1

                    nop

            codesg ends

            end start

            -------------------------------------------------------------------------------------------------------------------------------------------------------

            程序可以正常返回。

             

            詳細分析:

            在此題中較為深入地考察了‘段內(nèi)直接短轉(zhuǎn)移’[形如:jmp short 標(biāo)號]的概念。

            我們知道程序中:

            mov di,offset s

            mov si,offset s2

            mov ax,cs:[si]

            mov cs:[di],ax

            四條指令的作用是將標(biāo)號s2處的一條指令復(fù)制到標(biāo)號s處。這時我們應(yīng)該關(guān)心所復(fù)制的語句"jmp short s1"對程序的影響:我們知道在段內(nèi)直接短轉(zhuǎn)移指令所對應(yīng)的機器碼中,并不包含轉(zhuǎn)移的目的地址,而包含的是轉(zhuǎn)移的位移量(如對此概念還不太熟悉,請查看書中第167頁的內(nèi)容)。也就是說,在源程序的編譯過程中,編譯器遇到段內(nèi)直接短轉(zhuǎn)移’[形如:jmp short 標(biāo)號]時就會自動算出其要跳轉(zhuǎn)的位移量,以便程序在執(zhí)行段內(nèi)直接短轉(zhuǎn)移的指令時就根據(jù)位移量進行(向前或向后)跳轉(zhuǎn)。通過調(diào)試中的U命令我們可以看到指令's2:jmp short s1'所對應(yīng)的機器碼是EBF6F6h(-10d的補碼)就是跳轉(zhuǎn)的位移量[此位移量也可由指令's2:jmp short s1'處的偏移地址18h減去指令's2:jmp short s1'后一個字節(jié)的偏移地址22h得出]。這時我們就知道了其實復(fù)制到標(biāo)號s處的指令所對應(yīng)的機器碼就是EBF6(剛好取代兩個nop所對應(yīng)的機器碼),它的作用就是將當(dāng)前IP向前移動10個字節(jié)。當(dāng)程序執(zhí)行標(biāo)號s0處的指令后,程序便跳到標(biāo)號s處接著執(zhí)行標(biāo)號s處的指令。s處的指令的作用是向前跳10字節(jié),于是便跳到了代碼中的第一條指令,繼續(xù)執(zhí)行后便實現(xiàn)了程序的正常返回

            [注意:此程序不會也不可能執(zhí)行標(biāo)號s1處后的指令。]


            posted on 2010-10-20 10:15 zuhd 閱讀(326) 評論(0)  編輯 收藏 引用 所屬分類: my tips

            伊人色综合九久久天天蜜桃 | 亚洲va久久久噜噜噜久久 | 国产亚洲精品久久久久秋霞| 国内精品久久久久影院亚洲| 无码人妻精品一区二区三区久久 | 99久久综合狠狠综合久久止| 国产成人久久久精品二区三区| 色妞色综合久久夜夜| 久久精品国产影库免费看| 狠狠色婷婷久久综合频道日韩 | 久久精品这里只有精99品| 亚洲精品午夜国产VA久久成人| 日本道色综合久久影院| 久久中文骚妇内射| 香港aa三级久久三级老师2021国产三级精品三级在 | 久久r热这里有精品视频| 色婷婷久久久SWAG精品| 国产成人久久精品二区三区| 99久久这里只有精品| 亚洲AV无码久久精品蜜桃| 亚洲精品97久久中文字幕无码| 91麻精品国产91久久久久| 久久国产欧美日韩精品| 亚洲中文字幕无码久久综合网 | 久久久久久久综合综合狠狠| 青青青伊人色综合久久| 久久精品国产99国产精品澳门| 亚洲AV无码一区东京热久久| 久久妇女高潮几次MBA| 精品久久久中文字幕人妻| 久久无码国产专区精品| 热99RE久久精品这里都是精品免费| 久久激情亚洲精品无码?V| 久久精品不卡| 久久久久18| 久久久亚洲裙底偷窥综合| 伊人久久大香线焦AV综合影院| 亚洲午夜久久久久久久久久| 国产99久久久国产精品小说| 97精品伊人久久久大香线蕉 | 久久综合九色欧美综合狠狠|