Advertisement
Guest User

Untitled

a guest
May 19th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  1. .text
  2. .global add_bignum
  3. .type add_bignum, @function
  4. add_bignum:
  5. /* pierwszy rdi drugi rsi trzeci rdx*/
  6. /*zapasowy zmienna z adresem poczatku rdx */
  7. mov %rdx,%r15
  8. /* pole n struktury a */
  9. mov (%rdi),%ebx
  10.  
  11. /* poczatek tablicy a i r */
  12. add $4,%rdi
  13. add $4,%rdx
  14.  
  15. /* licznik do petli */
  16. mov $0,%r10d
  17.  
  18. .petla_1:
  19. /* petla ktora przepisuje elementy z tablicy a do tablicy r */
  20.  
  21. /* Bierzemy 1 element tablicy i przypisujemy zmiennej r9b */
  22. movb (%rdi),%r9b
  23. /* Wkladamy zmienna r9b do pierwszego miejsca w tablicy r */
  24. movb %r9b,(%rdx)
  25. /* adres zwiekszami o 1 aby wskazywal na kolejne elementy tablicy */
  26. add $1,%rdi
  27. add $1,%rdx
  28. /* test do petli */
  29. cmp %r10d,%ebx
  30. je .faza_2
  31. /* inkrementacja */
  32. inc %r10d
  33. /* skos petli */
  34. jmp .petla_1
  35.  
  36. .faza_2:
  37. /* przygotujemy zmienne do drugiej petli w ktorej bedziemy sumowali
  38. elementy tablicy b z tablica wynikowa */
  39. /* wielkosc tablicy b */
  40. mov (%rsi),%eax
  41. /* rdx znowu wskazuje na poczatek */
  42. mov %r15,%rdx
  43. /* ustawienie wskaznikow na tablice */
  44. add $4,%rdx
  45. add $4,%rsi
  46. /* licznik */
  47. mov $0,%r10
  48. /* zerowanie na wszelki wypadek */
  49. xor %r9,%r9
  50. xor %r11,%r11
  51.  
  52.  
  53. .petla_2:
  54. /* sumowanie tablic */
  55. /* bierzemy element tablicy wynikowej */
  56. mov (%rdx),%r11b
  57. /* dodajemy go ale juz na 8 bajtach do r9 */
  58. add %r11,%r9
  59. /* bierzemy element tablicy b */
  60. mov (%rsi),%r11b
  61. /* dodajemy go tez na 8 bajtach do tego samego r9 */
  62. add %r11,%r9
  63. /* 2 wynikowe bajty sumy dajemy do tablicy wynikowej */
  64. mov %r9b,(%rdx)
  65. /* wskazniki na dalsze elementy */
  66. add $1,%rdx
  67. add $1,%rsi
  68. /* sprawdzamy czy w r9 bylo przepelenienie jesli bylo to po przesuneciu
  69. o 8 bedziemy mieli 1, przez co w kolejnej iteracji bedziemy dzialali tak
  70. jak w dodawaniu pisemnym */
  71. shr $8,%r9
  72. /* inkrementacja,warunek i skok petli */
  73. inc %r10d
  74. cmp %r10d,%eax
  75. je .end
  76.  
  77. jmp .petla_2
  78.  
  79.  
  80. .end:
  81. /* sprawdzamy czy na koncu nie bylo przepelnienia */
  82. and %r9,%r9
  83. jz .end_2
  84. /* jesli bylo to przypisujemy ostatniemu bajtowi r9 */
  85. mov %r9b,(%rdx)
  86. .end_2:
  87. ret
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116. .size add_bignum, . - add_bignum
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement