Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # 64 bity - 1 jesli liczba sie powtorzyla, 0 jesli nie
- # najwieksza liczba powtorzen
- # rdi rsi rdx rcx
- .text
- .type check_tab, @function
- .global check_tab
- check_tab:
- push %rdi
- push %rsi
- xor %r8, %r8 # zmienna liczaca ilosc powtorzen
- mov $0, %r8
- xor %r9, %r9 # zmienna przechowujaca najwieksza liczbe powtorzen
- mov $0, %r9
- xor %r10, %r10 # zmienna trzymajaca wynik
- xor %r11, %r11 # aktualna liczba (takze licznik petli)
- mov $63, %r11
- begin:
- cmp %r11, (%rdi) # porownaj aktualna liczbe z aktualnie wskazywana pozycja w tablicy
- jne badNumber # jesli to samo, zwieksz licznik, jesli nie, przesun indeks tablicy
- inc %r8 # jesli to ta, zwieksz ilosc powtorzen aktualnej liczby
- cmp $1, %r8 # jesli to pierwsze powtorzenie, zapisz w wyniku
- je writeresult
- badNumber: # postepowanie jesli wartosc w tablicy nie byla nasza liczba lub po prostu postepowanie dalsze
- add $8, %rdi # przesuwamy indeks tablicy o jeden
- dec %rsi # zmniejszamy licznik tablicy
- cmp $0, %rsi # jesli jest rowny zero, musimy wrocic na poczatek tablicy
- je ifmaximum # jesli nie, wracamy do begin
- jmp begin
- writeresult:
- shl $1, %r8 # przesuwamy bitowo o 1 w lewo
- add $1, %r8 # zapisujemy, ze liczba wystepuje
- jmp badNumber # wracamy do postepowania dalszego
- ifmaximum:
- cmp %r8, %r9 # sprawdzamy, czy aktualna ilosc powtorzen jest wieksza od maksymalnej. Jesli tak, przepisujemy
- mov %r8, %r9
- mov $0, %r8
- renew:
- dec %r11 # zmniejszamy szukana liczbe
- pop %rdi
- pop %rsi
- cmp $0, %r11 # jesli nie mamy juz czego szukac :(
- jge begin
- mov %r9, %rax
- mov %rax, (%rdx) # najwieksza liczba powtorzen
- mov %r10, %rax # wynik bitowy
- end:
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement