Àðèôìåòè÷åñêèå êîìàíäû

      Àðèôìåòè÷åñêèå êîìàíäû ëþáîãî ìèêðîïðîöåññîðà ïðèâëåêàþò ê ñåáå

    íàèáîëüøåå âíèìàíèå. Êàæäûé çàèíòåðåñîâàí â âûïîëíåíèè

    àðèôìåòè÷åñêèõ âû÷èñëåíèé, è èìåííî ýòè êîìàíäû ïðîäåëûâàþò òàêóþ

    ðàáîòó. Õîòÿ èõ íåìíîãî, îíè âûïîëíÿþò áîëüøèíñòâî ïðåîáðàçîâàíèé

    äàííûõ à ìèêðîïðîöåññîðå.  ðåàëüíûõ æå óñëîâèÿõ àðèôìåòè÷åñêèå

    êîìàíäû çàíèìàþò ëèøü ìàëóþ ÷àñòü âñåõ èñïîëíÿåìûõ êîìàíä.

 

      Êîìàíäû ïåðåñûëêè èñïîëüçóþò áîëüøèíñòâî ïðèíöèïîâ ðàáîòû

    êîìàíä ìèêðîïðîöåññîðà 8088, à ïðè èçó÷åíèè àðèôìåòè÷åñêèõ êîìàíä

    íåîáõîäèìî ðàññìîòðåòü íåêîòîðûå òîíêîñòè èõ âûïîëíåíèÿ.

