Ýòà ïðîãðàììà ñêëàäûâàåò äâà äåñÿòè÷íûõ
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
Ðåôåðàòû, äèïëîìû, êóðñîâûå, âûïóñêíûå è êâàëèôèêàöèîííûå ðàáîòû, äèññåðòàöèè, ó÷åáíèêè, ó÷åáíûå ïîñîáèÿ, ëåêöèè, ìåòîäè÷åñêèå ïîñîáèÿ è ðåêîìåíäàöèè, ïðîãðàììû è êóðñû îáó÷åíèÿ, ïóáëèêàöèè èç ïðîôèëüíûõ èçäàíèé