I am currently learning how to convert C code into assembly x86 64 bit code. The code I have is:
long add_arrays(long *arr1, long *arr2, unsigned long num, long *result)
{
unsigned long sum = 0, i = 0;
while(i < num) {
result[i] = arr1[i] + arr2[i];
sum = sum + result[i];
i++;
}
return sum;
}
When I convert it into assembly, I get an output of either 0 or an address number. My code is:
.global add_arrays_asm
add_arrays_asm:
xor %r8, %r8
while_start:
cmp %r8, %rdx
jge while_break
movq (%rdi, %r8, 8), %r9
addq (%rsi, %r8, 8), %r9
movq (%rcx, %r8, 8), %r10
movq (%r9, %r8, 8), %rcx
addq (%r10, %r8, 8), %rax
addq (%rcx,%r8, 8), %rax
inc %r8
jmp while_start
while_break:
ret
And the code I'm using to test it is:
printf("Testing add_arrays_asm\n");
long l3[] = {3, 23, 32, 121, 0, 43, 95, 4};
long l4[] = {-823,12,-1222,84834, -328, 0, 9, -1387};
long res1[] = {0, 0, 0, 0, 0, 0, 0, 0};
long sum1 = add_arrays_asm(l3, l4, 8, res1);
int j = 0;
for(j = 0; j < 8; j++) {
printf("%8ld + %8ld = %8ld\n", l3[j], l4[j], res1[j]);
}
printf(" Sum = %ld\n\n", sum1);
I am new to coding in assembly so I cannot find where the code is going wrong. Any help would be appreciated. Thank you.