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