global fill_arr1 global fill_arr2 section .note.GNU-stack section .text %macro PUSH_M 1-* %rep %0 push %1 %rotate 1 %endrep %endmacro %macro RPOP_M 1-* %rotate -1 %rep %0 pop %1 %rotate -1 %endrep %endmacro fill_arr1: push rbp mov rbp, rsp PUSH_M rdi, rsi, rdx ; Вычисляем сколько числе в строке mov rax, [rbp - 16] xor rdx, rdx div qword [rbp - 24] push rax ; сохраняем в локальные переменные. rbp - 32 ; Вычисляем сколько проходов цикла необходимо mov rax, [rbp - 24] xor rdx, rdx mov rcx, 2 div rcx push rax ; rbp-40 ; Надеюсь rdi не успел поменяться ; заполняем память push rbx mov rbx, [rbp - 32] mov rcx, [rbp - 40] mov rax, 777 ; специально такое число, чтобы выделялось .next_row: push rcx mov rcx, [rbp - 32] rep stosd lea rdi, [rdi + 4 * rbx] ; пропускаем строку pop rcx loop .next_row pop rbx add rsp, 16 ; чистим 2 доп переменные, образовавшиеся в процессе вычислений RPOP_M rdi, rsi, rdx pop rbp ret fill_arr2: push rbp mov rbp, rsp PUSH_M rdi, rsi, rdx ; Вычисляем сколько числе в строке mov rax, [rbp - 16] xor rdx, rdx div qword [rbp - 24] push rax ; сохраняем в локальные переменные. rbp - 32 ; Вычисляем сколько проходов цикла необходимо mov rax, [rbp - 24] xor rdx, rdx mov rcx, 2 div rcx push rax ; rbp-40 ; Надеюсь rdi не успел поменяться ; заполняем память push rbx mov rbx, [rbp - 32] mov rcx, [rbp - 40] mov rax, 777 ; специально такое число, чтобы выделялось .next_row: push rcx mov rcx, [rbp - 32] .fill: mov [rdi], rax lea rdi, [rdi + 4] loop .fill lea rdi, [rdi + 4 * rbx] ; пропускаем строку pop rcx loop .next_row pop rbx add rsp, 16 ; чистим 2 доп переменные, образовавшиеся в процессе вычислений RPOP_M rdi, rsi, rdx pop rbp ret