Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.15 KB | None | 0 0
  1. N EQU 13
  2.  
  3. AREA imageArea, DATA, READONLY
  4. image DCB 0x01, 0x01, 0x01, 0x02, 0x03, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02
  5.  
  6. AREA zipArea, DATA, READWRITE
  7. compressed SPACE 2*N
  8.  
  9. AREA |.text|, CODE, READONLY
  10.  
  11.  
  12. ; Reset Handler
  13.  
  14. Reset_Handler PROC
  15. EXPORT Reset_Handler [WEAK]
  16.  
  17. LDR R0, =image
  18. LDR R1, =compressed
  19. PUSH {R0, R1}
  20. BL compression
  21. POP {R0, R1}
  22.  
  23. LDR R0, =N
  24. LDR R1, =compressed
  25. PUSH {R0, R1}
  26. BL compressionStats
  27. POP {R0, R1}
  28.  
  29. LDR R0, =5 ; res: 3
  30. LDR R1, =compressed
  31. PUSH {R0, R1}
  32. BL findSymbol
  33. POP {R0, R1}
  34.  
  35. LDR R0, =13 ; res :2
  36. LDR R1, =compressed
  37. PUSH {R0, R1}
  38. BL findSymbol
  39. POP {R0, R1}
  40.  
  41. LDR R0, =6 ; res: 1
  42. LDR R1, =compressed
  43. PUSH {R0, R1}
  44. BL findSymbol
  45. POP {R0, R1}
  46.  
  47.  
  48. stop B stop
  49. ENDP
  50. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  51. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  52. ; ++ R1, R0, .. ----
  53. compression PROC
  54. PUSH {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, lr}
  55. LDR R0, [SP, #48]
  56. LDR R1, [SP, #52]
  57. EOR R5, R5, R5 ; contatore
  58. EOR R4, R4, R4 ; flag uguale
  59. EOR R6, R6, R6 ; totale
  60.  
  61. SUB R0, R0, #1
  62. SUB R1, R1, #1
  63. preleva
  64. EOR R5, R5, R5
  65. ADD R7, R0, #1 ; salvo R0+1 in una var temporanea
  66. LDRB R2, [R0, #1]!
  67. LDRB R3, [R0, #1]!
  68. ADD R5, R5, #1
  69. CMP R2, R3
  70. BNE contadiverse
  71. contauguali
  72. LDRB R2, [R0, #1]!
  73. ADD R5, R5, #1
  74. CMP R2, R3
  75. BNE finesequg
  76. B contauguali
  77. contadiverse2
  78. MOV R3, R2
  79. contadiverse
  80. LDRB R2, [R0, #1]!
  81. ADD R5, R5, #1
  82. CMP R2, R3
  83. BEQ fineseqdiv
  84. B contadiverse2
  85. finesequg
  86. SUB R5, R5, #1
  87. STRB R5, [R1, #1]!
  88. STRB R3, [R1, #1]!
  89. ADD R9, R5, #1 ; per salvarlo nel contatore
  90. B next
  91. fineseqdiv
  92. SUB R5, R5, #3 ; gli ultimi due che preleva sono uguali + 1 per l'algoritmo
  93. ORR R5, R5, #0x00000080
  94. STRB R5, [R1, #1]!
  95. AND R5, R5, #0xFFFFFF7F
  96. ADD R5, R5, #1 ; per la stampa
  97. MOV R9, R5
  98. salvaseqdiv
  99. LDRB R8, [R7, #1]!
  100. STRB R8, [R1,#1]!
  101. SUB R5, R5, #1
  102. CMP R5, #0
  103. BHI salvaseqdiv
  104. next
  105. SUB R0, R0, #2
  106. ADD R6, R6, R9
  107. CMP R6, #N
  108. BLO preleva
  109.  
  110. POP {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, pc}
  111. ENDP
  112. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  113. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  114.  
  115. compressionStats PROC
  116. PUSH {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, lr}
  117. LDR R0, [SP, #48] ; numero originale di byte
  118. LDR R1, [SP, #52] ; puntatore vettore
  119.  
  120. SUB R1, R1, #1
  121.  
  122. contbyte
  123. LDRB R3, [R1, #1]!
  124. ADD R2, R2, #1
  125. CMP R3, #0
  126. BNE contbyte
  127.  
  128. SUB R2, R2, #1 ; numero bute vettore compresso
  129. LDR R6, =100
  130. MUL R5, R2, R6
  131. UDIV R5, R5, R0 ; R5 = nbyte/N
  132. SUB R4, R6, R5 ; fattore compressione
  133.  
  134. STR R4, [SP, #48]
  135. POP {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, pc}
  136. ENDP
  137. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  138. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  139.  
  140. findSymbol PROC
  141. PUSH {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, lr}
  142. LDR R0, [SP, #48] ; i-esimo simbolo della immagine
  143. LDR R1, [SP, #52] ; compressa
  144.  
  145. EOR R3, R3, R3 ; indice reale nel vettore originale
  146. ; considero una posizione umana (si parte da 1)
  147. leggi
  148. MOV R7, R1
  149. LDRB R2, [R1]
  150. CMP R2, #0x00000080
  151. BHS divseq
  152. eqseq
  153. ADD R2, R2, #1
  154. ADD R1, R1, #2
  155. ADD R3, R3, R2
  156. B try
  157. divseq
  158. AND R2, R2, #0x0000007F
  159. ADD R2, R2, #1
  160. ADD R3, R3, R2
  161. ADD R1, R1, R2
  162. ADD R1, R1, #1
  163. ADD R2, R2, #0x00000080
  164. try
  165. CMP R0, R3
  166. BLS found
  167. B leggi
  168. found
  169. CMP R2, #0x00000080
  170. BLO findeq
  171. finddiv
  172. AND R2, R2, #0x0000007F
  173. SUB R3, R3, R2
  174. cicla
  175. ADD R7, R7, #1
  176. ADD R3, R3, #1
  177. CMP R3, R0
  178. BNE cicla
  179. LDRB R5, [R7]
  180. B then
  181. findeq
  182. LDRB R5, [R7, #1]
  183.  
  184. then
  185. STR R5, [SP, #48]
  186. POP {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, pc}
  187. ENDP
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement