Dodawanie i odejmowanie jest banalnie proste.
add eax, edx - dodaje to samo co eax := eax + edx
adc eax, edx - dodaje to samo co eax := eax + edx + przeniesienie z ostatniej operacji
mov edx, Zmienna - kopiuje zmienną do edx
mov Zmienna, eax - kopiuje zawartość eax do zmiennej
Przykład.
type TLiczba = array [0..3] of DWord;
var
L1, L2, L3: TLiczba;
begin
asm
mov eax, dword ptr L1[0]
mov edx, dword ptr L2[0]
add eax, edx
mov dword ptr L3[0], eax
mov eax, dword ptr L1[1]
mov edx, dword ptr L2[1]
adc eax, edx
mov dword ptr L3[1], eax
mov eax, dword ptr L1[2]
mov edx, dword ptr L2[2]
adc eax, edx
mov dword ptr L3[2], eax
mov eax, dword ptr L1[3]
mov edx, dword ptr L2[3]
adc eax, edx
mov dword ptr L3[3], eax
end;
end;
Proste? To oczywiście jest tak zapisane tylko po to, aby było widać prostotę całości. Należałoby to przepisać z nacznie elegancki sposób, tak, że niezależnie od długości liczby można byłoby je sumować.
Ale jeżeli nie chcesz bawić się w asm, to na www.torry.net jest moduł do operacji na liczbach nieskończonej długości integer_asm.pas.