Asembler - dodawanie 2 liczb 128 bitowych

0

Dodać 2 liczby 128 bitowe, 1 liczba w komórkach pamięci od 0000, 2 liczba od 0010, a wynik ma być zapisany w komórkach od 0020.
Proszę o rozwiązanie tego. Wiem raczej o co chodzi, ale mam problem z adresowaniem pamięci i mylą mi się bardziej znaczące z mniej znaczącymi bitami, przez co nie wiem dokładnie gdzie mam wyniki umieszczać. [???]
A i jeszcze jedno; przydałby się obszerny komentarz do kodu :-/

0
        xor     bx, bx          ; zerowanie bx <i>/adres pierwszej liczby/</i> i CF /flage przeniesienia/
        mov     cx, 8           ; liczba powtorzen
  _petla:
        mov     ax, [bx]        ; 16bit czesc pierwszej liczby
        adc     ax, [bx+0x10]   ; + 16bit czesc drugiej + przeniesienie
        mov     [bx+0x20], ax   ; zachowanie wyniku
        inc     bx              ; zwiekszenie bx o 2, inc nie zmienia CF
        inc     bx
        loop    _petla

Liczby na x86 są zapisywane jako little-endian, najniższy bajt jako pierwszy, tutaj też będziemy się tego trzymać przy liczbach 128bit. Jako, że na 8086 /bo pod taki procesor pewnie ma to być napisane/ największym możliwym rozmiarem danych jest word - 16bit to będzie trzeba liczyć po kawałku. Aktualny kawałek = suma kawałków dwóch liczb + przeniesienie z poprzedniego dodawania. Użycie xor'a zamiast mov bx, 0 ma kilka plusów - instrukcja jest krótsza i, co ważniejsze, zeruje flagę przeniesienia. Liczby są ustawione ze stałym przesunięciem względem siebie więc wystarczy adresować względem aktualnego fragmentu pierwszej /rejestr bx/. Dwukrotna inkrementacja przesuwa wskaźnik na następną cześć liczb, inc w przeciwieństwie do add nie modyfikuje flagi przeniesienia - odpada nam zapamiętywanie stanu flag /loop też na nie nie wpływa/. Loop powoduje wykonanie kodu cx-razy, u nas 8 - 128/16.
I jeszcze jedno, '0x' to w cywilizowanych assemblerach prefiks liczby szesnastkowej, etykieta pętla jest zaś pod przesunięta względem początku kodu +5.

0

Dzięki za tak szybką odpowiedź. Ślę wyrazy uznania dla Ciebie. Widać znasz się na rzeczy. Teraz już rozumiem nareszcie tę kolejność. Pozdrawiam.

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