新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 8086指令系統(tǒng)---控制轉(zhuǎn)移指令(一)

        8086指令系統(tǒng)---控制轉(zhuǎn)移指令(一)

        作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
          2 條件轉(zhuǎn)移指令(conditional jump)

          條件轉(zhuǎn)移指令是在滿足了規(guī)定的條件后才控制程序轉(zhuǎn)移的一類指令,8086的條件轉(zhuǎn)移指令總結(jié)在表3.4中。

          所有條件轉(zhuǎn)移指令都是短轉(zhuǎn)移指令,轉(zhuǎn)移的目標(biāo)地址必須在當(dāng)前IP地址的-128至+127字節(jié)范圍之內(nèi),因此條件轉(zhuǎn)移指令是2字節(jié)指令。

          計(jì)算轉(zhuǎn)向地址的方法和無(wú)條件短轉(zhuǎn)移指令是一樣的,看例3.40的反匯編代碼。

          例3.40程序中的"JNZ AGAIN"匯編成"JNZ 000D",000D是標(biāo)號(hào)AGAIN的地址,指令"JNZ 000D"的機(jī)器代碼是75FA,75是操作碼,F(xiàn)A是位移量。當(dāng)CPU讀取JNZ指令后,IP寄存器自動(dòng)加2(JNZ的指令長(zhǎng)度)指向了下一條指令(MOV),此時(shí)IP的當(dāng)前值是0013。計(jì)算轉(zhuǎn)向地址時(shí),(IP)當(dāng)前+位移量 = 0013+FA = 0013+FFFA = 000D,這正是AGAIN的偏移地址。實(shí)際上FA是-6的補(bǔ)碼,8位的FA與16位的0013相加時(shí),F(xiàn)A符號(hào)擴(kuò)展成為FFFA,相加的加結(jié)果為000D。
                    表3.4 條件轉(zhuǎn)移指令
        分類
        指 令
        轉(zhuǎn) 移 條 件
        說(shuō) 明
        (Ⅰ)
        JZ/JE
        ZF=1
        為零/相等, 則轉(zhuǎn)移
        JNZ/JNE
        ZF=0
        不為零/不相等, 則轉(zhuǎn)移
        JS
        SF=1
        為負(fù), 則轉(zhuǎn)移
        JNS
        SF=0
        為正, 則轉(zhuǎn)移
        JO
        OF=1
        溢出, 則轉(zhuǎn)移
        JNO
        OF=0
        不溢出, 則轉(zhuǎn)移
        JP
        PF=1
        奇偶位為1, 則轉(zhuǎn)移
        JNP
        PF=0
        奇偶位為0, 則轉(zhuǎn)移
        JC
        CF=1
        進(jìn)位位為1, 則轉(zhuǎn)移
        JNC
        CF=0
        進(jìn)位位為0, 則轉(zhuǎn)移
        (Ⅱ)
        JB/JNAE/JC
        CF=1
        低于/不高于等于, 則轉(zhuǎn)移
        JNB/JAE/JNC
        CF=0
        不低于/高于等于, 則轉(zhuǎn)移
        JBE/JNA
        (CFZF)=1
        低于等于/不高于, 則轉(zhuǎn)移
        JNBE/JA
        (CFZF)=0
        不低于等于/高于, 則轉(zhuǎn)移
        (Ⅲ)
        JL/JNGE
        (SFOF)=1
        小于/不大于等于, 則轉(zhuǎn)移
        JNL/JGE
        (SFOF)=0
        不小于/大于等于, 則轉(zhuǎn)移
        JLE/JNG
        ((SFOF)ZF)=1
        小于等于/不大于, 則轉(zhuǎn)移
        JNLE/JG
        ((SFOF)ZF)=0
        不小于等于/大于, 則轉(zhuǎn)移
        (Ⅳ)
        JCXZ
        (CX)=0
        CX的內(nèi)容為0, 則轉(zhuǎn)移

        注:(Ⅰ)根據(jù)條件碼的值轉(zhuǎn)移 (Ⅱ)比較兩個(gè)無(wú)符號(hào)數(shù),根據(jù)比較的結(jié)果轉(zhuǎn)移
        (Ⅲ)比較兩個(gè)帶符號(hào)數(shù),根據(jù)比較的結(jié)果轉(zhuǎn)移 (Ⅳ)根據(jù)CX寄存器的值轉(zhuǎn)移

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

         

        1050:0000  B86610    MOV AX,1040
            1050:0003  8ED8     MOV DS,AX
            1050:0005  B90500    MOV CX,0005
            1050:0008  BB0000    MOV BX,0000
            1050:000D  0207 AGAIN: ADD AL,[BX]
            1050:000F  43      INC BX
            1050:0010  49      DEC CX
            1050:0011  75FA     JNZ 000D
            1050:0013  A20500    MOV [0005],AL
            1050:0016  B44C     MOV AH,4C
            1050:0018  CD21     INT 21

         例假設(shè)程序進(jìn)行兩個(gè)帶符號(hào)數(shù)的比較,并根據(jù)比較結(jié)果轉(zhuǎn)移,其中(AL)=80H,(BL)=01,請(qǐng)指出下面 兩組指令的轉(zhuǎn)向地址。

          ⑴ CMP AL,BL     ⑵ CMP AL,BL
            JL XY         JB XY  

          答:⑴ 轉(zhuǎn)向目標(biāo)地址XY;⑵不能實(shí)現(xiàn)轉(zhuǎn)移。
            執(zhí)行CMP指令時(shí),(AL)-(BL)=80-01=7F,條件碼設(shè)置為:SF=0,OF=1,CF=0。執(zhí)行JL指令時(shí),測(cè)試轉(zhuǎn)移條件:SFOF = 01 =1,說(shuō)明滿足(AL)<(BL)的轉(zhuǎn)移條件,因此,(IP)←XY的偏移地址,程序即轉(zhuǎn)移到XY單元執(zhí)行新的指令。

          JB指令的轉(zhuǎn)移條件為CF=1,而CMP的執(zhí)行結(jié)果使CF=0,所以不能引起轉(zhuǎn)移。



        上一頁(yè) 1 2 下一頁(yè)

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 渝中区| 衡山县| 彩票| 黎川县| 新兴县| 高唐县| 黑山县| 洱源县| 敖汉旗| 张掖市| 准格尔旗| 镇宁| 涟源市| 东城区| 安吉县| 阜南县| 江都市| 多伦县| 广灵县| 同德县| 得荣县| 东乡族自治县| 普兰店市| 睢宁县| 道真| 武宣县| 松江区| 南宫市| 正宁县| 治县。| 乌兰察布市| 和硕县| 临澧县| 柳河县| 沂南县| 手机| 辽宁省| 射阳县| 商水县| 和政县| 酒泉市|