Asembler - Algorytm dodawania

0

Witam.
Chciałabym dowiedzieć się na jakiej zasadzie działa (konkretny) algorytm dodawania do siebie dwóch liczb całkowitych z przedziału [-32768...32767].
Oto on:
Sumuj32Bit MACRO s1, s2, sm ;dodawanie liczb 32bitowych s1 i s2, wynik umieszczany w sm
xor dh, dh
xor ah, ah
mov al, BYTE PTR s1
mov dl, BYTE PTR s2
add ax, dx
mov BYTE PTR sm, al
mov al, ah
xor ah, ah
mov dl, BYTE PTR s1 + 1
add ax, dx
mov dl, BYTE PTR s2 + 1
add ax, dx
mov BYTE PTR sm + 1, al
mov al, ah
xor ah, ah
mov dl, BYTE PTR s1 + 2
add ax, dx
mov dl, BYTE PTR s2 + 2
add ax, dx
mov BYTE PTR sm + 2, al
mov al, ah
xor ah, ah
mov dl, BYTE PTR s1 + 3
add ax, dx
mov dl, BYTE PTR s2 + 3
add ax, dx
mov BYTE PTR sm + 3, al
ENDM

2

To jest algo dodawania liczb 32-bitowych, a nie 16-bitowych. 16-bitowe można by spokojnie zaimplementować jedną instrukcją dodawania (plus ewentualnie dodatkowe jedno lub dwa mov), To co algorytm robi to zwykłe szkolne dodawanie. Najpierw dodaje najniższe 8-bitów. Najniższe 8-bitów z wyniku zapisuje do sumy. Następnie przechodzi do kolejnych 8-bitów, przy czym bierze pod uwagę bit przeniesienia z poprzedniego dodawania. Potem przechodzi do kolejnych 8-bitów i jeszcze raz dla ostatnich 8-bitów.

0

Rozumiem. :) Dziękuję za wyczerpującą odpowiedź.

1 użytkowników online, w tym zalogowanych: 0, gości: 1