Как сделать сумму столбцов в сборке 64бит? - PullRequest
0 голосов
/ 17 мая 2019

Я не знаю, как рассчитать сумму столбцов.Я попытался вычислить сумму столбцов, но не могу добавить определенное количество байтов, которое мне нужно.Например: у меня матрица dd (4 байта), и мне нужно добавить первое число (2) в матрицу и под ним (1).Между ними 12 байтов, и я не могу добавить в цикле, как это [matrix+r9*12].Помогите пожалуйста!

global _start

section .text

_start:

    xor r8, r8          
    mov rcx, 2          
    for:
        mov r9, rcx
        dec r9
        add r8d, [matrix+r9*4]      

    loop for
    mov eax, r8d
    add eax, 30h
    mov [out], eax
    mov rax, 4
    mov rbx, 1
    mov rcx, msgAnswer
    mov rdx, msgAnswerLen
    int 80h

    mov rax, 4
    mov rbx, 1
    mov rcx, out
    mov rdx, 28             
    int 80h

    mov rax, 1
    mov rbx, 0
    int 80h

section .data

    matrix: dd 2, 3, 3          
        dd 1, 3, 3      
        dd 3, 4, 4          
    msgAnswer: db 'sum of columns: '
    msgAnswerLen equ $ - msgAnswer  

section .bss

    out: resd 9

1 Ответ

1 голос
/ 17 мая 2019

Отслеживать смещение внутри матрицы в регистре, отличном от числа циклов.Один из способов сделать это - сохранить это в R9.

    xor r9,r9
for:
    add r8d,[matrix+r9]
    add r9,12
    dec rcx
    jnz for
    lea rax,[r8d+30h]

Не то чтобы я также заменил инструкцию loop двумя эквивалентными инструкциями, которые лучше упорядочены, и двумя инструкциями, которые следуют за нейс эквивалентной единственной инструкцией.mov [out],eax будет таким же, даже если для расчета используется регистр большего размера.

...