global fill_arr 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_arr: ; rdi - указатель на память, rsi - сколько, rdx - сколько рядов ;xor rax, rax ; заполнять видимо будем нулями PUSH_M r8, rdi, rsi, rdx, rcx push rdx ; один раз для сохранения, другой - для трюка ; считаем сколько четных рядов mov rax, rdx xor rdx, rdx mov rcx, 2 div rcx mov rcx, rax ; считаем сколько колонок mov rax, rsi div qword [rsp] mov rcx, rax mov rdx, rax add rsp, 8 mov rax, 777 ; заполняем массив .fill_even_row: push rcx push rdi .loop_row: stosd loop .loop_row pop rdi pop rcx lea rdi, [rdi + 8 * rdx] loop .fill_even_row RPOP_M r8, rdi, rsi, rdx, rcx ret