feat: приведен шаблон для решения 3 пункта задания

Вроде там еще надо будет что-то сравнить по быстродействию, это добавлю в будущих коммитах
This commit is contained in:
root
2024-10-02 18:10:34 +03:00
parent a309019bdb
commit e86f3701fe
3 changed files with 74 additions and 0 deletions

51
04-addr-methods/task3.asm Normal file
View File

@ -0,0 +1,51 @@
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