新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 8086指令系統---算術指令(一)

        8086指令系統---算術指令(一)

        作者: 時間:2016-11-27 來源:網絡 收藏
          算術指令包括加、減、乘、除指令,它包括對二進制數進行的算術運算的指令,以及對十進制數(用BCD碼表示)運算進行調整的指令。執行算術指令都會影響條件標志位,條件標志位包括CF、PF、AF、ZF、SF和OF,它們標志算術運算結果的特征。
         ⑴ 加法指令           ⑵ 減法指令
            ADD  加法              SUB  減法
            ADC  帶進位加            DEC  減1
            INC  加1               NEG  求補
                               CMP  比較
             

          ⑶ 乘法指令           ⑷ 除法指令
            MUL  無符號數乘法          DIV  無符號數除法
            IMUL 帶符號數乘法          IDIV 帶符號數除法

          
          ⑸ 符號擴展指令         ⑹ 十進制調整指令
            CBW  字節轉換為字          DAA  加法的十進制調整
            CWD  字轉換為雙字          DAS  減法的十進制調整
                               AAA  加法的ASCII調整
                                AAS  減法的ASCII調整      
                               AAM  乘法的ASCII調整
                               AAD  除法的ASCII調整
          1 加法指令

          ADD dst,src加法指令(addition)
          執行操作: (dst) ← (src)+(dst)

          ADC dst,src帶進位加指令(add with carry)
          執行操作: (dst) ← (src)+(dst)+CF

          INC opr加1指令(increment)
          執行操作: (opr) ← (opr)+1

          ADD和ADC指令是雙操作數指令,它們的兩個操作數不能同時為存儲器尋址方式,也就是說,除源操作數為立即數的情況外,源和目的操作數必須有一個是寄存器尋址方式。INC指令是單操作數指令,它可以使用除立即數方式外的任何尋址方式。

          ADD和ADC指令影響條件標志位(也稱條件碼),INC指令影響除CF外的其它條件碼。條件碼中最主要的是SF、ZF、CF和OF,加法運算對這四個條件碼的設置方法如下:
          SF=1 加法結果為負數(符號位為1)
          SF=0 加法結果為正數(符號位為0)
          ZF=1 加法結果為零
          ZF=0 加法結果不為零
          CF=1 最高有效位向高位有進位
          CF=0 最高有效位向高位無進位
          OF=1 兩個同符號數相加(正數+正數,或負數加負數),結果符號與其相反
          OF=0 不同符號數相加時,或同符號數相加,結果符號與其相同

          計算機在執行運算時,并不區別操作數是帶符號數還是無符號數,一律按上述規則設置條件碼,因此,程序員要清楚當時處理的是什么類型的數據。例如,當加法運算結果的最高有效位為1時,機器將SF置1。如果參加運算的是兩個帶符號數,那么和的最高有效位是符號位,SF置1說明結果是一個負數。如果參加運算的是兩個無符號數,那么和的最高有效位也是數值位,此時SF置0或置1都失去了表示正負數的意義。

          對帶符號數和無符號數,它們表示結果溢出的條件標志位也是不同的。上述OF位的設置條件顯然只符合帶符號數的溢出情況,OF=1表示運算結果是錯誤的。而無符號數溢出(運算結果超出了有限位的表示范圍)時,表現為最高有效位產生進位,因此,CF=1是無符號數溢出的標志。另外,在雙字長數運算時,低位字相加設置的CF,說明低位字向高位字有無進位的情況。

         例MOV  BX,9B8CH  ; (BX)=9B8CH
                 ADD  BX,6478H  ; now (BX)=0000H
                 9B8A     1001 1011 1000 1010
                + 6476     + 0110 0100 0111 0110
               -----------  --------------------------
               1← 0000    1← 0000 0000 0000 0000

          條件碼設置: SF=0  最高有效位(D15)為0
                 ZF=1  結果為0
                 CF=1  最高有效位向高位有進位
                 OF=0  不同符號數相加,不產生溢出

          例編寫執行雙精度數(DX,CX)和(BX,AX)相加的指令序列,DX是目的操作數的高位字,BX是源操作數的高位字。指令執行前:
              (DX,CX)= A248 2AC0H,(BX,AX)= 088A E25BH。

           指令序列:  ADD  CX, AX  ;(CX)= 0D1BH
                 ADC  DX, BX  ; now,(DX)=0AAD3H

           執行ADD指令:
                 2AC0     0010 1010 1100 0000
                + E25B    + 1110 0010 0101 1011
               ---------   ------------------------
               1← 0D1B   1← 0000 1101 0001 1011

          條件碼設置: SF=0  最高有效位(D15)為0,無符號位意義
                 F=0  結果不為0
                 CF=1  最高有效位向高位有進位
                 OF=0  加數最高位分別為0、1,溢出位置0,OF對低位字無溢出意義

          執行ADC指令:
                 A248     1010 0010 0100 1000
                 088A     0000 1000 1000 1011
                +   1     +          1←CF
               ----------  ----------------------------
                 AAD3     1010 1010 1101 0011

          條件碼設置: SF=1  最高有效位(D31)為1,對帶符號數運算表示結果為負
                 ZF=0  結果不為0
                 CF=0  最高有效位向高位無進位
                 OF=0  結果符號與操作數相同,未產生溢出

          2 減法指令

          SUB dst,src減法指令(subtract)
          執行操作: (dst) ← (dst)-(src)

          SBB dst,src帶借位減法指令(subtract with borrow)
          執行操作: (dst) ← (dst)-(src)-CF

          DEC opr減1指令(decrement)
          執行操作: (opr) ← (opr)-1

          CMP opr1,opr2比較指令(compare)
          執行操作: (opr1)-(opr2),根據相減結果設置條件碼,但不回送結果

          以上指令除DEC指令不影響CF外,其他都影響條件碼。與加法類似,SF和ZF分別表示減法結果的符號以及為零的情況;CF表明無符號數相減結果溢出與否;OF表明帶符號數相減結果溢出與否。但在對CF和OF位的設置方法上減法和加法有所不同,下面對此做進一步說明:
          CF=1   二進制減法運算中最高有效位向高位有借位(被減數<減數,不夠減的情況)
          CF=0   二進制減法運算中最高有效位向高位無借位(被減數≥減數,夠減的情況)
          OF=1   兩數符號相反(正數-負數,或負數-正數),而結果符號與減數相同
          OF=0   同符號數相減時,或不同符號數相減,其結果符號與減數不同

          NEG opr求補指令(negate)
          執行操作: (opr) ← -(opr),
                                
          求補操作即把操作數變為與其符號相反的數:。
          機器在執行求補指令時,把操作數各位求反后末位加1,因此執行的操作也可表示為:
          (opr) ← 0FFFFH-(opr)+1

          NEG指令的條件碼設置方法為:
           CF=1  不為0的操作數求補時
           CF=0  為0的操作數求補時
           OF=1  當求補運算的操作數為-128(字節)或-32768(字)時
           OF=0  當求補運算的操作數不為-128(字節)或-32768(字)時

        本文引用地址:http://www.104case.com/article/201611/322192.htm
         例字長為8位的兩數相減,其可表示數的范圍為:帶符號數 -128~127(80H~7FH),無符號數0~255(0~FFH)。運算結果超出可表示數范圍即為溢出,說明結果錯誤。
        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 林芝县| 甘肃省| 新蔡县| 克东县| 方正县| 囊谦县| 公安县| 乌恰县| 康保县| 宿迁市| 洪泽县| 莱州市| 磐安县| 威海市| 广德县| 二连浩特市| 永平县| 香格里拉县| 伊金霍洛旗| 明光市| 寿阳县| 石屏县| 沂源县| 饶河县| 忻州市| 平武县| 邹城市| 鹿泉市| 凤山县| 三河市| 太康县| 报价| 上高县| 兴义市| 湖州市| 上犹县| 文昌市| 德阳市| 韩城市| 昌都县| 庄浪县|