Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # rdi rsi rdx rcx
- .text
- .type check_div, @function
- .global check_div
- check_div:
- cmp $0, %rdx
- je ceqzero # jesli argument trzeci=0, wtedy przeskocz do funkcji obslugujacej ten przypadek
- mov $0, %r8 # wynik
- mov $64, %r9 # pierwszy dzielnik (dzielnikow bede uzywac tez jako licznik petli, ktora skonczy sie, gdy %r9==64, ew. gdy dzielnik wiekszy od liczby)
- jmp divbytes
- ceqzero:
- mov %rdi, %rax # tu sie dzieja cuda z podpunktu a, ktore sie dzieja dobrze
- div %rsi
- cmp $0, %edx
- je reqzero
- mov $0, %rdi
- jmp end
- reqzero:
- mov $1, %rdi # tu rowniez nie trzeba patrzec
- jmp end
- divbytes:
- dec %r9 # zmniejszamy dzielnik
- cmp $0, %r9 # sprawdzamy, czy jestesmy juz poza zakresem
- je preend # jesli tak to konczymy
- xor %edx, %edx
- mov %rdi, %rax # a jesli nie, to sprawdzamy reszte
- div %r9
- cmp $0, %edx
- je byteone # jesli reszta byla rowna zero
- add $0, %r8
- shl $1, %r8
- jmp divbytes
- byteone:
- add $1, %r8
- shl $1, %r8 # przesuwamy bitowo o 1 w lewo
- jmp divbytes
- preend:
- mov %r8, %rdi
- jmp end
- end:
- mov %rdi, %rax
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement