Advertisement
Guest User

Untitled

a guest
Jun 1st, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # 64 bity - 1 jesli liczba sie powtorzyla, 0 jesli nie
  2. # najwieksza liczba powtorzen
  3. # rdi rsi rdx rcx
  4.  
  5. .text
  6. .type check_tab, @function
  7. .global check_tab
  8.  
  9. check_tab:
  10.     push %rdi
  11.     push %rsi
  12.     xor %r8, %r8 # zmienna liczaca ilosc powtorzen
  13.     mov $0, %r8
  14.     xor %r9, %r9 # zmienna przechowujaca najwieksza liczbe powtorzen
  15.     mov $0, %r9
  16.     xor %r10, %r10 # zmienna trzymajaca wynik
  17.     xor %r11, %r11 # aktualna liczba (takze licznik petli)
  18.     mov $63, %r11
  19.  
  20. begin:
  21.     cmp %r11, (%rdi)    # porownaj aktualna liczbe z aktualnie wskazywana pozycja w tablicy
  22.     jne badNumber           # jesli to samo, zwieksz licznik, jesli nie, przesun indeks tablicy
  23.     inc %r8                 # jesli to ta, zwieksz ilosc powtorzen aktualnej liczby
  24.     cmp $1, %r8             # jesli to pierwsze powtorzenie, zapisz w wyniku
  25.     je writeresult
  26.  
  27. badNumber:      # postepowanie jesli wartosc w tablicy nie byla nasza liczba lub po prostu postepowanie dalsze
  28.     add $8, %rdi    # przesuwamy indeks tablicy o jeden
  29.     dec %rsi        # zmniejszamy licznik tablicy
  30.     cmp $0, %rsi    # jesli jest rowny zero, musimy wrocic na poczatek tablicy
  31.     je ifmaximum        # jesli nie, wracamy do begin
  32.     jmp begin
  33.  
  34. writeresult:
  35.     shl $1, %r8     # przesuwamy bitowo o 1 w lewo
  36.     add $1, %r8     # zapisujemy, ze liczba wystepuje
  37.     jmp badNumber   # wracamy do postepowania dalszego
  38.  
  39. ifmaximum:
  40.     cmp %r8, %r9    # sprawdzamy, czy aktualna ilosc powtorzen jest wieksza od maksymalnej. Jesli tak, przepisujemy
  41.     mov %r8, %r9
  42.     mov $0, %r8
  43.  
  44. renew:
  45.     dec %r11 # zmniejszamy szukana liczbe
  46.     pop %rdi
  47.     pop %rsi
  48.     cmp $0, %r11    # jesli nie mamy juz czego szukac :(
  49.     jge begin
  50.  
  51.     mov %r9, %rax
  52.     mov %rax, (%rdx)    # najwieksza liczba powtorzen
  53.     mov %r10, %rax  # wynik bitowy
  54.  
  55. end:
  56.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement