Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .intel_syntax noprefix
- .text
- .global merge
- merge:
- /*
- rdi - *res
- rsi - from
- rdx - mid
- rcx - to
- */
- //сохранили регистры
- push rbp
- mov rbp, rsp
- push r12
- push r13
- push rdi //rsp + 24 -*res
- push rsi //rsp + 16 - from
- push rdx //rsp + 8 - mid
- push rcx //rsp - to
- mov rax, [rsp + 16] //start1 -rdi
- mul r8
- mov rdi, [rsp + 24]
- add rdi, rax
- mov rax, [rsp + 8] //start2 - rsi
- mul r8
- mov rsi, [rsp + 24]
- add rax, 4
- add rsi, rax
- mov rax, [rsp + 8] //mid - r12
- mul r8
- mov r12, [rsp + 24]
- add r12, rax
- mov rax, [rsp] //end - r13
- mul r8
- mov r13, [rsp + 24]
- add r13, rax
- merge_loop:
- cmp r12, rdi // mid , start1
- jl next_merge_step
- cmp r13, rsi //end, start2
- jl next_merge_step
- mov r8, [rdi] // a[start1]
- mov r9, [rsi] //a[start2]
- mov rcx, rsi // start2
- sub rcx, rdi //start1
- mov rdx, rsi //index
- cmp r9, r8
- jl change_loop
- add rdi, 4
- jmp merge_loop
- change_loop:
- mov r8, rdx
- sub r8, 4
- mov r8, [r8]
- mov [rdx], r8
- sub rdx, 4
- loop change_loop
- mov [rdi], r9
- add rdi, 4
- add rsi, 4
- add r12, 4
- jmp merge_loop
- next_merge_step:
- add rsp, 32
- pop r13
- pop r12
- pop rbp
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement