daily pastebin goal
17%
SHARE
TWEET

Untitled

a guest Mar 26th, 2019 69 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //lab2
  2. .data
  3. STDIN=0
  4. STDOUT=1
  5. SYSREAD=0
  6. SYSWRITE=1
  7. SYSOPEN=2
  8. SYSCLOSE=3
  9. FREAD=0
  10. FWRITE=1
  11. FWRITECREATE=01101 #tworzenie,nadpisywanie,czytanie
  12. SYSEXIT=60
  13. EXIT_SUCCESS=0
  14. file_in1: .ascii "in1\0"
  15. file_in2: .ascii "in2\0"
  16. file_out: .ascii "out\0"
  17.  
  18. .bss
  19. .comm in1, 1024 # ascii z pliku 1
  20. .comm in2, 1024 # ascii z pliku 2
  21. .comm value1, 1024  #wartosc z pliku 1
  22. .comm value2, 1024  #wartosc z pliku 2
  23. .comm sum, 1024  #suma
  24. .comm out, 1024 #ascii sumy
  25.  
  26. .text
  27. .globl _start
  28. _start:
  29. //otworzenie pliku
  30. movq $SYSOPEN, %rax
  31. movq $file_in1, %rdi
  32. movq $FREAD, %rsi
  33. movq $0, %rdx
  34. syscall
  35. movq %rax, %r8  #w r8 uchwyt pliku in1
  36.  
  37. //wczytanie danych
  38. movq $SYSREAD, %rax
  39. movq %r8, %rdi
  40. movq $in1, %rsi
  41. movq $1024, %rdx
  42. syscall
  43. mov %rax, %r9   #w r9 liczba danych z pliku in1
  44.  
  45. //zamkniecie pliku
  46. movq $SYSCLOSE, %rax
  47. movq %r8, %rdi
  48. movq $0, %rsi
  49. movq $0, %rdx
  50. syscall
  51.  
  52. //zapis ascii jako wartosci do bufora
  53. dec %r9 #bez znaku konca
  54. movq $-1, %r10  #licznik od poczatku
  55.  
  56. savefile1:
  57. dec %r9
  58. inc %r10
  59.  
  60. #bity 1,2
  61. movb in1(, %r9,1), %al  #wczytanie ascii
  62. sub $'0',%al  #zmiana na wartosc
  63. cmp $0, %r9  #czy koniec danych
  64. jle savebuffA
  65.  
  66. #bity 3,4
  67. dec %r9
  68. movb in1(,%r9,1), %bl  #wczytanie ascii
  69. sub $'0', %bl #zmiana na wartosc
  70. shl $2, %bl   #przesuwam
  71. add %bl, %al  #dodaje do wyniku
  72. cmp $0, %r9 #czy koniec danych
  73. jle savebuffA
  74.  
  75. #bity 5,6
  76. dec %r9
  77. movb in1(,%r9,1), %bl  #wczytanie ascii
  78. sub $'0', %bl #zmiana na wartosc
  79. shl $4, %bl   #przesuwam
  80. add %bl, %al  #dodaje do wyniku
  81. cmp $0, %r9 #czy koniec danych
  82. jle savebuffA
  83.  
  84. #bity 7,8
  85. dec %r9
  86. movb in1(,%r9,1), %bl  #wczytanie ascii
  87. sub $'0', %bl #odejmuje ascii
  88. shl $6, %bl   #przesuwam
  89. add %bl, %al  #dodaje do wyniku
  90. cmp $0, %r9 #czy koniec danych
  91. jle savebuffA
  92.  
  93. savebuffA:
  94. movb %al, value1(,%r10,1)  #zapis do bufora
  95. cmp $0, %r9 #czy koniec danych
  96. jg savefile1
  97.  
  98. //Drugi plik
  99. second:
  100. //otworzenie pliku
  101. movq $SYSOPEN, %rax
  102. movq $file_in2, %rdi
  103. movq $FREAD, %rsi
  104. movq $0, %rdx
  105. syscall
  106. movq %rax, %r8  #kopia uchwytu do pliku
  107.  
  108. //wczytanie danych
  109. movq $SYSREAD, %rax
  110. movq %r8, %rdi
  111. movq $in2, %rsi
  112. movq $1024, %rdx
  113. syscall
  114. mov %rax, %r9   #r9 liczba odczytanych danych
  115.  
  116. //zamkniecie pliku
  117. #zamkniecie pliku
  118. movq $SYSCLOSE, %rax
  119. movq %r8, %rdi
  120. movq $0, %rsi
  121. movq $0, %rdx
  122. syscall
  123.  
  124. //zapis ascii jako wartosci do bufora
  125. dec %r9 #pomijam koniec lini
  126. movq $-1, %r11  #licznik od poczatku
  127.  
  128. savefile2:
  129. dec %r9
  130. inc %r11
  131.  
  132. #bity 1,2
  133. movb in2(, %r9,1), %al  #wczytanie ascii
  134. sub $'0',%al  #dekodowanie
  135. cmp $0, %r9  #jezli jest co wczytaj
  136. jle savebuffB
  137.  
  138. #bity 3,4
  139. dec %r9
  140. movb in2(,%r9,1), %bl  #wczytanie ascii
  141. sub $'0', %bl #odejmuje ascii
  142. shl $2, %bl   #przesuwam
  143. add %bl, %al  #dodaje do wyniku
  144. cmp $0, %r9
  145. jle savebuffB
  146.  
  147. #bity 5,6
  148. dec %r9
  149. movb in2(,%r9,1), %bl  #wczytanie ascii
  150. sub $'0', %bl #odejmuje ascii
  151. shl $4, %bl   #przesuwam
  152. add %bl, %al  #dodaje do wyniku
  153. cmp $0, %r9
  154. jle savebuffB
  155.  
  156. #bity 7,8
  157. dec %r9
  158. movb in2(,%r9,1), %bl  #wczytanie ascii
  159. sub $'0', %bl #odejmuje ascii
  160. shl $6, %bl   #przesuwam
  161. add %bl, %al  #dodaje do wyniku
  162. cmp $0, %r9
  163. jle savebuffB
  164.  
  165. savebuffB:
  166. movb %al, value2(,%r11,1)  #zapis do bufora
  167. cmp $0, %r9
  168. jg savefile2
  169.  
  170. #dodanie wartosci
  171. clc #czysczenie flage przeniesienia
  172. pushfq #umieszczenie rejestru z flagami na stosie
  173. movq $0, %r8 #licznik petli
  174.  
  175. add:
  176. movq value1(,%r8,8), %rax
  177. movq value2(,%r8,8), %rbx
  178. popfq   #pobieram rejestr flag
  179. adc %rbx,%rax  #dodaje z przeniesieniem
  180. jnc s_end
  181. pushfq  #umieszczam flagi na stosie
  182. n_end:
  183. movq %rax, sum(,%r8,8)  #zapis wyniku
  184. add $8, %r8 #skok co 8
  185. cmp $256,%r8
  186. jl add
  187.  
  188. s_end:
  189. pushfq
  190. cmp $0, %rax  #jezeli wynik 0 i brak przeniesienia
  191. jne n_end
  192.  
  193. buffvalue:
  194. #zamiana na osiem
  195. movq %r8, %r10  #licznik out
  196. movq $0, %r9   #licznik sum
  197.  
  198. change:
  199. mov sum(,%r9,4), %eax  #kopiuje 4 bajty wyjsciowe
  200. mov %eax, %ebx
  201. mov %eax, %ecx  
  202. mov %eax, %edx
  203. mov %eax, %ebp
  204. #rozdzielam liczbe na cztery
  205. shr $3, %ecx  #przesuwam w prawo o 3
  206. shr $6, %edx  #przesuwam w prawo o 6
  207. shr $9, %ebp  #przesuwam w prawo o 9
  208. and $0b111, %ebx   #3 bity
  209. and $0b111, %ecx   #3 bity
  210. and $0b111, %edx   #3 bity
  211. and $0b111, %ebp   #3 bity
  212. add $'0', %ebx
  213. add $'0', %ecx  #zamiana na ascii
  214. add $'0', %edx
  215. add $'0', %ebp
  216.  
  217. mov %ebx, out(,%r8,1)
  218. dec %r8
  219. mov %ecx, out(,%r8,1)
  220. dec %r8
  221. mov %edx, out(,%r8,1)
  222. dec %r8
  223. mov %ebp, out(,%r8,1)
  224. dec %r8
  225. inc %r9
  226. cmp %r10,%r9
  227. jl change
  228.  
  229. #dodanie znaku konca lini
  230. inc %r10
  231. movq %r10, %r8
  232. movb $0x0A, out(, %r8, 1)
  233.  
  234. //tworzenie pliku
  235. movq $SYSOPEN, %rax
  236. movq $file_out, %rdi
  237. movq $FWRITECREATE, %rsi
  238. movq $0666, %rdx
  239. syscall
  240. movq %rax, %r8  #uchwyt pliku
  241. //zapis
  242. movq $SYSWRITE, %rax
  243. movq  %r8, %rdi
  244. movq $out, %rsi
  245. movq %r10, %rdx
  246. syscall
  247. //zamykanie
  248. #zamkniecie pliku
  249. movq $SYSCLOSE, %rax
  250. movq %r8, %rdi
  251. movq $0, %rsi
  252. movq $0, %rdx
  253. syscall
  254.  
  255. koniec:
  256. movq $SYSEXIT, %rax
  257. movq $EXIT_SUCCESS, %rdi
  258. syscall
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top