新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 8086指令系統---控制轉移指令(一)

        8086指令系統---控制轉移指令(一)

        作者: 時間:2016-11-27 來源:網絡 收藏
          控制轉移指令通過改變CS:IP來控制程序的執行流程。這類指令包括無條件轉移指令、條件轉移指令、循環指令、子程序調用和返回指令以及中斷和中斷返回指令。
            ⑴ 無條件轉移
              JMP 跳轉

             ⑵ 條件轉移
              JZ/JNZ    結果為零/不為零則轉移
              JS/JNS    結果為負/為正則轉移
              JO/JNO    溢出/不溢出則轉移
              JP/JNP    奇偶位為1/為0則轉移
              JB/JNB    低于/不低于則轉移
              JBE/JNBE   低于等于/高于則轉移
              JL/JNL    小于/不小于則轉移
              JLE/JNLE   小于等于/大于則轉移
              JCXZ     CX為零則轉移

             ⑶ 循環指令
              LOOP      循環
              LOOPZ/LOOPE  為零/相等時循環
              LOOPNZ/LOOPNE 不為零/不等時循環

             ⑷ 子程序調用與返回
              CALL      調用
              RET       返回

             ⑸ 中斷及中斷返回
              INT       中斷
              INTO      溢出則中斷
              IRET       中斷返回


          程序中指令的執行順序是由CS:IP來決定的,程序轉移類指令可改變IP或CS、IP的內容,從而控制指令的執行順序,實現指令轉移、程序調用等功能。

        本文引用地址:http://www.104case.com/article/201611/322189.htm

          1 無條件轉移指令

         JMP指令控制程序無條件地跳轉到目的單元,使用JMP指令可有三種格式:

         ⑴ JMP SHORT label 短轉移(short jump)
           
         ⑵ JMP NEAR PTR label 近轉移(near jump)

         ● JMP label 直接轉移(direct jump)
          
         ● JMP reg 寄存器間接轉移(register indirect jump)
          
         ● JMP WORD PTR OPR 存儲器間接轉移(memory indirect jump)
          
         ⑶ JMP FAR PTR label 遠轉移(far jump)

         短轉移的目標地址(或稱轉向地址)相對于當前IP值的位移量在-128至+127字節之間,當前IP值是指JMP指令的下一條指令的地址(如圖3.11所示)。對短轉移JMP,機器指令的第一個字節為操作碼EB,第二個字節為位移量00~FF,這是一個帶符號的補碼數。轉向地址的計算方法為:(IP)當前+8位位移量。操作符SHORT指示匯編程序將JMP指令匯編成一個2字節指令。


          ⑴ JMP SHORT label 短轉移(short jump)
            執行操作:(IP) ← (IP)當前+8位位移量

         短轉移示意圖
          

          ⑵ JMP NEAR PTR label 近轉移(near jump)
          近轉移是JMP指令的缺省格式,可以寫為"JMP label"。它可在當前代碼段內轉移,機器指令的操作碼是E9,位移量是16位的帶符號補碼數。指令中的轉向地址可以是直接尋址方式、寄存器尋址方式、寄存器間接方式和存儲器尋址方式。

          ● JMP label 直接轉移(direct jump)
          執行操作:(IP) ← OFFSET label = (IP)當前+16位位移量
          轉移的目標地址在指令中可直接使用符號地址,由于位移量為16位,它的轉移范圍應是-32768至+32767,也就是說,近轉移指令可以轉移到段內的任一個位置。

          ● JMP reg 寄存器間接轉移(register indirect jump)
          執行操作:(IP) ← (reg)
          轉移的目標地址在寄存器中,例如指令"JMP BX"執行的結果,將BX的內容送給IP。

          ● JMP WORD PTR OPR 存儲器間接轉移(memory indirect jump)
          執行操作:(IP) ← (PA+1,PA)
          存儲器的物理地址PA由指令中的尋址方式確定,JMP指令執行的結果,把PA單元的字內容送到IP寄存器中。例如"JMP WORD PTR [DI]",物理地址PA = (DS)×24+(DI),指令執行的結果是(IP)= (PA+1,PA)。

          ⑶ JMP FAR PTR label 遠轉移(far jump)
          執行操作:(IP) ← label的段內偏移地址
               (CS) ← label所在段的段地址
          遠轉移實現的是段間的跳轉,即從當前代碼段跳轉到另一個代碼段中,這意味著指令執行后,不僅要改變IP的值,CS也會得到一個新的段地址。在匯編指令中,遠轉移的目標地址也可以使用除立即尋址方式外的任何尋址方式來表示。
        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 南昌市| 合山市| 增城市| 新宾| 桓台县| 温泉县| 金门县| 大田县| 新泰市| 慈利县| 怀仁县| 山阴县| 广水市| 驻马店市| 青阳县| 淮滨县| 樟树市| 巴南区| 区。| 公主岭市| 武强县| 禄丰县| 菏泽市| 竹北市| 类乌齐县| 信丰县| 清涧县| 渝中区| 安阳县| 琼中| 邵阳县| 黄大仙区| 青岛市| 隆子县| 外汇| 泰宁县| 全椒县| 吉水县| 盐亭县| 乃东县| 康定县|