Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2.         lea    (EncodedRLEStart).l,a1         ; загрузить данные для шифрования
  3.         lea    ($FF0000).l,a2
  4.         jmp    RLE_Compress              ; перейти
  5.  
  6. EncodedRLEStart:
  7.         dc.b   0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3
  8. EncodedRLEEnd:       dc.b   3
  9.                 even
  10.  
  11. ;---------------------------------------------------------
  12. ; Алгоритм RLE, для сжатия, если в а1 данные
  13. ;---------------------------------------------------------
  14. ; d0 - сравнивается с другими байтами
  15. ; d1 - количество копии байта
  16.  
  17. RLE_Compress:
  18.         moveq   #1,d3
  19.         moveq   #0,d1       ; сбросить указатель
  20.         move.b  (a1),d0     ; записать число
  21. Search_copy_of_byte:
  22.         lea     (a1,d3.w),a1           ; прибавить один к поинтеру
  23.                 cmpa.l  #EncodedRLEEnd,a1      ; поинтер дошёл до конца ?
  24.                 beq     Finish_encrypt         ; если да, перейти
  25.         cmp.b   (a1),d0     ; это копия байта?
  26.         bne     To_encrypt  ; перейти, если нет
  27.         addq.b  #1,d1       ; прибавить 1 к указателю копии
  28.                 bra.w   Search_copy_of_byte     ; проверить следующие байты
  29.  
  30. To_encrypt:
  31.         move.b  d1,(a2)+         ; записать, сколько раз дублировать байт
  32.         move.b  d0,(a2)+         ; записать, какой дублировать байт
  33.                 bra.w   RLE_Compress     ; шифровать следующие байты
  34.  
  35. Finish_encrypt: rts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement