<track id="bbf7f"></track>

      <pre id="bbf7f"><ruby id="bbf7f"></ruby></pre>

        本公司不接受任何形式的推銷,只接受電子郵件。
        西安西保特工電力自動化有限公司

        公司地址:陜西省西安市高新區高新路88號尚品國際6幢
        公司郵箱:xibaotegong@aliyun.com
        公司電話:029-88997932
        公司網址:www.www.jtcwg.com

        詳細信息

        您現在的位置:網站首頁 >> 常見問題 >> 產品知識 >> 詳細信息

        算術運算類指令分析

        發布時間:2018-07-18  瀏覽:1772次  字號:  

         算術運算指令共有24條,算術運算主要是執行加、減、乘、除法四則運算。另外MCS-51指令系統中有相當一部分是進行加、減1操作,BCD碼的運算和調整,我們都歸類為運算指令。雖然MCS-51單片機的算術邏輯單元ALU僅能對8位無符號整數進行運算,但利用進位標志C,則可進行多字節無符號整數的運算。同時利用溢出標志,還可以對帶符號數進行補碼運算。需要指出的是,除加、減1指令外,這類指令大多數都會對PSW(程序狀態字)有影響。這在使用中應特別注意。


        [1]. 
        加法指令(4條)
        4條指令的作用是把立即數,直接地址、工作寄存器及間接地址內容與累加器A的內容相加,運算結果存在A中。

        ADD  A,#data   ;A+#data→A) 累加器A中的內容與立即數#data相加,結果存在A
        ADD  A,data    ;A+dataA) 累加器A中的內容與直接地址單元中的內容相加,結果存在A
        ADD  A,Rn     ;A+RnA) 累加器A中的內容與工作寄存器Rn中的內容相加,結果存在A
        ADD  A,@Ri    ;A+((Ri))A) 累加器A中的內容與工作寄存器Ri所指向地址單元中的內容相加,結果存在A

        上述這四條指令的用途是:將A中的值與后面的值相加,最終結果存回到累加器A中。
        例:MOV  A,#30H
            ADD  A
        ,#10H
        則執行完本條指令后,A中的值就是40H
        下面的題目請大家自行練習
            MOV  34H,#10H
            MOV  R0,#13H
            MOV  A,34H
            ADD  A,R0
            MOV  R1,#34H
            ADD  A,@R1

        [2]. 
        帶進位加法指令(4條)
        4條指令除與[1]功能相同外,在進行加法運算時還需考慮進位問題。

        ADDC    A,data    ;A+data+CA) 累加器A中的內容與直接地址單元的內容連同進位位相加,結果存在A
        ADDC    A,#data   ;A+#data +CA) 累加器A中的內容與立即數連同進位位相加,結果存在A
        ADDC    A,Rn      ;A+Rn+CA) 累加器A中的內容與工作寄存器Rn中的內容、連同進位位相加,結果存在A
        ADDC    A,@Ri     ;A+((Ri))+CA) 累加器A中的內容與工作寄存器Ri指向地址單元中的內容、連同進位位相加,結果存在A

        用途:將A中的值和其后面的值相加,并且加上進位位C中的值。
        說明:由于51單片機是一種8位機,所以只能做8位的數學運算,但8位的運算范圍只有0-255,這在實際工作中是不夠的,因此就要進行擴展,一般是將28位的數學運算合起來,成為一個16位的運算,這樣,可以表達的數的范圍就可以到達0-65535。如何合并呢?其實很簡單,讓我們看一個十進制數的例子吧:
        66+78
        這兩個數相加,我們根本不在意這個過程,但事實上我們是這樣做的:先做6+8(低位),然后再做6+7,這是高位。做了兩次加法,只是我們做的時候并沒有刻意分成兩次加法來做罷了,或者說我們并沒有意識到我們做了兩次加法。之所以要分成兩次來做,是因為這兩個數超過了一位數所能表達的范圍(0-9)。
        在做低位時產生了進位,我們做的時候是在適當的位置點一下,然后在做高位加法時將這一點加進去。那么計算機中做16位加法時同樣如此,先做低8位的,如果兩數相加后產生了進位,也要點一下做個標記,這個標記就職進位位C,在程序狀態字PSW中。在進行高位加法是將這個C加進去。
        例如:1067H+10A0H,先做67H+A0H=107H,而107H顯然超過了0FFH,因此,最終保存在A中的數是7,而1則到了PSW中的CY位了,換言之,CY就相當于100H。然后再做10H+10H+CY,結果是21H,所以最終的結果是2107H。

        [3]. 
        帶借位減法指令(4條)
        這組指令包含立即數、直接地址、間接地址及工作寄存器與累加器A連同借位位C內容相減,結果送回累加器A中。
        這里我們對借位位C的狀態作出說明,在進行減法運算中,CY=1表示有借位,CY=0則無借位。OV=1聲明帶符號數相減時,從一個正數減去一個負數結果為負數,或者從一個負數中減去一個正數結果為正數的錯誤情況。在進行減法運算前,如果不知道借位標志位C的狀態,則應先對CY進行清零操作。


        SUBB  A,data      ;A-data - CA) 累加器A中的內容與直接地址單元中的內容、連同借位位相減,結果存在A
        SUBB  A,#data     ;A-#data -CA) 累加器A中的內容與立即數、連同借位位相減,結果存在A
        SUBB  A,Rn       ;A-Rn -CA) 累加器A中的內容與工作寄存器中的內容、連同借位位相減,結果存在A
        SUBB  A,@Ri      ;A-((Ri)) -CA) 累加器A中的內容與工作寄存器Ri指向的地址單元中的內容、連同借位位相減,結果存在A

        [4]. 
        乘法指令(1條)
        這個指令的作用是把累加器A和寄存器B中的8位無符號數相乘,所得到的是16位乘積,這個結果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,說明乘積大于0FFFFH65536),否則OV=0,但進位標志位CY總是等于0。

        MUL  AB       ;A×BA)和(B) 累加器A中的內容與寄存器B中的內容相乘,結果存在A、B

        例:(A=4EH,(B=5DH,執行指令
            MUL  AB
        后,乘積是1C56H,所以在B中放的是1CH,而A中放的則是56H。

        [5].  除法指令(1條)
        這個指令的作用是把累加器A8位無符號整數除以寄存器B中的8位無符號整數,所得到的商存在累加器A,而余數存在寄存器B中。除法運算總是使OV和進位標志位CY等于0。如果OV=1,表明寄存器B中的內容為00H,那么執行結果為不確定值,表示除法有溢出。

        DIV  AB       ;A÷BA)和(B) 累加器A中的內容除以寄存器B中的內容,所得到的商存在累加器A,而余數存在寄存器B中。


        例如:13/5,其商是2,余數是3。除了以后,商會放在A中,余數放在B中,CUOV都是0。如果在做除法前B中的值是00H,也就是除數為0,那么OV=1。

        [6]. 
        1指令(5條)
        5條指令的的功能均為原寄存器的內容加1,結果送回原寄存器。上述提到,加1指令不會對任何標志有影響,如果原寄存器的內容為FFH,執行加1后,結果就會是00H。這組指令共有直接、寄存器、寄存器減間址等尋址方式:

        INC  A          ;A+1→A) 累加器A中的內容加1,結果存在A
        INC  data       ;data+1→data) 直接地址單元中的內容加1,結果送回原地址單元中
        INC  @Ri       ;((Ri))+1→((Ri)) 寄存器的內容指向的地址單元中的內容加1,結果送回原地址單元中
        INC  Rn         ;Rn+1→Rn)寄存器Rn的內容加1,結果送回原地址單元中
        INC  DPTR      ;DPTR+1→DPTR)數據指針的內容加1,結果送回數據指針中

        用途很簡單,就是將后面目標中的值加1。
        例:(A=12H,(R0=33H,(21H=32H,(34H=22H,DPTR=1234H。執行下面的指令;
        INC  A  
        ;(A=13H
        INC  R0 
        ;(R0=34H
        INC  21H
        ;(21H=33H
        INC  @R0
        ;(34H=23H
        INC  DPTR
        ;(DPTR=1235H
        這些指令執行后的結果都附在了指令的后面。
        說明:從結果上看,INC  AADD A,#1差不多,但INC  A是單字節,單周期指令,而ADD  A,#1則是雙字節雙周期指令,而且INC  A不會影響PSW位,如(A=0FFH,INC  A后(A=00H,而CY依然保持不變。如果是ADD A,#1,則(A=00H,而CY一定是1。因此加1指令并不適合做加法運算,事實上它主要是用來做計數、地址增加等用途。另外,加法類指令都是以A為核心的,其中一個數必須放在A中,而運算結果也必須放在A中,而加1類指令的對象則廣泛得多,可以是寄存器、內存地址、間址尋址的地址等等。

        INC  data這條指令中,如果直接地址是I/O,其功能是先讀入I/O鎖存器的內容,然后在CPU進行加1操作,再輸出到I/O上,這就是修改操作。

        [7]. 
        1指令(4條)
        這組指令的作用是把所指的寄存器內容減1,結果送回原寄存器,若原寄存器的內容為00H,減1后即為FFH,運算結果不影響任何標志位,這組指令共有直接、寄存器、寄存器間址等尋址方式,當直接地址是I/O口鎖存器時,修改操作與加1指令類似。

        DEC  A         ;A-1→A)累加器A中的內容減1,結果送回累加器A
        DEC  data      ;data-1→data)直接地址單元中的內容減1,結果送回直接地址單元中
        DEC  @Ri      ;((Ri))-1→((Ri))寄存器Ri指向的地址單元中的內容減1,結果送回原地址單元中

        DEC  Rn      ;Rn-1→Rn)寄存器Rn中的內容減1,結果送回寄存器Rn

        [8]. 
        十進制調整指令(1條)
        在進行BCD碼運算時,這條指令總是跟在ADDADDC指令之后,其功能是將執行加法運算后存于累加器A中的結果進行調整和修正。

        DA      A

        綜合練習:
           MOV   A,#12H
           MOV   R0,#24H
           MOV   21H,#56H
           ADD   A,#12H
           MOV   DPTR,#1234H
           ADD   A,DPH
           ADD   A,R0
           CLR   C
           SUBB  A,DPL
           SUBB  A,#25H
           INC   A
           SETB  C
           ADDC  A,21H
           INC   R0
           SUBB  A,R0
           MOV   24H,#16H
           CLR   C
           ADD   A,@R0
        先寫出每步運行結果,然后將以上題目鍵入,并在軟件仿真中運行,觀察寄存器及有關單元的內容的變化?唇Y果是否與預想的結果相同?

         

        本公司不接受任何形式的推銷,只接受電子郵件。
        陜公網安備ICP15014344© 2021
        地址:陜西省西安市高新區高新路88號尚品國際6幢 郵箱:xibaotegong@aliyun.com
          西安西保特工電力自動化有限公司 版權所有 

         

        中国国产区91最新更新,国产系列丝袜熟女精品网站,国产在线不卡精品网站,97se国产在线,亚洲精品国产自在现线,亚洲欧美成 人 在线播放,欧美偷窥清纯综合图区