Advertisement
Guest User

Untitled

a guest
Dec 23rd, 2015
396
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. global main
  2.  
  3. extern malloc
  4. extern free
  5. extern printf
  6. extern putchar
  7.  
  8. %include "print_mass.inc"
  9.  
  10. %define STEP 4
  11.  
  12. foo:
  13.     push rbp
  14.     mov rbp, rsp
  15.     sub rsp, 24
  16.  
  17.     push rdi
  18.     xor rdi, rdi            ; Вычисляем размер массива с[t]
  19.     add edi, edx
  20.     add edi, ecx
  21.     mov [rsp-16], rdi       ; Запоминаем размер массива
  22.     call malloc             ; запрашиваем памяти
  23.     test rax, rax
  24.     jz .exit
  25.     mov [rbp-8], rax        ; запоминаем начало
  26.     mov [rbp-24], rax
  27.     mov rdi, [rsp-16]
  28.     lea rax, [rax+rdi]      ; вычисляем и запоминаем конец
  29.     mov [rsp-16], rax
  30.     pop rdi
  31.     lea rdx, [rdi+rdx]
  32.     lea rcx, [rsi+rcx]
  33.  
  34. ; rdi = a, rsi = b
  35. .while:
  36.     cmp rdi, rdx
  37.     jae .a_greater_b
  38.     cmp rsi, rcx
  39.     jae .a_less_b
  40.     mov eax, [rdi]
  41.     cmp eax, [rsi]
  42.     jl .a_less_b
  43.  
  44. .a_greater_b:
  45.     push rdx
  46.     mov rax, [rbp-8]
  47.     mov edx, [rsi]
  48.     mov [rax], edx
  49.     add rsi, STEP
  50.     add qword [rbp-8], STEP
  51.     pop rdx
  52.     jmp .if
  53.  
  54. .a_less_b:
  55.     push rdx
  56.     mov rax, [rbp-8]
  57.     mov edx, [rdi]
  58.     mov [rax], edx
  59.     add rdi, STEP
  60.     add qword [rbp-8], STEP
  61.     pop rdx
  62.     jmp .if
  63.  
  64. .if:
  65.     mov rax, [rbp-8]
  66.     cmp rax, [rbp-16]
  67.     jb .while
  68.  
  69. .exit:
  70.     mov rdi, [rbp-24]
  71.     mov rsi, [rbp-16]
  72.     mov rsp, rbp
  73.     pop rbp
  74.     ret
  75.  
  76. main:
  77. section .data
  78.     mass_a dd -10,-2,0,7,8,1,2,37
  79.     size_a equ $-mass_a
  80.     mass_b dd 2,3,4,5,6,7,10,17,18,19,20
  81.     size_b equ $-mass_b
  82.  
  83. section .text
  84.     push rbp
  85.  
  86. print_a:
  87.     mov rdi, mass_a
  88.     lea rsi, [mass_a + size_a]
  89.     print_mass rdi, rsi
  90.  
  91. print_b:
  92.     mov rdi, mass_b
  93.     lea rsi, [mass_b + size_b]
  94.     print_mass rdi, rsi
  95.  
  96.     mov rdi, mass_a
  97.     mov rdx, size_a
  98.     mov rsi, mass_b
  99.     mov rcx, size_b
  100.     call foo
  101.  
  102. print_c:
  103.     print_mass rdi, rsi
  104.  
  105.     call free
  106.  
  107.     xor eax, eax
  108.     pop rbp
  109.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement