【发布时间】:2020-10-31 15:01:36
【问题描述】:
我正在使用 NASM 学习汇编语言,并且遇到了一个我似乎无法弄清楚的编程问题。该程序的目标是求解这个方程: Picture of Equation 对于那些看不到照片的人,等式表示对于两个长度为 n 的数组,数组 a 和数组 b,求:对于 i=0 到 n-1,((ai + 3) - (bi - 4))
我应该只使用三个通用寄存器,并且我已经找到了一个我认为可能有效的代码示例,但是我在第 16 行和第 19 行中一直遇到逗号和操作数错误。我理解这是为了遍历数组,您需要将指针移动到每个索引,但由于两个数组的值不同(数组 1 是 dw,数组 2 是 db)我不确定如何解释这一点。我对大会还是很陌生,任何帮助或指示将不胜感激。 这是我当前代码的图片: Code Sample
segment .data
a dw 12, 14, 16 ; array of three values
b db 2, 4, 5 ; array of three values
n dw 3 ; length of both arrays
result dq 0 ; memory to result
segment .text
global main
main:
mov rax, 0
mov rbx, 0
mov rdx, 0
loop_start:
cmp rax, [n]
jge loop_end
add rbx, a[rax*4] ; adding element of a at current index to rbx
add rbx, 3 ; adding 3 to current index value of array a in rbx
add rdx, BYTE b[rax]
sub rdx, 4
sub rbx, [rdx]
add [result], rbx
xor rbx, rbx
xor rdx, rdx
add rax, 1
loop_end:
ret
【问题讨论】:
标签: arrays assembly x86-64 nasm