<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 8086指令系統(tǒng)---邏輯指令

          8086指令系統(tǒng)---邏輯指令

          作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
            邏輯指令包括邏輯運(yùn)算指令和移位指令。邏輯運(yùn)算指令可對(duì)操作數(shù)執(zhí)行邏輯運(yùn)算,移位指令執(zhí)行對(duì)操作數(shù)左移或右移若干位的功能。
          ?、?邏輯運(yùn)算指令         ⑵ 移位指令
             AND     邏輯與          SAL     算術(shù)左移
             OR      邏輯或          SHR     邏輯右移
             OT      邏輯非          SAR     算術(shù)右移
             XOR     異或           ROL    循環(huán)左移
             TEST     測(cè)試           ROR    循環(huán)右移
                               RCL    帶進(jìn)位循環(huán)左移
                               RCR    帶進(jìn)位循環(huán)右移
           1 邏輯運(yùn)算指令

           AND dst,src ;邏輯與(logic and)
           執(zhí)行操作: (dst)←(dst)(src)

           OR dst,src ;邏輯或(logic or)
           執(zhí)行操作: (dst)←(dst)(src)

           NOT opr ;邏輯非(logic not)
           執(zhí)行操作: (opr)←

           XOR dst,src ;異或 (exclusive or)
           執(zhí)行操作: (dst)←(dst)(src)

           TEST opr1,opr2 ;測(cè)試(test)
           執(zhí)行操作: (opr1)(opr2),根據(jù)與運(yùn)算結(jié)果設(shè)置條件碼,結(jié)果不回送

            邏輯運(yùn)算指令是一組位操作指令,它們可以對(duì)字或字節(jié)按位執(zhí)行邏輯操作,因此,源操作數(shù)經(jīng)常是一個(gè)位串。以上五條指令除NOT不影響標(biāo)志位外,其它四條指令執(zhí)行后,CF和OF置0,AF無(wú)定義,SF、ZF和PF根據(jù)運(yùn)算結(jié)果設(shè)置。
           例(1) 可使某些位置0的AND運(yùn)算

                MOV   AL,35H    ; (AL)=00110101B
                AND   AL,0FH    ; (AL)=35H0FH=00000101B
                 ; flag settings will be: SF=0,ZF=0,PF=1,CF=OF=0

                (2) 可使某些位置1的OR運(yùn)算

                 MOV   AX,0504H   ; (AX)=0000 010100000100B
                 OR   AX,80F0H   ; (AL)=0504H80F0H=1000 0101 1111 0100B,
                           ; flags will be: SF=1,ZF=0,PF=0,CF=OF=0

             注意:標(biāo)志位PF按結(jié)果的低8 位來(lái)設(shè)置。

                 (3) XOR運(yùn)算使兩個(gè)操作數(shù)不同值的位置1,相同值的位置0
            
                 A.使某些位求反,其余位不變
                 MOV  BL,86H    ; (BL)=1000 0110B
                 XOR  BL,03H    ; (BL)=86H03H=1000 0101B,
                    ; flags will be: SF=1,ZF=0,PF=0,CF=OF=0

                 B.使某寄存器清0
                 XOR  AX,AX  ; (AX)=0, clear AX by XORing it with itself

                 (4) 測(cè)試某些位為0或?yàn)?

                 A.測(cè)試某數(shù)的奇偶性
                 MOV  DL,0AEH    ; (DL)=1010 1110B
                 TEST DL,01H ; 0AEH01H=0000 0000, ZF=1,but DL is unchanged
                 JZ EVEN ; if ZF=1,then tested number is even, if ZF=0, odd

                 B.測(cè)試某數(shù)為正數(shù)或負(fù)數(shù)
                 MOV  DH,9EH    ; (DL)=1001 1110B
                 TEST DH,80H    ; 9EH80H=1000 0000, ZF=0
                 JZ EVEN ; if ZF=0,then the value is negative, if ZF=1,it is

          本文引用地址:http://www.ex-cimer.com/article/201611/322188.htm

           2 移位指令

            移位指令包括邏輯移位指令、算術(shù)移位指令、循環(huán)移位指令和帶進(jìn)位循環(huán)移位指令。指令中的目的操作數(shù)dst可以是除立即數(shù)外的任何尋址方式。移位次數(shù)(或位數(shù))cnt=1時(shí),1可直接寫(xiě)在指令中;cnt>1時(shí),cnt必須放入CL寄存器。
           
           SHLdst,cnt ; 邏輯左移(shift logical left)

           SHRdst,cnt ; 邏輯右移(shift logical right)

           SALdst,cnt ; 算術(shù)左移(shift arithmetic left)

           SARdst,cnt ; 算術(shù)右移(shift arithmetic right)

            SHL和SAL指令向左移動(dòng)的操作是相同的,在每次逐位移動(dòng)后,最低位用0來(lái)補(bǔ)充,最高位移入CF。SHR與SHL移動(dòng)的方向相反,每次向右移動(dòng)后,最高位用0來(lái)補(bǔ)充,最低位移入CF。SAR在每次右移都用符號(hào)位的值補(bǔ)充最高位,最低位仍然是移入CF。

            由此可以看出,算術(shù)移位適于帶符號(hào)數(shù)的移位處理。我們知道,一個(gè)數(shù)左移n位相當(dāng)于乘以2n,右移n位相當(dāng)于除以2n, 所以,當(dāng)一個(gè)帶符號(hào)數(shù)需要乘(或除)2n時(shí),可使用算術(shù)移位指令SAL(或SAR)。當(dāng)一個(gè)無(wú)符號(hào)數(shù)需要乘(或除)2n時(shí),可使用邏輯移位指令SHL(或SHR)。使用移位指令將一個(gè)數(shù)擴(kuò)大或縮小2n倍,比使用乘法或除法指令的速度快。

            移位指令的條件碼設(shè)置:
            CF= 移入的數(shù)值
            OF=1 當(dāng)cnt=1時(shí),移動(dòng)后最高位的值發(fā)生變化
            OF=0 當(dāng)cnt=1時(shí),移動(dòng)后最高位的值未發(fā)生變化
            SF、ZF、PF根據(jù)移動(dòng)后的結(jié)果設(shè)置

           ROL dst,cnt ; 循環(huán)左移(rotate left)

           ROR dst,cnt ; 循環(huán)右移(rotate right)
           
           RCL dst,cnt ; 帶進(jìn)位循環(huán)左移(rotate left through carry) 

           RCR dst,cnt ; 帶進(jìn)位循環(huán)右移(rotate right through carry)

            這組指令完成位循環(huán)移位的操作,ROL和ROR是簡(jiǎn)單的位循環(huán)指令,RCL和RCR是連同CF位一起循環(huán)移位的指令。它們左右移動(dòng)的方法以及移位次數(shù)的設(shè)置與移位指令類似。

            循環(huán)移位指令執(zhí)行后,CF和OF的設(shè)置方法與移位指令相同;SF、ZF和PF標(biāo)志位不受影響。

          例寫(xiě)DATA1除以8的程序,假設(shè):⑴DATA1為無(wú)符號(hào)數(shù)⑵DATA1為帶符號(hào)數(shù)。

                DATA1  DB   9AH
                TIMES  EQU   3

                ; ⑴ DATA1 is unsigned operand
                   MOV   CL,TIMES   ; set number of times to shift
                   SHR    DATA1,CL   ; DATA1 will be 13H, CF=0
                   
                 ; ⑵ DATA1 is signed operand
                   MOV    CL,TIMES   ; set number of times to shift
                   SAR    DATA1, CL   ; DATA1 will be 0F3H, CF=0

          例編寫(xiě)統(tǒng)計(jì)DATAW字?jǐn)?shù)據(jù)中1的個(gè)數(shù)COUNT的程序,要求COUNT是BCD碼。
            
                DATAW  DW   97F4H
                COUNT  DB  ?。?br />      …    …
                 XOR   AL,AL   ; clear AL to keep the number of 1s in BCD
                 MOV   DL,16   ; rotate total of 16 times
                 MOV   BX,DATAW ; move the operand to BX
              AGAIN: ROL   BX,1    ; rotate it once
                 JNC   NEXT   ; check for 1, if CF=0 then jump
                 ADD   AL,1   ; if CF=1 then add one to count
                 DAA        ; adjust the count for BCD
              NEXT: DEC   DL     ; go through this 16 times
                  JNC   AGAIN   ; if not finished go back
                 MOV   COUNT,AL ; save the number of 1s in COUNT


          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();