Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.83 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement