global PrintValue
section .note.GNU-stack
section .data
A dq 1,2,3,4
dq 5,6,7,8
dq 9,10,11,12
dq 13,14,15,16
N equ 4
section .text
PrintValue:
xor rax,rax ; rax = S, общая сумма
xor rcx,rcx ; rcx = номер строки, начиная с 0
lea rsi,[rel A] ; rsi = адрес начала матрицы
next:
cmp rcx,N
jge finish ; если просмотрели все строки
mov r8,rcx
imul r8,N ; r8 = номер первого элемента строки
mov r9,r8
add r9,rcx ; r9 = n*N+n, главная диагональ
add rax,[rsi+8*r9] ; добавляем элемент главной диагонали
mov r10,N-1
sub r10,rcx ; r10 = N-1-n, столбец побочной диагонали
add r10,r8 ; r10 = n*N+(N-1-n)
add rax,[rsi+8*r10] ; добавляем элемент побочной диагонали
inc rcx ; следующая строка
jmp next
finish:
ret ; rax = 68