Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .text
- .global add_bignum
- .type add_bignum, @function
- add_bignum:
- /* pierwszy rdi drugi rsi trzeci rdx*/
- /*zapasowy zmienna z adresem poczatku rdx */
- mov %rdx,%r15
- /* pole n struktury a */
- mov (%rdi),%ebx
- /* poczatek tablicy a i r */
- add $4,%rdi
- add $4,%rdx
- /* licznik do petli */
- mov $0,%r10d
- .petla_1:
- /* petla ktora przepisuje elementy z tablicy a do tablicy r */
- /* Bierzemy 1 element tablicy i przypisujemy zmiennej r9b */
- movb (%rdi),%r9b
- /* Wkladamy zmienna r9b do pierwszego miejsca w tablicy r */
- movb %r9b,(%rdx)
- /* adres zwiekszami o 1 aby wskazywal na kolejne elementy tablicy */
- add $1,%rdi
- add $1,%rdx
- /* test do petli */
- cmp %r10d,%ebx
- je .faza_2
- /* inkrementacja */
- inc %r10d
- /* skos petli */
- jmp .petla_1
- .faza_2:
- /* przygotujemy zmienne do drugiej petli w ktorej bedziemy sumowali
- elementy tablicy b z tablica wynikowa */
- /* wielkosc tablicy b */
- mov (%rsi),%eax
- /* rdx znowu wskazuje na poczatek */
- mov %r15,%rdx
- /* ustawienie wskaznikow na tablice */
- add $4,%rdx
- add $4,%rsi
- /* licznik */
- mov $0,%r10
- /* zerowanie na wszelki wypadek */
- xor %r9,%r9
- xor %r11,%r11
- .petla_2:
- /* sumowanie tablic */
- /* bierzemy element tablicy wynikowej */
- mov (%rdx),%r11b
- /* dodajemy go ale juz na 8 bajtach do r9 */
- add %r11,%r9
- /* bierzemy element tablicy b */
- mov (%rsi),%r11b
- /* dodajemy go tez na 8 bajtach do tego samego r9 */
- add %r11,%r9
- /* 2 wynikowe bajty sumy dajemy do tablicy wynikowej */
- mov %r9b,(%rdx)
- /* wskazniki na dalsze elementy */
- add $1,%rdx
- add $1,%rsi
- /* sprawdzamy czy w r9 bylo przepelenienie jesli bylo to po przesuneciu
- o 8 bedziemy mieli 1, przez co w kolejnej iteracji bedziemy dzialali tak
- jak w dodawaniu pisemnym */
- shr $8,%r9
- /* inkrementacja,warunek i skok petli */
- inc %r10d
- cmp %r10d,%eax
- je .end
- jmp .petla_2
- .end:
- /* sprawdzamy czy na koncu nie bylo przepelnienia */
- and %r9,%r9
- jz .end_2
- /* jesli bylo to przypisujemy ostatniemu bajtowi r9 */
- mov %r9b,(%rdx)
- .end_2:
- ret
- .size add_bignum, . - add_bignum
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement