Advertisement
Guest User

Untitled

a guest
Jun 17th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ############ Euklides
  2.  
  3. .globl Euklides
  4. .type Euklides, @function
  5. Euklides:
  6. pushl %ebp
  7. movl %esp, %ebp
  8.  
  9. movl 12(%ebp), %ebx #b
  10. movl 8(%ebp), %eax #a
  11.  
  12. poczE:
  13. movl $0, %edx #przygotowujemy edx do dzielenia
  14. divl %ebx
  15. movl %ebx, %eax #umieszczamy b w miejsce a
  16. movl %edx, %ebx #reszte z dzielenia wrzucamy do b
  17. cmpl $0, %ebx #jesli reszta z dzielenia rowna zero to mamy wynik
  18. jne poczE
  19.  
  20. movl %ebp, %esp
  21. popl %ebp
  22. ret
  23.  
  24.  
  25. ############ Fibonacci
  26.  
  27.  
  28. .globl Fibonacci
  29. .type Fibonacci, @function
  30. Fibonacci:
  31.  
  32. pushl %ebp
  33. movl %esp, %ebp
  34.  
  35. movl 8(%ebp), %esi #argument ciagu
  36.  
  37. movl $1, %eax
  38. movl $0, %ebx
  39. cmpl $1, %esi #jesli argument jest jedynka to konczymy
  40. je endF
  41.  
  42. loop:
  43. movl %eax, %ecx #umieszczamy zapamitujemy wieksza liczbe
  44. addl %ebx, %eax #wyliczamy kolejny wyraz ciagu
  45. movl %ecx, %ebx
  46. dec %esi
  47. cmpl $1, %esi
  48. jne loop
  49.  
  50.  
  51. endF:
  52. movl %ebp, %esp
  53. popl %ebp
  54. ret
  55.  
  56.  
  57. ############ Horner
  58.  
  59.  
  60. .globl toInt
  61. .type toInt, @function
  62. toInt:
  63.  
  64. pushl %ebp
  65. movl %esp, %ebp
  66.  
  67. movl 8(%ebp), %esi #adres
  68. movl 12(%ebp), %ecx #rozmiar
  69.  
  70. movl $10, %ebx
  71. movl $0, %eax #suma
  72.  
  73. poczInt:
  74. mull %ebx #przesuniecie wyniku
  75. movb (%esi), %dl #pobranie aktualnej cyfry
  76. andl $0x0f, %edx #zamiana kodu ASCII na zwykla wartosc liczbowa
  77. addl %edx, %eax #dodanie do wyniku kolejnej cyfry
  78. incl %esi
  79. loop poczInt
  80.  
  81. movl %ebp, %esp
  82. popl %ebp
  83. ret
  84.  
  85.  
  86. ############# Cezar
  87.  
  88. a = 97
  89. z = 122
  90. nl = 10
  91. sp = 32
  92.  
  93. .globl ceasar
  94. .type ceasar, @function
  95. ceasar:
  96.  
  97. pushl %ebp
  98. movl %esp, %ebp
  99.  
  100. movl 8(%ebp), %esi  #adres lancucha
  101. movl 12(%ebp), %ebx #klucz
  102.  
  103. subb $a, %bl #zmienienie klucza na przesuniecie
  104.  
  105. loopC:
  106. movb (%esi), %al
  107.  
  108. cmpb $nl, %al  #jesli nowa linia to konczymy
  109. je endC
  110.  
  111. cmpb $sp, %al  #jesli spacja to mijamy ja
  112. je next
  113.  
  114. addb %bl, %al  #przesuwamy litere
  115.  
  116. cmpb $z, %al #jesli nie przekroczylo z to mozna wstawic
  117. jl put
  118.  
  119. subb $26, %al #korygujemy znak
  120.  
  121. put:
  122. movb %al, (%esi)
  123. next:
  124. incl %esi
  125. jmp loopC
  126.  
  127. endC:
  128. movl %ebp, %esp
  129. popl %ebp
  130. ret
  131.  
  132.  
  133. ############### Bezwzgledna
  134. #Uwaga! Niesprawdzone dzialanie
  135.  
  136.  
  137. .globl abs
  138. .type abs, @function
  139. abs:
  140. pushl %ebp
  141. movl %esp, %ebp
  142.  
  143. movl 8(%ebp), %esi  #adres pierwszej wartosci
  144. movl 12(%ebp), %ecx #rozmiar
  145.  
  146. movl $0x80000000, %eax #sprawdz czy liczba wgl jest ujemna
  147. andl (%esi), %eax
  148. jz endA
  149.  
  150. stc  #ustawienie flagi przeniesienia, wykorzystujemy zaleznosc -X = not(X) + ulp
  151.      #za pierwszym razem doda nam ulp
  152.  
  153. poczA:
  154. decl %ecx #przesuniecie indeksu
  155. notl (%esi, %ecx, 4)
  156. adcl $0, (%esi, %ecx, 4) #dodaj przeniesienie jesli jest
  157. loop poczA
  158.  
  159. endA:
  160. movl %ebp, %esp
  161. popl %ebp
  162. ret
  163.  
  164. ################ Przeciwna
  165. #Uwaga! Niesprawdzone zadanie
  166.  
  167. .globl inverse
  168. .type inverse, @function
  169. inverse:
  170. pushl %ebp
  171. movl %esp, %ebp
  172.  
  173. movl 8(%ebp), %esi  #adres pierwszej wartosci
  174. movl 12(%ebp), %ecx #rozmiar
  175.  
  176. stc  #ustawienie flagi przeniesienia, wykorzystujemy zaleznosc -X = not(X) + ulp
  177.      #za pierwszym razem doda nam ulp
  178.  
  179. poczI:
  180. decl %ecx #przesuniecie indeksu
  181. notl (%esi, %ecx, 4)
  182. adcl $0, (%esi, %ecx, 4) #dodaj przeniesienie jesli jest
  183. loop poczA
  184.  
  185. endI:
  186. movl %ebp, %esp
  187. popl %ebp
  188. ret
  189.  
  190.  
  191. ################ Dekrementacja
  192. #Uwaga! Niesprawdzone zadanie
  193.  
  194. .globl dec
  195. .type idec, @function
  196. dec:
  197. pushl %ebp
  198. movl %esp, %ebp
  199.  
  200. movl 8(%ebp), %esi  #adres pierwszej wartosci
  201. movl 12(%ebp), %ecx #rozmiar
  202.  
  203. stc  #za pierwszy razem oddejmie nam jedynke od liczby
  204. poczD:
  205. decl %ecx #przesuniecie indeksu
  206. sbbl $0, (%esi, %ecx, 4) #odejmij przeniesienie jesli jest
  207. loop poczA
  208.  
  209. endD:
  210. movl %ebp, %esp
  211. popl %ebp
  212. ret
  213.  
  214. ################# NWW
  215. #Uwaga! Niesprawdzone zadanie
  216.  
  217. .globl NWW
  218. .type NWW, @function
  219. NWW:
  220. pushl %ebp
  221. movl %esp, %ebp
  222.  
  223. movl 8(%ebp), %eax
  224. movl 12(%ebp), %ebx
  225.  
  226. loopNWW:  #wyliczenie NWD z Euklidesa
  227. movl $0, %edx
  228. divl %ebx
  229. movl %ebx, %eax
  230. movl %edx, %eax
  231. cmpl $0, %ebx
  232. jne loopNWW
  233.  
  234. movl %eax, %ecx #zapamietanie NWD
  235. movl 8(%ebp), %eax
  236. mull 12(%ebp) #wyliczenie iloczynu argumentow
  237. divl %ecx #podzielenie przez NWD
  238.  
  239. movl %ebp, %esp
  240. popl %ebp
  241. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement