Advertisement
Guest User

Untitled

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