97 lines
2.2 KiB
NASM
97 lines
2.2 KiB
NASM
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
|