Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .type encode1, @function
  2. .global encode1
  3. .text
  4.  
  5. # rax
  6.  
  7. # rdi - tablica buf
  8. # rsi --maska
  9. # rdx
  10. # rcx - iterator miejsca
  11. # r8  - 0
  12. # r9  - iterator tablicy buf
  13. # r10 - fromstackpoper
  14. # r11 - temporary mask
  15.  
  16. encode1:
  17.     mov $0, %r9
  18.     mov $0, %r8
  19.     mov $0, %rax
  20.     mov $-1, %rcx
  21.     mov $0, %r10
  22.     mov %rsi, %r11
  23.  
  24.     cmp $0, %rdx
  25.     je op0
  26.  
  27.     cmp $1, %rdx
  28.     je op1
  29.  
  30. op0:
  31.     mov %rdi, %rax
  32.     jmp end0
  33.  
  34. op1:
  35.   cmpb $0, (%rdi, %r9, 1)
  36.   je zakonczZerem
  37.  
  38.   cmpb $'a', (%rdi, %r9, 1)
  39.   jl usunZnak
  40.  
  41. pushonstack:
  42.   push (%rdi, %r9, 1)
  43.   inc %r9
  44.   inc %rcx
  45.   jmp op1
  46.  
  47. ;  przesuwa obecny znak do r10
  48. usunZnak:
  49.   mov (%rdi, %r9, 1), %r10b
  50.   add $48, %r8
  51.  
  52. ; przesuwa maske az dojdzie do bitu wlasciwego liczbie
  53. shifting:
  54.   cmp %r8b, %r10b
  55.   je checkOne
  56.  
  57.   inc %r8
  58.   shr %r11
  59.   jmp shifting
  60.  
  61. ; sprawdza czy maska dla tej liczby jest na 1
  62. checkOne:
  63.   and $1, %r11
  64.   cmp $1, %r11b
  65.   je finalize
  66.  
  67.   mov $0, %r10
  68.   mov $0, %r8
  69.   mov %rsi, %r11
  70.   jmp pushonstack
  71.  
  72. ; jak jest na 1 to wyzeruj wszystko i po prostu zinkrementuj iterator
  73. finalize:
  74.   mov $0, %r10
  75.   mov $0, %r8
  76.   mov %rsi, %r11
  77.  
  78.   inc %r9
  79.   jmp op1
  80.  
  81. ; dodaj znak konca wyrazu
  82. zakonczZerem:
  83.   push $0
  84.   inc %rcx
  85.   mov $0, %rax
  86.   mov $0, %rax
  87.  
  88. popfromstack:
  89.   cmp $0, %rcx
  90.   je end
  91.  
  92.   mov $0, %r10
  93.   pop %r10
  94.   mov %r10b, (%rdi, %rcx, 1)
  95.  
  96.   dec %rcx
  97.   jmp popfromstack
  98.  
  99. end:
  100.   pop %r10
  101.   mov %r10b, (%rdi, %r8, 1)
  102.   mov %rdi, %rax
  103.   jmp endafter
  104.  
  105. end0:
  106.   mov %rdi, %rax
  107.  
  108. endafter:
  109.   ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement