Advertisement
Guest User

Untitled

a guest
Apr 9th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .data
  2. SYSREAD = 0
  3. SYSWRITE = 1
  4. SYSOPEN = 2
  5. SYSCLOSE = 3
  6. SYSEXIT = 60
  7. EXIT_SUCCESS = 0
  8. FREAD = 0
  9. FWRITE = 1
  10. PERSMISSIONS = 0644
  11. BUFF = 1024
  12. POCZATEK_LICZB = 0x30
  13. PODSTAWA_WE = 4
  14. PODSTAWA_WY = 2
  15. file_liczba1: .ascii "liczba1.txt\0"
  16. file_liczba2: .ascii "liczba2.txt\0"
  17. file_wynik: .ascii "wynik.txt\0"
  18.  
  19. .bss
  20. .comm liczba1, 1024
  21. .comm liczba2, 1024
  22. .comm wartosc1, 256
  23. .comm wartosc2, 256
  24. .comm dekodowanaLiczba1, 2049
  25. .comm dekodowanaLiczba2, 2049
  26.  
  27. .text
  28. .global main
  29.  
  30. main:
  31. # ------- CZYSZCZENIE BUFFORA -------
  32. mov $256, %r8
  33. mov $0, %al  
  34.  
  35. czysc:
  36. dec %r8
  37. mov %al, wartosc1(, %r8, 1)
  38. mov %al, wartosc2(, %r8, 1)
  39.  
  40. cmp $0, %r8
  41. jg czysc
  42.  
  43. # ------- PIERWSZA LICZBA ---------
  44.  
  45. # -- OTWARCIE PLIKU --
  46. mov $SYSOPEN, %rax
  47. mov $file_liczba1, %rdi
  48. mov $FREAD, %rsi
  49. mov $0, %rdx
  50. syscall
  51. mov %rax, %r10
  52.  
  53. # -- WCZYTANIE LICZBY --
  54. mov $SYSREAD, %rax
  55. mov %r10, %rdi              # w R10 jest wskaznik do otwartego pliku
  56. mov $liczba1, %rsi          # zawartość trafi do bufora in
  57. mov $BUFF, %rdx
  58. syscall
  59. mov %rax, %r8  
  60.  
  61. # -- ZAMKNIECIE PLIKU --
  62. mov $SYSCLOSE, %rax
  63. mov %r10, %rdi              # wskaznik do otwartego wciąż pliku
  64. mov $0, %rsi
  65. mov $0, %rdx
  66. syscall
  67.  
  68.  
  69. # ------- DRUGA LICZBA ---------
  70.  
  71. # -- OTWARCIE PLIKU --
  72. mov $SYSOPEN, %rax
  73. mov $file_liczba2, %rdi
  74. mov $FREAD, %rsi
  75. mov $0, %rdx
  76. syscall
  77. mov %rax, %r10
  78.  
  79. # -- WCZYTANIE LICZBY --
  80. mov $SYSREAD, %rax
  81. mov %r10, %rdi              # w R10 jest wskaznik do otwartego pliku
  82. mov $liczba2, %rsi          # zawartość trafi do bufora in
  83. mov $BUFF, %rdx
  84. syscall
  85. mov %rax, %r8  
  86.  
  87. # -- ZAMKNIECIE PLIKU --
  88. mov $SYSCLOSE, %rax
  89. mov %r10, %rdi              # wskaznik do otwartego wciąż pliku
  90. mov $0, %rsi
  91. mov $0, %rdx
  92. syscall
  93.  
  94. # ------- KONIEC WCZYTYWANIA LICZB --------
  95.  
  96.  
  97.  
  98. # ------- DEKODOWANIE WARTOSCI -------
  99.  
  100. # DEKODOWANIE PIERWSZEJ LICZBY
  101.  
  102. dec %r8
  103. mov $256, %r9
  104.  
  105. dekoduj:
  106. dec %r8
  107. dec %r9
  108.  
  109. # Dekodowanie pierwszych 2 bitow
  110. mov liczba1(, %r8, 1), %al
  111. sub $POCZATEK_LICZB, %al
  112. cmp $0, %r8
  113. jle zapisz
  114.  
  115. # Dekodowanie kolejnych 2 bitow
  116. dec %r8
  117. mov liczba1(, %r8, 1), %bl
  118. sub $POCZATEK_LICZB, %bl
  119. shl $2, %bl                     # przesuniecie bitowe w lewo
  120. add %bl, %al
  121.  
  122. cmp $0, %r8
  123. jle zapisz
  124.  
  125. # Zdekodowanie kolejnych 2 bitów
  126. dec %r8
  127. mov liczba1(, %r8, 1), %bl
  128. sub $POCZATEK_LICZB, %bl
  129. shl $4, %bl
  130. add %bl, %al
  131.  
  132. cmp $0, %r8
  133. jle zapisz
  134.  
  135. # Zdekodowanie kolejnych 2 bitów
  136. dec %r8
  137. mov liczba1(, %r8, 1), %bl
  138. sub $POCZATEK_LICZB, %bl
  139. shl $6, %bl
  140. add %bl, %al
  141.  
  142. cmp $0, %r8
  143. jle zapisz
  144.  
  145. # Zapisywanie wartosci do nowego bufora
  146.  
  147. zapisz:
  148. mov %al, wartosc1(, %r9, 1)
  149. cmp $0, %r8
  150. jg dekoduj
  151.  
  152. # Konwersja na binarny
  153. mov $256, %r8
  154. mov $2047, %r9
  155.  
  156. dekoduj_wczytaj:
  157. dec %r8
  158. mov wartosc1(, %r8, 1), %al
  159.  
  160. mov $8, %r10
  161.  
  162. dekoduj_petla:
  163. mov %al, %bl  
  164. and $1, %bl  
  165. add $POCZATEK_LICZB, %bl
  166. mov %bl, dekodowanaLiczba1(, %r9, 1)
  167.  
  168. shr $1, %rax
  169.  
  170. dec %r9      
  171. dec %r10
  172. cmp $0, %r10
  173. jg dekoduj_petla    
  174.  
  175. cmp $0, %r8  
  176. jg dekoduj_wczytaj
  177.  
  178. # DEKODOWANIE DRUGIEJ LICZBY
  179. dec %r8
  180. mov $256, %r9
  181.  
  182. dekoduj_liczba2:
  183. dec %r8
  184. dec %r9
  185.  
  186. # Dekodowanie pierwszych 2 bitow
  187. mov liczba2(, %r8, 1), %al
  188. sub $POCZATEK_LICZB, %al
  189. cmp $0, %r8
  190. jle zapisz_liczba2
  191.  
  192. # Dekodowanie kolejnych 2 bitow
  193. dec %r8
  194. mov liczba2(, %r8, 1), %bl
  195. sub $POCZATEK_LICZB, %bl
  196. shl $2, %bl                     # przesuniecie bitowe w lewo
  197. add %bl, %al
  198.  
  199. cmp $0, %r8
  200. jle zapisz_liczba2
  201.  
  202. # Zdekodowanie kolejnych 2 bitów
  203. dec %r8
  204. mov liczba2(, %r8, 1), %bl
  205. sub $POCZATEK_LICZB, %bl
  206. shl $4, %bl
  207. add %bl, %al
  208.  
  209. cmp $0, %r8
  210. jle zapisz_liczba2
  211.  
  212. # Zdekodowanie kolejnych 2 bitów
  213. dec %r8
  214. mov liczba2(, %r8, 1), %bl
  215. sub $POCZATEK_LICZB, %bl
  216. shl $6, %bl
  217. add %bl, %al
  218.  
  219. cmp $0, %r8
  220. jle zapisz_liczba2
  221.  
  222. # Zapisywanie wartosci do nowego bufora
  223.  
  224. zapisz_liczba2:
  225. mov %al, wartosc2(, %r9, 1)
  226. cmp $0, %r8
  227. jg dekoduj
  228.  
  229. # Konwersja na binarny
  230. mov $256, %r8
  231. mov $2047, %r9
  232.  
  233. dekoduj_wczytaj_liczba2:
  234. dec %r8
  235. mov wartosc2(, %r8, 1), %al
  236.  
  237. mov $8, %r10
  238.  
  239. dekoduj_petla_liczba2:
  240. mov %al, %bl  
  241. and $1, %bl  
  242. add $POCZATEK_LICZB, %bl
  243. mov %bl, dekodowanaLiczba2(, %r9, 1)
  244.  
  245. shr $1, %rax
  246.  
  247. dec %r9      
  248. dec %r10
  249. cmp $0, %r10
  250. jg dekoduj_petla_liczba2  
  251.  
  252. cmp $0, %r8  
  253. jg dekoduj_wczytaj_liczba2
  254.  
  255. # ------ KONIEC DEKODOWANIA -------
  256.  
  257.  
  258. # ------- ZAPISANIE WYNIKU --------
  259. # Otwarcie pliku
  260. mov $SYSOPEN, %rax
  261. mov $file_wynik, %rdi
  262. mov $FWRITE, %rsi
  263. mov $0644, %rdx
  264. syscall
  265. mov %rax, %r8
  266.  
  267. # Zapis bufora do pliku
  268. movq $2048, %r9
  269. movb $0x0A, dekodowanaLiczba1(, %r9, 1)
  270. mov $SYSWRITE, %rax
  271. mov %r8, %rdi
  272. mov $dekodowanaLiczba1, %rsi
  273. mov $2049, %rdx
  274. syscall
  275.  
  276. # Zamknięcie pliku
  277. mov $SYSCLOSE, %rax
  278. mov %r8, %rdi
  279. mov $0, %rsi
  280. mov $0, %rdx
  281. syscall
  282.  
  283. mov $SYSEXIT, %rax
  284. mov $EXIT_SUCCESS, %rdi
  285. syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement