Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.95 KB | None | 0 0
  1. .intel_syntax noprefix
  2. .text
  3. .globl main
  4.  
  5. main:
  6. mov ebx,3
  7. push ebx
  8. call policz
  9.  
  10. push eax
  11. mov eax,offset printf_arg1
  12. push eax
  13. call printf
  14.  
  15. add esp,8
  16. exit:
  17. mov eax,0
  18. ret
  19.  
  20.  
  21. policz:
  22. push ecx
  23. push ebx
  24.  
  25. cmp ebx,0
  26. jne rekurencja
  27. mov eax,[esp+12] ; # zwracam m
  28. jmp koniec
  29.  
  30. rekurencja:
  31. mov ecx,0 #przygotowujemy miejsce do liczenia wyniku aktualnej funkcji
  32.  
  33. #przygotowanie arguntow do wywolania rekurencyjnego:
  34. dec ebx ; #zmniejsz n
  35. mov eax,[esp+12] ; #pobierz m
  36. add ecx,eax ; #dodaj m do wyniku aktualnej funkcji; teraz ecx = m
  37. inc eax ; #zwieksz m
  38. push eax ; # i wrzuc zwiekszone m jako arg funkcji wylicz
  39.  
  40. call policz
  41. add ecx,eax ; # do wyniku aktualnej funkcji dodajemy wynik wywolania rekurencyjnego
  42. # teraz ecx = m + wylicz(n-1,m+1)
  43.  
  44. mov eax,ecx #wiec wrzucam ecx do returna (eax'a)
  45.  
  46. koniec:
  47. pop ebx
  48. pop ecx
  49. ret 4
  50.  
  51.  
  52. .data
  53. printf_arg1:
  54. .asciz "%i"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement