Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .code32
- STDIN = 0
- STDOUT = 1
- SYSCALL = 0x80
- SYSEXIT = 1
- SYSWRITE = 4
- SYSREAD = 3
- EXIT_SUCCESS = 0
- .global _start
- .text
- result: .string "Otrzymany wynik %x%x%x%x%x%x%x%x \n"
- .data
- bufor: .space 16 #rezerwuję sobie więcej pamieci dla drugiej liczby
- liczba1: .long 0x22222222, 0x33333333
- liczba1_len = (. - liczba1)/4
- liczba2: .long 0x11111111, 0x11111111
- liczba2_len = (. - liczba1)/4
- _start:
- mov $liczba2_len, %edi
- dec %edi
- alignNumbers: #wyrównywanie długości liczb
- mov liczba2(,%edi,4), %eax #kopiuje fragment wartości 2 liczby do eax
- mov bufor(,%edi,4), %ebx #kopiuje zera do bufora
- adc %eax, %ebx #dodaje wartość
- mov %ebx, bufor(,%edi,4) #wynik dodawania przenosze do bufora
- cmp $0, %edi #sprawdzam czy przeiterowałem po całej liczbie
- jz process
- sub $1, %edi
- jmp alignNumbers
- process:
- xor %edi, %edi #zeruje rejestr
- mov $liczba1_len, %edi #przenosze dlugosc liczby1 do edi uzyskujac liczbe iteracji
- clc #zeruje przeniesienie
- pushf #push na stos
- algorithm: #algorytm dodawania
- clc #zeruje przeniseienie
- popf #pop stosu
- mov liczba1(,%edi,4), %eax #przeniesienie liczb do rejestrow
- mov bufor(,%edi,4), %ebx
- adc %eax, %ebx #dodaje wartosci w rejestrach do siebie
- push %ebx #wrzucam wynik na stos
- pushf #zapisuje flage przeniesienia
- cmp $0, %edi #sprawdzam czy jestesmy na koncu
- jz last #jesli tak to skaczemy do wyliczania przeniesien
- sub $1, %edi #jesli nie jestesmy na koncu to odejmujemy od licznika 1
- jmp algorithm #i wracamy na poczatek petli
- last:
- popf #sciagamy flage przeniesienia ze stosu
- xor %eax, %eax #czyscimy rejestry
- xor %ebx, %ebx
- adc %eax, %ebx #dodajemy z uwzglednieniem przeniesienia
- push %ebx #wrzucamy wynik na stos
- jmp end #przeskakujemy do zakonczenia
- end:
- pushl $result #dodajemy na stos format wyswietlania danych
- call printf
- exit:
- mov $SYSEXIT, %eax
- mov $EXIT_SUCCESS, %ebx
- int $SYSCALL
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement