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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 8086指令系統(tǒng)---算術(shù)指令(二)

          8086指令系統(tǒng)---算術(shù)指令(二)

          作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏


            注意:如果是兩個ASCII碼數(shù)相乘,要先將它們轉(zhuǎn)換成非壓縮BCD碼。

            AAD的調(diào)整方法為:
            執(zhí)行除法指令之前,對AX中的非壓縮BCD碼(被除數(shù))執(zhí)行:
             (AL)←(AH)×10+(AL)
            ?。ˋH)← 0

            與其它調(diào)整指令不同的是,AAD用在DIV指令之前,即先將AX中的被除數(shù)調(diào)整成二進制數(shù),并存放在AL中,再用DIV指令作二進制數(shù)的除法。AX中的被除數(shù)是二位非壓縮BCD碼,AH中的十位數(shù)乘10,再加上AL中的個位數(shù),即轉(zhuǎn)換為二進制數(shù)。

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

                       表3.3 ASCII和BCD碼

          十進制數(shù)字
          ASCII碼
          壓縮BCD碼
          非壓縮BCD碼
          0
          0011 0000
          0000
          0000 0000
          1
          0011 0001
          0001
          0000 0001
          2
          0011 0010
          0010
          0000 0010
          3
          0011 0011
          0011
          0000 0011
          4
          0011 0100
          0100
          0000 0100
          5
          0011 0101
          0101
          0000 0101
          6
          0011 0110
          0110
          0000 0110
          7
          0011 0111
          0111
          0000 0111
          8
          0011 1000
          1000
          0000 1000
          9
          0011 1001
          1001
          0000 1001

           例ASCII碼轉(zhuǎn)換為BCD碼。
               
              ASC   DB 9562481273 ; ASCII string
                  ORG   0010H
                  UNPACK DB  10 DUP(?) ; store BCD number
              …    …
              MOV   CX,10   ; load the counter
              SUB   BX,BX   ; clear BX
          AGAIN: MOV   AL,ASC[BX]; move to AL content of mem [BX+ASC]
              AND   AL,0FH   ; mask the upper nibble
              MOV   UNPACK[BX],AL  ; move to mem [BX+UNPACK] the AL
              NC    BX     ; make the pointer to point at next ASCII number
              LOOP   AGAIN   ; loop until finished

            上例中的AND指令完成邏輯與操作,AL寄存器的內(nèi)容和0FH相與,結(jié)果使ASCII碼的高4位清零,低4位保持不變,于是一個ASCII碼數(shù)就轉(zhuǎn)換成了BCD碼。


           例編寫程序,實現(xiàn)BCD數(shù)據(jù)的加法和減法。

              ① BCD3←BCD1+BCD2  ; BCD3=2784+1839=4623
               ② BCD3←BCD1-BCD2  ; BCD3=2784-1839=0945

              編寫程序如下:
               DATA SEGEMENT
               BCD1 DB 84H,27H ; BCD format of 2784
               BCD2 DB 39H,18H ; BCD format of 1839
               BCD3 DB 2 DUP(?)
               DATA ENDS

             ?、?MOV  AL,BCD1   ; AL←84H
                ADD  AL,BCD2   ; AL←84H+39H=0BDH (B>9,D>9)
                DAA        ; AL←0BDH+06+60H=23H, AF=1,CF=1
                MOV  BCD3,AL   ; BCD3←23H
                MOV  AL,BCD1+1  ; AL←27H
                ADC  AL,BCD2+1  ; AL←27H+18H+1=40H, AF=1,CF=0
                DAA        ; AL←40H+06=46H, because AF=1
                MOV  BCD3+1,AL  ; BCD3+1←46H

              ② MOV  AL,BCD1   ; AL←84H
                SUB  AL,BCD2   ; AL←84H-39H=4BH (4≯9,B>9)
                DAS        ; AL←4BH-06=45H, AF=1, CF=0
                MOV  BCD3,AL   ; BCD3←45H
                MOV  AL,BCD1+1  ; AL←27H
                SBB  AL,BCD2+1  ; AL←27H-18H=0FH
                DAS        ; AL←0FH-06=09H, because F>9
                MOV  BCD3+1,AL  ; BCD3+1←09H

             使用DAA和DAS指令,注意:
             ·被調(diào)整的數(shù)必須在AL寄存器中;
             ·影響除OF外的其它條件碼標(biāo)志;
             ·DAA必須緊接在加指令之后,DAS必須緊接在減指令之后。

            例兩個ASCII碼數(shù)5和2相加,要求結(jié)果也為ASCII碼。
               
               MOV  AL,5    ; AL←35H
               ADD  AL,2    ; AL←35H+32H=67H, AF=0
               AAA         ; changes 67H to 07H,
               OR   AL,30     ; OR AL with 30H to get ASCII

           例編寫15和7的非壓縮BCD碼的減法程序,要求結(jié)果也為非壓縮BCD碼。

               MOV  AX,0105H   ; unpacked BCD for 15
               MOV  CL,07
               SUB  AL,CL     ; (AL)←05-07 =-2 (FEH)
               AAS         ; adjusted: 0FE-06=0F8→08→(AL),
                         ; 01-1=00→(AH), leaving (AX)=0008

           例兩個ASCII碼數(shù)7和8相乘,要求結(jié)果也為ASCII碼。

               MOV  AL,7    ; (AL)=37H
               AND  AL,0FH    ; (AL)=07 unpacked BCD
               MOV  DL,6    ; (DL)=36H
               AND  DL,0FH    ; (DL)=06 unpacked BCD
               MUL  DL      ; (AX)=07×06=002AH=42
               AAM         ; (AX)=0402 (7×6=42 unpacked BCD)
               OR   AX,3030H   ; (AX)=3432 result in ASCII

           例編寫ASCII碼數(shù)的除法程序。

               MOV  AX,3539H   ; (AX)=3539, ASCII for 59
               AND  AX,0F0FH   ; (AH)=05,(AL)=09,unpacked BCD data
               AAD         ; (AX)=003BH=59
               MOV  BH,08H    ; divide by 08
               DIV  BH      ; 3BH/8 gives (AL)=07,(AH)=03
               OR   AX,3030H   ; (AL)=37H (quotient), (AH)=33H (remainder)


          上一頁 1 2 下一頁

          評論


          技術(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); })();