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


              

Ýòà ïðîãðàììà ñêëàäûâàåò äâà äåñÿòè÷íûõ


            0000  0005[            NUMBER_ONE      DB      NUMBER_LENGTH DUP (?)
                   ??
                              ]
            0005  0005[            NUMBER_TWO      DB      NUMBER_LENGTH DUP (?)
                   ??
                              ]
                                   ;----------------------------------------
                                   ; Ýòà ïðîãðàììà ñêëàäûâàåò äâà äåñÿòè÷íûõ óïàêîâàííûõ
                                   ; ÷èñëà (NUMBER_ONE è NUMBER_TWO) è çàíîñèò ðåçóëüòàò
                                   ; â NUMBER_TWO.
                                   ;----------------------------------------
 
            000A                   START_ADD:
            000A  B9 0005                      MOV     CX, NUMBER_LENGTH           ; Îïðåäåëåíèå äëèíû ÷èñåë
 
                                   ;-----  Óñòàíîâêà èíäåêñíûõ ðåãèñòðîâ íà ìëàäøèé áàéò ñêëàäûâàåìûõ ÷èñåë
 
            000D  8D 36 0004 R                 LEA     SI, NUMBER_ONE + NUMBER_LENGTH - 1
            0011  8D 3E 0009 R                 LEA     DI, NUMBER_TWO + NUMBER_LENGTH - 1
 
            0015  F8                     CLC                           ; Íåò ìëàäøèõ ðàçðÿäîâ
 
            0016                   ADD_LOOP:
            0016  8A 04                  MOV     AL, [SI]        ; Âçÿòü áàéò èç ïåðâîãî ÷èñëà
            0018  12 05                  ADC     AL, [DI]        ; Äîáàâèòü èç âòîðîãî ñ ó÷åòîì ïåðåíîñà
            001A  27                           DAA               ; Êîððåêöèÿ äî óïàêîâàííîãî ôîðìàòà
            001B  88 05                  MOV     [DI], AL        ; Çàíåñåíèå áàéòà ðåçóëüòàòà
            001D  9C                           PUSHF             ; Ñîõðàíåíèå ôëàãà ïåðåíîñà (CF)
            001E  4E                           DEC     SI        ; Ñäâèã óêàçàòåëÿ ïåðâîãî ÷èñëà
            001F  4F                           DEC     DI        ; Ñäâèã óêàçàòåëÿ âòîðîãî ÷èñëà
            0020  9D                           POPF              ; Âîññòàíîâëåíèå ôëàãîâ
            0021  E2 F3                  LOOP    ADD_LOOP        ; Îáðàáîòêà ñëåäóþùåãî áàéòà
 
            0023                   CODE    ENDS
                                         END
 
            Ôèã. 4.31 Îïåðàöèè ñ BCD ïîâûøåííîé òî÷íîñòè
 
      Ïðîãðàììà ìîæåò óñòàíîâèòü èëè ñáðîñèòü ôëàã íàïðàâëåíèÿ ñ
    ïîìîùüþ êîìàíä STD è CLD. Êîìàíäà CLD ñáðàñûâàåò ôëàã íàïðàâëåíèÿ,
    ïðèâîäÿ ê òîìó, ÷òî ñòðîêîâûå êîìàíäû âåäóò îáðàáîòêó ïðè
    âîçðàñòàþùèõ àäðåñàõ ïàìÿòè. Êîìàíäà STD óñòàíàâëèâàåò ôëàã, â
    ðåçóëüòàòå ÷åãî ñòðîêîâûå êîìàíäû óìåíüøàþò àäðåñíûé óêàçàòåëü
    ïîñëå êàæäîãî âûïîëíåíèÿ.

Ñîäåðæàíèå  Íàçàä  Âïåðåä





Forekc.ru
Ðåôåðàòû, äèïëîìû, êóðñîâûå, âûïóñêíûå è êâàëèôèêàöèîííûå ðàáîòû, äèññåðòàöèè, ó÷åáíèêè, ó÷åáíûå ïîñîáèÿ, ëåêöèè, ìåòîäè÷åñêèå ïîñîáèÿ è ðåêîìåíäàöèè, ïðîãðàììû è êóðñû îáó÷åíèÿ, ïóáëèêàöèè èç ïðîôèëüíûõ èçäàíèé