arm汇编语言 如何实现 数组中数据累加 然后用printf输出

练习ARM汇编语言,可以实现,循环输出数组中的数据,
想问,应该如何才能通过循环累加,把数组中的和求出,然后用输出显示出来

.data
    fmt:.asciz "%10d\n"
    ary:.word 0,1,2,3,4,5,6,7,8,9
    .equ counter,( . - ary)/4
.text
.globl main
 main:
    stmfd sp!,{lr}
    mov r4,#0
    mov r6,#0
    ldr r5, =ary
    b testfor
loop:
        ldr r0,=fmt
        ldr r1,[r5],#4
        bl printf
        add r4,#1
testfor:cmp r4,#counter
        blt loop
    mov r0, #0
    ldmfd sp!,{lr}
    mov pc, lr
.end
 

输出的结果是:

0
1
2
3
4
5
6
7
8
9

我想要达到的结果,向下面这个C语言一样输出 ,sum

#include<stdio.h>
int main(){
    int ary[10] = {0,1,2,3,4,5,6,7,8,9};
    int sum, i;
    sum = 0;
    for ( i = 0; i < 10; i++)
    {
        sum =sum +ary[i];
    }
    printf("%10d\n",sum);
    return 0; 
}
 

 

    ldr r2,[r5],#4  //把r5中当前地址对应的值给r2,然后再给r5自+4,让它指向数组中的下一个数
    add r6,r2    //  sum+=L[i]  把当前r2的值加到r6,多次循环就实现了累加


.386
.model flat, stdcall
.stack 4096
ExitProcess proto dwExitWord:DWORD

.data
intarray DWORD 10000h,20000h,30000h,40000h

.code
main proc
mov edi, OFFSET intarray        ;// EDI = 数组地址
mov ecx, LENGTHOF intarray        ;// 循环计数器
mov eax, 0                        ;// sum = 0
;// LOOP 类似C语言的 do{...}while(--eax);
L1:
add eax, [edi]                    ;// 间接寻址,类似于C语言用指针遍历数组
add edi, TYPE intarray
loop L1

invoke ExitProcess, 0
main endp
end main