Advertisement
anutka

Untitled

Nov 6th, 2020
683
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.     mov rbp, rsp
  14.     push r12
  15.     push r13
  16.    
  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 rax, [rsp + 16] //start1 -rdi
  25.     mul r8
  26.     mov rdi, [rsp + 24]
  27.     add rdi, rax
  28.  
  29.     mov rax, [rsp + 8] //start2 - rsi
  30.     mul r8
  31.     mov rsi, [rsp + 24]
  32.     add rax, 4
  33.     add rsi, rax
  34.  
  35.     mov rax, [rsp + 8] //mid - r12
  36.     mul r8
  37.     mov r12, [rsp + 24]
  38.     add r12, rax
  39.  
  40.     mov rax, [rsp] //end - r13
  41.     mul r8
  42.     mov r13, [rsp + 24]
  43.     add r13, rax
  44.  
  45. merge_loop:
  46.     cmp r12, rdi // mid  , start1
  47.     jl next_merge_step
  48.  
  49.     cmp r13, rsi //end, start2
  50.     jl next_merge_step
  51.  
  52.     mov r8, [rdi] // a[start1]
  53.     mov r9, [rsi] //a[start2]
  54.  
  55.     mov rcx, rsi // start2
  56.     sub rcx, rdi //start1  
  57.     mov rdx, rsi //index
  58.  
  59.     cmp r9, r8
  60.     jl change_loop
  61.  
  62.     add rdi, 4
  63.     jmp merge_loop
  64.  
  65. change_loop:
  66.  
  67.     mov r8, rdx
  68.     sub r8, 4
  69.     mov r8, [r8]
  70.     mov [rdx], r8
  71.  
  72.     sub rdx, 4
  73.  
  74.     loop change_loop
  75.  
  76.     mov [rdi], r9
  77.     add rdi, 4
  78.     add rsi, 4
  79.     add r12, 4
  80.     jmp merge_loop
  81.  
  82. next_merge_step:
  83.     add rsp, 32
  84.     pop r13
  85.     pop r12
  86.     pop rbp
  87.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement