如何使汇编64bit中的列总和?

时间:2019-05-17 17:48:39

标签: linux assembly 64-bit x86-64 nasm

我不知道如何计算列的总和。我试图计算列的总和,但无法添加所需数量的一定数量的字节。例如:我有dd的矩阵(4个字节),并且我需要在矩阵中和他的下面(1)添加第一个数字(2)。它们之间是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 个答案:

答案 0 :(得分:1)

跟踪与循环计数不同的寄存器中矩阵内的偏移量。一种方法是将其存储在R9中。

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

并不是说我还用两个顺序更好的等效指令替换了loop指令,并在其后的两个指令替换了等效的单个指令。即使计算使用较大的寄存器,mov [out],eax也会相同。