Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .code32
- .data
- SYSEXIT = 1
- EXIT_SUCCESS = 0
- # deklaracja pierwszej 512-bitowej liczby
- liczba1:
- .long 0x10304008, 0x7011A0FF, 0x45100020, 0x03170030, 0x321012CB, 0x04520031, 0xF040500C, 0x32001235
- # zapisanie rozmiaru pierwszej liczby
- rozmiar_liczby_1 = . - liczba1
- # deklaracja drugiej 512-bitowej liczby
- liczba2:
- .long 0xF040500C, 0x00220022, 0x321012CB, 0x04520031, 0x7011A0FF, 0x45100020, 0x03170030, 0x00129922
- # zapisanie rozmiaru drugiej liczby
- rozmiar_liczby_2 = . - liczba2
- .text
- .globl _start
- _start:
- # "wrzucenie" rozmiaru liczby 1 do rejestru eax
- mov $rozmiar_liczby_1, %eax
- # "wrzucenie" liczby 4 do rejestru ebx
- mov $4, %ebx
- # podzielenie przez ebx (działa to tak, że rejestr eax dziele przez ebx) - wynik zapisany jest w eax, a reszta z dzielenia w edx
- div %ebx
- # "przerzucam" wynik z rejestru eax do rejestru esi
- mov %eax, %esi
- # wrzucenie rozmiaru liczby 2 do rejestru eax
- mov $rozmiar_liczby_2, %eax
- # wrzucenie liczby 4 do rejestru ebx
- mov $4, %ebx
- # podzielenie przez zawartość rejestru ebx
- div %ebx
- # przerzucenie wyniku dzielenia z rejestru eax do rejestru edi
- mov %eax, %edi
- # ustawienie flagi
- cmp %edi, %esi
- # jeżeli esi <= edi to skok do "licznik:"
- jle licznik
- # jeśli esi > edi to jeszcze bez skoku
- # przeniesienie zawartości rejestru edi do rejestru ecx ---> bo ecx jest używany do obsługi pętli
- mov %edi, %ecx
- # skok do etykiety "dodawanie_start"
- jmp dodawanie_start
- licznik:
- # przerzucenie zawartosci rejestru esi do rejestru ecx
- mov %esi ,%ecx
- dodawanie_start:
- # czyszczenie flagi cf
- clc
- dodawanie:
- # odejmuje od dwoch liczb poczatkowych 1 po to, żeby być "tak jakby" ustawionym przed tą liczbą
- sub $1, %esi
- sub $1, %edi
- # adresowanie indeksowe ---> biorę sobie 4 bajty licząc od końca liczby w rejestrze esi
- movl liczba1(, %esi, 4), %eax
- movl liczba2(, %edi, 4), %ebx
- # dodaję do zawartości rejestru eax zawartość rejestru ebx uwzględniając przeniesienie
- adcl %ebx, %eax
- # dodaje zawartość rejestru eax na stos
- pushl %eax
- # skok do etykiety "dodawanie"
- loop dodawanie
- # dodanie na stos flagi
- pushfl
- porownanie:
- cmp $0, %esi
- jne dodaj1
- cmp $0, %edi
- jne dodaj2
- jmp czy_przeniesienie
- dodaj1:
- sub $1, %esi
- popfl
- movl liczba1(, %esi, 4), %eax
- adcl $0, %eax
- pushl %eax
- pushfl
- jmp porownanie
- dodaj2:
- sub $1, %edi
- popfl
- movl liczba2(, %edi, 4), %eax
- adcl $0, %eax
- pushl %eax
- pushfl
- jmp porownanie
- czy_przeniesienie:
- popfl
- jc przeniesienie
- pushl $0
- jmp exit
- przeniesienie:
- pushl $1
- exit:
- mov $1, %eax
- mov $0, %ebx
- int $0x80
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement