Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- global main
- extern malloc
- extern free
- extern printf
- extern putchar
- %include "print_mass.inc"
- %define STEP 4
- foo:
- push rbp
- mov rbp, rsp
- sub rsp, 24
- push rdi
- xor rdi, rdi ; Вычисляем размер массива с[t]
- add edi, edx
- add edi, ecx
- mov [rsp-16], rdi ; Запоминаем размер массива
- call malloc ; запрашиваем памяти
- test rax, rax
- jz .exit
- mov [rbp-8], rax ; запоминаем начало
- mov [rbp-24], rax
- mov rdi, [rsp-16]
- lea rax, [rax+rdi] ; вычисляем и запоминаем конец
- mov [rsp-16], rax
- pop rdi
- lea rdx, [rdi+rdx]
- lea rcx, [rsi+rcx]
- ; rdi = a, rsi = b
- .while:
- cmp rdi, rdx
- jae .a_greater_b
- cmp rsi, rcx
- jae .a_less_b
- mov eax, [rdi]
- cmp eax, [rsi]
- jl .a_less_b
- .a_greater_b:
- push rdx
- mov rax, [rbp-8]
- mov edx, [rsi]
- mov [rax], edx
- add rsi, STEP
- add qword [rbp-8], STEP
- pop rdx
- jmp .if
- .a_less_b:
- push rdx
- mov rax, [rbp-8]
- mov edx, [rdi]
- mov [rax], edx
- add rdi, STEP
- add qword [rbp-8], STEP
- pop rdx
- jmp .if
- .if:
- mov rax, [rbp-8]
- cmp rax, [rbp-16]
- jb .while
- .exit:
- mov rdi, [rbp-24]
- mov rsi, [rbp-16]
- mov rsp, rbp
- pop rbp
- ret
- main:
- section .data
- mass_a dd -10,-2,0,7,8,1,2,37
- size_a equ $-mass_a
- mass_b dd 2,3,4,5,6,7,10,17,18,19,20
- size_b equ $-mass_b
- section .text
- push rbp
- print_a:
- mov rdi, mass_a
- lea rsi, [mass_a + size_a]
- print_mass rdi, rsi
- print_b:
- mov rdi, mass_b
- lea rsi, [mass_b + size_b]
- print_mass rdi, rsi
- mov rdi, mass_a
- mov rdx, size_a
- mov rsi, mass_b
- mov rcx, size_b
- call foo
- print_c:
- print_mass rdi, rsi
- call free
- xor eax, eax
- pop rbp
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement