Загрузка данных


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