Assembler äëÿ íà÷èíàþùèõ

Ñëîæåíèå



Ñëîæåíèå


    Êîìàíäà 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 èçìåíÿëà ôëàãè,
    âûïîëíèòü ïðàâèëüíî âòîðîå ñëîæåíèå áûëî áû ãîðàçäî òðóäíåå.




Ñîäåðæàíèå ðàçäåëà