Advertisement
Guest User

Untitled

a guest
Jun 1st, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # rdi rsi rdx rcx
  2. .text
  3. .type check_div, @function
  4. .global check_div
  5.  
  6. check_div:
  7.     cmp $0, %rdx
  8.     je ceqzero      # jesli argument trzeci=0, wtedy przeskocz do funkcji obslugujacej ten przypadek
  9.     mov $0, %r8 # wynik
  10.     mov $64, %r9    # pierwszy dzielnik (dzielnikow bede uzywac tez jako licznik petli, ktora skonczy sie, gdy %r9==64, ew. gdy dzielnik wiekszy od liczby)
  11.     jmp divbytes
  12.  
  13. ceqzero:
  14.     mov %rdi, %rax  # tu sie dzieja cuda z podpunktu a, ktore sie dzieja dobrze
  15.     div %rsi
  16.     cmp  $0, %edx
  17.     je reqzero
  18.     mov $0, %rdi
  19.     jmp end
  20.  
  21. reqzero:
  22.     mov $1, %rdi    # tu rowniez nie trzeba patrzec
  23.     jmp end
  24.  
  25. divbytes:
  26.     dec %r9         # zmniejszamy dzielnik
  27.     cmp $0, %r9     # sprawdzamy, czy jestesmy juz poza zakresem
  28.     je preend           # jesli tak to konczymy
  29.     xor %edx, %edx
  30.     mov %rdi, %rax      # a jesli nie, to sprawdzamy reszte
  31.     div %r9    
  32.     cmp $0, %edx   
  33.     je byteone      # jesli reszta byla rowna zero
  34.     add $0, %r8
  35.     shl $1, %r8
  36.     jmp divbytes
  37.  
  38. byteone:
  39.     add $1, %r8
  40.      shl    $1, %r8     # przesuwamy bitowo o 1 w lewo
  41.     jmp divbytes
  42.    
  43. preend:
  44.     mov %r8, %rdi
  45.     jmp end
  46.  
  47. end:
  48.     mov %rdi, %rax
  49.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement