练习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
arm-linux-gnueabi-gcc array.s -o array -static
qemu-arm-static ./array
0
1
2
3
4
5
6
7
8
9
#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;
}
.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