如何对 64 位汇编中的列求和?
How to make a sum of columns in assembly 64bit?
我不知道如何计算列的总和。我试图计算列的总和,但我无法添加我需要的一定数量的字节。例如:我有 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
在与循环计数不同的寄存器中跟踪矩阵内的偏移量。一种方法是将其存储在 R9
.
中
xor r9,r9
for:
add r8d,[matrix+r9]
add r9,12
dec rcx
jnz for
lea rax,[r8d+30h]
并不是说我还用两个顺序更好的等效指令替换了 loop
指令,并且用等效的单个指令替换了它后面的两个指令。即使计算使用较大的寄存器,mov [out],eax
也将相同。
我不知道如何计算列的总和。我试图计算列的总和,但我无法添加我需要的一定数量的字节。例如:我有 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
在与循环计数不同的寄存器中跟踪矩阵内的偏移量。一种方法是将其存储在 R9
.
xor r9,r9
for:
add r8d,[matrix+r9]
add r9,12
dec rcx
jnz for
lea rax,[r8d+30h]
并不是说我还用两个顺序更好的等效指令替换了 loop
指令,并且用等效的单个指令替换了它后面的两个指令。即使计算使用较大的寄存器,mov [out],eax
也将相同。