日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

當(dāng)前位置:電子發(fā)燒友網(wǎng) > 圖書頻道 > 電子 > 《計(jì)算機(jī)組成原理與匯編語言》 > 第3章 指令系統(tǒng)與匯編語言設(shè)計(jì)

第3節(jié) 8088算術(shù)運(yùn)算指令

3.3.1 算術(shù)運(yùn)算指令

       8088可提供加、減、乘、除4種基本算術(shù)運(yùn)算的操作指令。這些指令可實(shí)現(xiàn)字節(jié)或字的運(yùn)算,也可以用于符號(hào)數(shù)和無符號(hào)數(shù)的運(yùn)算。
       
      8088還提供各種校正操作,故可以進(jìn)行十進(jìn)制的算術(shù)運(yùn)算。進(jìn)行加、減運(yùn)算的源操作數(shù)和目的操作數(shù)的關(guān)系如圖3.15所示。 

1.加法指令

       (1)ADDOPRD1,OPRD2
        
      這條指令完成兩個(gè)操作數(shù)相加,結(jié)果送至目的操作數(shù)OPRD1,即OPRD1←OPRD1+OPRD2目的操作數(shù)可以是累加器、任一通用寄存器或存貯器中的操作數(shù)。
        
      具體地說,該指令可以實(shí)現(xiàn)累加器與立即數(shù)、累加器與任一通用寄存器、累加器與存貯單元內(nèi)容相加,其和放回累加器中,
        
         例如:

            ADD AL,30
            ADD AX,3000H
            ADD AX,SI
            ADD AL,DATA 

 

     該指令也可以實(shí)現(xiàn)任一通用寄存器與立即數(shù)、累加器或別的寄存器、存貯單元的內(nèi)容相加,其和放回寄存器中,
          
             例如:

                ADD BX,3FFH
                ADD SI,AX
                ADD DI,CX
                ADD DX,DATA[BX+SI] 

      該指令還可以實(shí)現(xiàn)存貯器操作數(shù)與立即數(shù)、累加器或別的寄存器的內(nèi)容相加,其和放回存貯單元中,
          
             例如

                ADD BETA[SI],100
                ADD BETA[SI],AX
                ADD BETA[SI],DX

          這些指令執(zhí)行時(shí),對標(biāo)志位CF、OF、PF、SF、ZF和AF都會(huì)產(chǎn)生影響。

     (2) ADC指令

        這條指令與ADD指令基本相同,只是在對兩個(gè)操作數(shù)進(jìn)行相加運(yùn)算時(shí)還應(yīng)加上進(jìn)位位的當(dāng)前值,然后再將結(jié)果送至目的操作數(shù)。
             
       例如,兩個(gè)四字節(jié)數(shù)已分別放在首地址為FIRST和SECOND的內(nèi)存區(qū)中。每個(gè)數(shù)占4個(gè)存貯單元,存放時(shí)低字節(jié)在前,高字節(jié)在后。那么用如下ADD
         
            和ADC指令就可實(shí)現(xiàn)四字節(jié)數(shù)的相加,相加結(jié)果放入THIRD為首地址的單元中。 
   
                     MOV AX, FIRST
                     ADD AX, SECOND
                     MOV THIRD,AX
                     MOV AX, FIRST+2
                     ADC AX,SECOND+2
                     MOV THIRD+2,AX

               該指令對標(biāo)志位的影響與ADD指令對標(biāo)志位的影響相同。
 
     (3) INCOPRD指令

          這條指令對指定的操作數(shù)進(jìn)行加1操作,在循環(huán)程序中常用于修改地址指針和循環(huán)次數(shù)等。其操作數(shù)可以在通用寄存器中,也可以在內(nèi)存單元中。
             
         該指令執(zhí)行結(jié)果對標(biāo)志位AF、OF、PF、SF和ZF有影響,而對CF位不產(chǎn)生影響.
           
                   例如:
                   INC AL
                   INC[SI] ;

     2. 減法指令

                (1)SUBOPRD1,OPRD2

        該指令進(jìn)行兩個(gè)操作數(shù)的相減,即從OPRD1中減去OPRD2,其結(jié)果放于OPRD1中。具體地說,可以從累加器中減去立即數(shù);

        或從寄存器和內(nèi)存操作數(shù)中減去立即數(shù);或從寄存器操作數(shù)減去寄存器或內(nèi)存操作數(shù);或從寄存器或內(nèi)存操作數(shù)減去寄存器操作數(shù)等,

        其類型完全與ADD指令的相同,

                    例如:
                         SUB CX,BX
                         SUB [BP+2],CL

             (2) SBB指令

         該指令與SUB相類似,只不過在兩個(gè)操作數(shù)相減時(shí),還應(yīng)減去借位標(biāo)志CF的當(dāng)前值。與ADC一樣,這條指令主要用于多字節(jié)的減法運(yùn)算,在前面的四字節(jié)

        加法運(yùn)算的例子中,若用SUB代替ADD,用SBB代替ADC,那么就可以實(shí)現(xiàn)兩個(gè)四字節(jié)的減法運(yùn)算。該指令對標(biāo)志位AF、CF、OF、PF、SF和ZF都將產(chǎn)生影響。

                (3) DECOPRD指令

         該指令實(shí)現(xiàn)對操作數(shù)的減1操作,所用的操作數(shù)可以是寄存器的,也可以是內(nèi)存的。
               
        在相減時(shí),把操作數(shù)看作為無符號(hào)的二進(jìn)制數(shù)。該指令執(zhí)行結(jié)果將影響標(biāo)志位AF、OF、PF、SF和ZF,但對CF標(biāo)志不產(chǎn)生影響,

                      例如:
                           DEC BX
                           DEC [DI]

               (4) NEG OPRD

        該指令用來對操作數(shù)進(jìn)行求補(bǔ)操作,即用零減去操作數(shù),然后再將結(jié)果送回,

                     例如:
                          NEG AL
                          NEG MULRE

        該指令對字節(jié)操作時(shí),對-128求補(bǔ);對字操作時(shí),對-32768求補(bǔ),則操作數(shù)不變,但是此時(shí)溢出標(biāo)志OF將置位。

                (5) CMPOPRD1,OPRD2

        該指令為比較指令,完成OPRD1-OPRD2的操作,這一點(diǎn)與減法指令相同,而且相減結(jié)果也同樣反映在標(biāo)志位上。但是與減法指令SUB的主要不同點(diǎn)是相減后

         不回送結(jié)果,即執(zhí)行比較指令以后,兩個(gè)操作數(shù)的內(nèi)容是不變化的。
                     
        比較指令可以用于累加器與立即數(shù),累加器與任一通用寄存器或任一內(nèi)存操作數(shù)之間的比較。
                     
                        例如:
                             CMP AL,100
                             CMPAX,SI
                             CMPAX,DATA[BX]

         該指令也可以用于任一寄存器與立即數(shù)或別的寄存器及任一內(nèi)存操作數(shù)之間的比較,
                       
                       例如:
                             CMP BX,04FEH
                             CMP DX,DI
                             CMP CX,COUNT[BP] 

         該指令還可以用于內(nèi)存操作數(shù)與立即數(shù)及任一寄存器中操作數(shù)之間的比較,
                        
                       例如:
                             CMP DATA,100
                             CMP COUNT[SI],AX
                             CMP POINTER[DI],BX

         綜上所述,可以歸納出如下結(jié)論:

                      當(dāng)沒有溢出時(shí)(OF=0),若SF=0,則AX≥BX;若SF=1,則AX<BX。
                      當(dāng)產(chǎn)生溢出時(shí)(OF=1),若SF=0,則AX<BX;若SF=1,則AX≥BX。

                    用邏輯表達(dá)式又可簡化為:

                       若OFSF=0,則AX≥BX; ;
                       若OFSF=1,則AX<BX。

          例如,若自BLOCK開始的內(nèi)存緩沖區(qū)中,有100個(gè)帶符號(hào)的數(shù),希望找到其中最大的一個(gè)值,并將它放到MAX單元中。

          編制該程序的思路是這樣的:先把數(shù)據(jù)塊中的第一個(gè)數(shù)取到AX中,然后從第二個(gè)存貯單元開始,依次與AX中的內(nèi)容進(jìn)行比較。若AX中的值大,則接著比較;
 
         若AX中的值小,則把內(nèi)存單元中的內(nèi)容送到AX中。這樣經(jīng)過99次比較,在AX中必然存放著數(shù)據(jù)塊中最大的一個(gè)數(shù),然后利用傳送指令將它放到MAX單元中去。

           這是一個(gè)循環(huán)程序。循環(huán)程序開始應(yīng)置初值,包括循環(huán)次數(shù)為99次。在循環(huán)體中應(yīng)包括比較指令和轉(zhuǎn)移控制指令。 

                   滿足上述功能要求的程序是:

                      MOV  BX,OFFSET BLOCK
                      MOV  AX, 
                      INC  BX
                      INC  BX
                      MOV  CX,99
                      AGAIN: CMP AX,[BX]
                      JG   NEXT
                      MOV  AX,[BX]
                      NEXT:INC BX
                      INC  BX
                      DEC  CX
                      JNE  AGAIN
                      MOV   MAX,AX
                      HLT

       8088除了上述的算術(shù)運(yùn)算指令以外,還有幾條功能很強(qiáng)的乘、除法指令和校正指令。

        3. 乘法指令

                    (1)無符號(hào)數(shù)乘法指令MUL
       
                  該指令的一般格式為MUL OPRD ;OPRD為源操作數(shù)

             例:字節(jié)乘以字節(jié):
                  MOVAL,LSRC --BYTE;被乘數(shù)送AL
                  MULRSRC --BYTE;結(jié)果存于AX中
                  字乘以字
                  MOV AX,LSRC –WORD ;一個(gè)字送AX
                  MUL RSRC –WORD ;結(jié)果的高字節(jié)在DX中;低字節(jié)在AX中 
                字節(jié)乘以字:
                  MOVAL,MUL –BYTE ;字節(jié)被乘數(shù)送AL
                  CBW ;AL中字節(jié)轉(zhuǎn)換成AX中的字
                  MULRSRC --WORD ;

                    (2) 帶符號(hào)數(shù)乘法指令I(lǐng)MUL
                          
                     該指令的一般格式為IMULOPRD
             
              例:字節(jié)乘以字節(jié):
                 MOV AL,LSRC –BYTE ;被乘數(shù)送AL
                 IMUL RSRC --BYTE ;4. 除法指令

           8088有兩條除法指令:無符號(hào)除法指令和帶符號(hào)除法指令。

              (1)無符號(hào)數(shù)除法指令DIV

                 執(zhí)行該指令,如果結(jié)果大于寄存器可以保存的值時(shí),則產(chǎn)生0型中斷。

              例:字除以字節(jié):
                  MOV AX,NUMERATOR –WORD ;被除數(shù)送AX
                  DIV DIVISOR –BYTE ;商在AL中,余數(shù)在AH中
   
          字節(jié)除以字節(jié):

              MOVAL,NUMERATOR –BYTE ;被除數(shù)送AL
              CBW ;AL中的字節(jié)擴(kuò)展成AX中的字
              DIV DIVISOR --BYTE

          字除以字:

              MOV AX,NUMERATOR --WORD
              CWD ;把字轉(zhuǎn)換成雙字DX、AX
              DIVDIVISOR –WORD ;商在AX中,余數(shù)在DX中 

        (2) 帶符號(hào)除法指令I(lǐng)DIV

          該指令是帶符號(hào)的除法指令。除后,余數(shù)符號(hào)與被除數(shù)相同,其它同DIV指令。該指令一般格式為IDIVOPRD

             例:雙倍字長除以字:

                 MOVDX,NUM --HI –WORD ;被除數(shù)高位字送DX
                 MOVAX,NUM --LO –WORD ;被除數(shù)低位字送AX
                 IDIVDIVISOR --WORD[SI]

      5.校正指令

        8088的調(diào)整指令主要用于十進(jìn)制數(shù)的調(diào)整。
        AAA——對AL中ASCII未壓縮的十進(jìn)制和進(jìn)行調(diào)整;
        AAS——對AL中ASCII未壓縮的十進(jìn)制差進(jìn)行調(diào)整;
        AAD——在除法指令前對AX中ASCII未壓縮的十進(jìn)制數(shù)進(jìn)行調(diào)整;
        AAM——對AX中兩個(gè)ASCII未壓縮十進(jìn)制相乘結(jié)果進(jìn)行調(diào)整;
        DAA——對AL中的兩個(gè)壓縮十進(jìn)制數(shù)相加之和進(jìn)行調(diào)整,得到壓縮十進(jìn)制和;
        DAS——對AL中的兩個(gè)壓縮十進(jìn)制數(shù)相減之差進(jìn)行調(diào)整,得到壓縮十進(jìn)制差
 

 

?
烟台市| 崇礼县| 桐城市| 扶沟县| 嘉兴市| 抚顺市| 长沙市| 忻城县| 镇雄县| 盖州市| 安陆市| 界首市| 青浦区| 尼木县| 濉溪县| 湛江市| 库车县| 尚志市| 阿城市| 乐平市| 襄城县| 千阳县| 嘉峪关市| 八宿县| 吐鲁番市| 台东市| 青神县| 新昌县| 茌平县| SHOW| 延庆县| 广汉市| 宝清县| 边坝县| 称多县| 凤山县| 新乡市| 景东| 恭城| 剑阁县| 宜州市|