Ñëîæåíèå

    Êîìàíäà ADD âûïîëíÿåò ñëîæåíèå óêàçàííûõ îïåðàíäîâ, ïðåäñòàâëåííûõ

    â äâîè÷íîì äîïîëíèòåëüíîì êîäå.  Ìèêðîïðîöåññîð ïîìåùàåò ðåçóëüòàò

    íà ìåñòî ïåðâîãî îïåðàíäà ïîñëå òîãî, êàê ñëîæèò îáà îïåðàíäà.

    Âòîðîé îïåðàíä íå èçìåíÿåòñÿ.  Êîìàíäà êîððåêòèðóåò ðåãèñòð ôëàãîâ

    â ñîîòâåòñòâèè ñ ðåçóëüòàòîì ñëîæåíèÿ.  Íàïðèìåð, êîìàíäà

 

            ADD   AX,BX

 

    ñêëàäûâàåò ñîäåðæèìîå ðåãèñòðà BX ñ ñîäåðæèìûì ðåãèñòðà AX, è

    îñòàâëÿåò ðåçóëüòàò â ðåãèñòðå AX.    Ðåãèñòð ôëàãîâ ñîîáùàåò î òîì,

    áûë ëè ðåçóëüòàò íóëåâûì, îòðèöàòåëüíûì, èìåë ëè ÷åòíîñòü, ïåðåíîñ

    èëè ïåðåïîëíåíèå.

 

      Ôèã. 4.8 êðàòêî èëëþñòðèðóåò âàðèàíòû êîìàíäû ADD.

    Ñóùåñòâóþò äâå ôîðìû ñëîæåíèÿ, 8=áèòîâîå è 16=áèòîâîå.  ðàçëè÷íûõ

    ôîðìàõ ñëîæåíèÿ ïðèíèìàþò ó÷àñòèå ðàçëè÷íûå ðåãèñòðû. Àññåìáëåð

    ñëåäèò çà òåì, ÷òîáû îïåðàíäû ñîîòâåòñòâîâàëè äðóã äðóãó.

    Ñîäåðæèìîå áàéòîâîãî ðåãèñòðà (íàïðèìåð, CH) íå ìîæåò áûòü

    ïðèáàâëåíî ê ÿ÷åéêå ïàìÿòè, êîòîðàÿ íå èìååò òèï BYTE. Åñëè ÿ÷åéêà

    ïàìÿòè ÿâëÿåòñÿ îäíèì èç îïåðàíäîâ, îíà ìîæåò áûòü ëèáî

    îïåðàíäîì=ðåçóëüòàòîì, ëèáî íåèçìåíÿåìûì îïåðàíäîì. Òåì ñàìûì

    êîìàíäà ìîæåò ïðèáàâèòü ñîäåðæèìîå ðåãèñòðà ê ÿ÷åéêå ïàìÿòè è

    âîçâðàòèòü ðåçóëüòàò â ïàìÿòü. Îäíèì èç îïåðàíäîâ ìîæåò òàêæå áûòü

    íåïîñðåäñòâåííîå çíà÷åíèå. Íà Ôèã. 4.9 ïîêàçàí ëèñòèíã àññåìáëåðà ñ

    íàêîòîðûìè àðèôìåòè÷åñêèìè êîìàíäàìè.

 

      Êîìàíäà ñëîæåíèÿ ñ ïåðåíîñîì ADC - ýòî òà æå êîìàíäà ADD, çà

    èñêëþ÷åíèåì òîãî, ÷òî â ñóììó âêëþ÷àåòñÿ ôëàã ïåðåíîñà. Äëÿ ëþáîé

    ôîðìû êîìàíäû ADD ñóùåñòâóåò ñðàâíèìàÿ ñ íåé êîìàíäà ADC.

     ÚÄÄÄÄÄÄÄÄ¿     ÚÄÄÄÄÄÄÄÄ¿               ÚÄÄÄÄÄÄÄÄ¿

     ³      AX   ³     ³     AX   ³               ³   AX   ³

     ³      BX   ³     ³     BX   ³               ³   BX   ³

     ³      CX   ³     ³     CX   ³      ÄÄÄÄÄÄÄ>   ³   CX   ³

     ³      DX   ³     ³     DX   ³               ³   DX   ³

     ÀÄÄÄÄÄÄÄÄÙ     ÀÄÄÄÄÄÄÄÄÙ               ÀÄÄÄÄÄÄÄÄÙ

     ÚÄÄÄÄÄÄÄÄ¿  +  ÚÄÄÄÄÄÄÄÄ¿               ÚÄÄÄÄÄÄÄÄ¿

     ³      SI   ³     ³     SI   ³               ³   SI   ³

     ³      DI   ³     ³     DI   ³               ³   DI   ³

     ³      BP   ³     ³     BP   ³      ÄÄÄÄÄÄÄ>   ³   BP   ³

     ³      SP   ³     ³     SP   ³               ³   SP   ³

     ÀÄÄÄÄÄÄÄÄÙ     ÀÄÄÄÄÄÄÄÄÙ               ÀÄÄÄÄÄÄÄÄÙ

                ÚÄÄÄÄÄÄÄÄ¿

                ³ Ïàìÿòü ³

                ³(ñëîâà) ³

                ÀÄÄÄÄÄÄÄÄÙ

                ÚÄÄÄÄÄÄÄÄÄ¿

                ³Íåïîñðåä-³

                ³ñòâåííûé ³

                ÀÄÄÄÄÄÄÄÄÄÙ

 

     ÚÄÄÄÄÄÄÄÄÄ¿    ÚÄÄÄÄÄÄÄÄÄ¿        ÚÄÄÄÄÄÄÄÄÄ¿

     ³      AH    ³    ³     AH    ³        ³   AH    ³

     ³      AL    ³    ³     AL    ³        ³   AL    ³

     ³      BH    ³    ³     BH    ³        ³   BH    ³

     ³      BL    ³    ³     BL    ³        ³   BL    ³

     ³      CH    ³    ³     CH    ³        ³   CH    ³

     ³      CL    ³  + ³     CL    ³        ³   CL    ³

     ³      DH    ³    ³     DH    ³        ³   DH    ³

     ³      DL    ³    ³     DL    ³        ³   DL    ³

     ÀÄÄÄÄÄÄÄÄÄÙ    ÀÄÄÄÄÄÄÄÄÄÙ        ÀÄÄÄÄÄÄÄÄÄÙ

                ÚÄÄÄÄÄÄÄÄÄ¿      ÚÄÄÄÄÄÄÄÄÄ¿

                ³ Ïàìÿòü  ³  ÄÄÄÄÄÄÄ>  ³ Ïàìÿòü  ³

                ³(ñëîâà)  ³      ³(ñëîâà)  ³

                ÀÄÄÄÄÄÄÄÄÄÙ      ÀÄÄÄÄÄÄÄÄÄÙ

                ÚÄÄÄÄÄÄÄÄÄ¿

                ³Íåïîñðåä-³

                ³ñòâåííûé ³

                ÀÄÄÄÄÄÄÄÄÄÙ

 

                 Ôèã. 4.8 Îïåðàöèè ñëîæåíèÿ

 

      Îáå êîìàíäû ñëîæåíèÿ, êàê ADD, òàê è ADC, óñòàíàâëèâàþò ðàâíûì

    1 ôëàã ïåðåíîñà, åñëè ïðîèçîøåë ïåðåíîñ èç ñòàðøåãî ðàçðÿäà

    ðåçóëüòàòà. Êîìàíäà ADD ñêëàäûâàåò äâà îïåðàíäà, íå îáðàùàÿ

    âíèìàíèÿ íà ôëàã ïåðåíîñà, à êîìàíäà ADC ó÷èòûâàåò è ôëàã ïåðåíîñà.

    Åñëè ôëàã ïåðåíîñà ðàâåí 0, ðåçóëüòàò ðàâåí ðåçóëüòàòó âûïîëíåíèÿ

    êîìàíäû ADD. Åñëè æå ôëàã ïåðåíîñà ðàâåí 1, òî ðåçóëüòàò íà 1

    áîëüøå ðåçóëüòàòà êîìàíäû ADD. Òàêèì îáðàçîì, ïðîãðàììà ìîæåò

    èñïîëüçîâàòü ôëàã ïåðåíîñà äëÿ îïåðàöèé ïîâûøåííîé òî÷íîñòè.

           Microsoft (R) Macro Assembler Version 5.00              1/1/80 04:00:49

           Ôèã. 4.9  Àðèôìåòè÷åñêèå êîìàíäû                       Page   1-1

 

 

                                         PAGE    ,132

                                         TITLE   Ôèã. 4.9  Àðèôìåòè÷åñêèå êîìàíäû

            0000                   CODE    SEGMENT

                                         ASSUME  CS:CODE,DS:CODE

            0000                   EXBYTE  LABEL   BYTE

            0000                   EXWORD  LABEL   WORD

 

            0000  03 1E 0000 R                 ADD     BX,EXWORD       ; BX <- BX + [EXWORD]

            0004  29 0E 0000 R                 SUB     EXWORD,CX       ; [EXWORD] <- [EXWORD] - CX

            0008  12 3E 0000 R                 ADC     BH,EXBYTE       ; BH <- BH + [EXBYTE] + Carry

            000C  18 0E 0000 R                 SBB     EXBYTE,CL       ; [EXBYTE] <- [EXBYTE] - CL - Carry

            0010  F7 1E 0000 R                 NEG     EXWORD          ; [EXWORD] <- -[EXWORD]

            0014  FE 06 0000 R                 INC     EXBYTE          ; [EXBYTE] <- [EXBYTE] + 1

            0018  4E                           DEC     SI        ; SI <- SI - 1

 

            0019  81 C7 00C8                   ADD     DI,200          ; DI <- DI + 200

            001D  83 EC 64                     SUB     SP,100          ; SP <- SP - 100

            0020  83 D1 0A                     ADC     CX,10           ; CX <- CX + 10 + Carry

            0023  83 1E 0000 R 14              SBB     EXWORD,20       ; [EXWORD] <- [EXWORD] - 20 - Carry

 

            0028  3B C3                  CMP     AX,BX           ; Óñòàíîâêà ôëàãîâ ïî AX - BX

            002A  81 FE 01F4                   CMP     SI,500          ; Óñòàíîâêà ôëàãîâ ïî SI - 500

 

            002E  F6 26 0000 R                 MUL     EXBYTE          ; AX <- AL * [EXBYTE]

            0032  F7 EB                  IMUL    BX        ; DX:AX <- AX * BX

            0034  F7 36 0000 R                 DIV     EXWORD          ; AX <- DX:AX / [EXWORD]

            0038  F6 FD                  IDIV    CH        ; AL <- AX / CH

 

            003A  27                           DAA               ; Äåñÿòè÷íîå êîððåêöèÿ äëÿ ñëîæåíèÿ

            003B  2F                           DAS               ; Äåñÿòè÷íîå êîððåêöèÿ äëÿ âû÷èòàíèÿ

            003C  37                           AAA               ; ASCII êîððåêöèÿ äëÿ ñëîæåíèÿ

            003D  3F                           AAS               ; ASCII êîððåêöèÿ äëÿ âû÷èòàíèÿ

            003E  D4 0A                  AAM               ; ASCII êîððåêöèÿ äëÿ óìíîæåíèÿ

            0040  D5 0A                  AAD               ; ASCII êîððåêöèÿ äëÿ äåëåíèÿ

            0042  98                           CBW               ; AX <- ðàñøèðåííîå ïî çíàêó AL

            0043  99                           CWD               ; DX:AX <- ðàñøèðåííîå ïî çíàêó AX

 

            0044                   CODE    ENDS

                                         END

 

            Ôèã. 4.9 Àðèôìåòè÷åñêèå êîìàíäû

            Microsoft (R) Macro Assembler Version 5.00              1/1/80 04:00:54

            Ôèã. 4.10 Ïðèìåð âû÷èñëåíèé ñ ïîâûøåííîé òî÷íîñòüþ      Page         1-1

 

 

                                          PAGE    ,132

                                          TITLE   Ôèã. 4.10 Ïðèìåð âû÷èñëåíèé ñ ïîâûøåííîé òî÷íîñòüþ

             0000                   CODE    SEGMENT

                                          ASSUME  CS:CODE,DS:CODE

 

             0000  ????????               VALUE1  DD      ?             ; Îáëàñòü äàííûõ ðàçìåðîì 32 ðàçðÿäà

             0004  ????????               VALUE2  DD      ?

 

                                    ;-----  Ñëîæåíèå äâóõ 32-ðàçðÿäíûõ ÷èñåë

 

             0008  A1 0000 R                    MOV     AX,WORD PTR VALUE1

             000B  01 06 0004 R                 ADD     WORD PTR VALUE2,AX      ; Ñëîæåíèå ìëàäøèõ 16 ðàçðÿäîâ

             000F  A1 0002 R                    MOV     AX,WORD PTR VALUE1+2

             0012  11 06 0006 R                 ADC     WORD PTR VALUE2+2,AX    ; Ñëîæåíèå ñòàðøèõ 16 ðàçðÿäîâ

                                    ;-----  Âû÷èòàíèå äâóõ 32-ðàçðÿäíûõ ÷èñåë

 

             0016  A1 0000 R                    MOV     AX,WORD PTR VALUE1

             0019  29 06 0004 R                 SUB     WORD PTR VALUE2,AX      ; Âû÷èòàíèå ìëàäøåé ÷àñòè

             001D  A1 0002 R                    MOV     AX,WORD PTR VALUE1+2

             0020  19 06 0006 R                 SBB     WORD PTR VALUE2+2,AX    ; Âû÷èòàíèå ñòàðøåé ÷àñòè

 

             0024                   CODE    ENDS

                                          END

 

          Ôèã. 4.10 Ïðèìåð ñ ïîâûøåííîé òî÷íîñòüþ

 

    Ôèã. 4.10 èëëþñòðèðóåò ñëîæåíèå ïàðû 32=áèòîâûõ ÷èñåë; â

    ïðèìåðå ñêëàäûâàþòñÿ 32=áèòîâûå ÷èñëà ïîëÿ VALUE1 è ïîëÿ VALUE2, à

    ðåçóëüòàò ïîìåùàåòñÿ â ïîëå VALUE2. Çàìåòèì, ÷òî îäèí èç îïåðàíäîâ

    äîëæåí áûòü ïîìåùåí â ðåãèñòð. Â ïåðâîì ñëîæåíèè èñïîëüçóåñÿ

    êîìàíäà ADD, òàê êàê òåêóùåå çíà÷åíèå ôëàãà ïåðåíîñà íåñóùåñòâåííî

    äëÿ ïåðâîãî ñëîæåíèÿ. Ïîñëå ñîîòâåòñòâóþùåãî ðàçìåùåíèÿ îïåðàíäîâ

    ïðîãðàììà íà Ôèã. 4.10 âûïîëíÿåò âòîðîå ñëîæåíèå ñ ïîìîùüþ êîìàíäû

    ADC, ñ ó÷åòîì ôëàãà ïåðåíîñà, óñòàíîâëåííîãî ïðåäûäóùèì ñëîæåíèåì.

    Ýòî òàêæå õîðîøèé ïðèìåð ïîêàçûâàþùèé, ïî÷åìó êîìàíäà MOV íå

    óñòàíàâëèâàåò íèêàêèõ ôëàãîâ. Åñëè áû êîìàíäà MOV èçìåíÿëà ôëàãè,

    âûïîëíèòü ïðàâèëüíî âòîðîå ñëîæåíèå áûëî áû ãîðàçäî òðóäíåå.