anutka

Untitled

Nov 6th, 2020
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     .intel_syntax noprefix
  2.     .text
  3.     .global merge
  4. merge:
  5. /*
  6.     rdi - *res
  7.     rsi - from
  8.     rdx - mid
  9.     rcx - to
  10.  */
  11.  //сохранили регистры
  12.     /*push rbp
  13.     push r12
  14.     push r13
  15.     push r15
  16.     mov rbp, rsp
  17.  
  18.  
  19.     push rdi    //rsp + 24 -*res
  20.     push rsi    //rsp + 16 - from
  21.     push rdx    //rsp + 8 - mid
  22.     push rcx    //rsp  - to
  23.    */
  24.     mov r8, 4
  25.     mov r8, rsi
  26.     add r8, 4
  27.     add r8, [r8]
  28.  
  29.     mov r15, [rsp + 24]
  30.     mov r15, [r15]
  31.  
  32.     mov rax, [rsp + 16] //start1 -rdi
  33.     mul r8
  34.     mov rdi, [rsp + 24]
  35.     add rdi, rax
  36.  
  37.     mov rax, [rsp + 8] //start2 - rsi
  38.     mul r8
  39.     mov rsi, [rsp + 24]
  40.     add rax, 4
  41.     add rsi, rax
  42.  
  43.     mov rax, [rsp + 8] //mid - r12
  44.     mul r8
  45.     mov r12, [rsp + 24]
  46.     add r12, rax
  47.  
  48.     mov rax, [rsp] //end - r13
  49.     mul r8
  50.     mov r13, [rsp + 24]
  51.     add r13, rax
  52.  
  53. merge_loop:
  54.     cmp r12, rdi // mid  , start1
  55.     jl next_merge_step
  56.  
  57.     cmp r13, rsi //end, start2
  58.     jl next_merge_step
  59.  
  60.     mov r8, [rdi] // a[start1]
  61.     mov r9, [rsi] //a[start2]
  62.  
  63.     mov rcx, rsi // start2
  64.     sub rcx, rdi //start1  
  65.     mov rdx, rsi //index
  66.  
  67.     cmp r9, r8
  68.  
  69.     jl change_loop
  70.  
  71.     add rdi, 4
  72.  
  73.     jmp merge_loop
  74.  
  75. change_loop:
  76.  
  77.     mov r8, rdx
  78.     sub r8, 4
  79.     mov r8, [r8]
  80.     mov [rdx], r8
  81.  
  82.     sub rdx, 4
  83.  
  84.     loop change_loop
  85.  
  86.     mov [rdi], r9
  87.     add rdi, 4
  88.     add rsi, 4
  89.     add r12, 4
  90.     jmp merge_loop
  91.  
  92. next_merge_step:
  93.     sub rsp, 24
  94.     pop r15
  95.     pop r13
  96.     pop r12
  97.     pop rbp
Advertisement
Add Comment
Please, Sign In to add comment