如果是一定地址之间仔哪循环的数组的话可以参照下我下面写的。
r4貌似要存不了这么大的数啊
汇编器 arm-none-eabi-as
.equ myarray, 0x20000018
.equ duiliechangdu, 40
ldr r0, = myarray
ldr r3, = duiliechangdu
mov r1, r3
mov r2, # 0
mov r4, # 0
dd1:
ldr r2, [r0, r1]
add r4, r4, r2
cmp r2, # 0
beq tiaochuqu
subs r1, # 4
bne dd1
mov r1, r3
b dd1
tiaochuqu:
b tiaochuqu
int GetSum(int val) //使用汇编求1+2+3+...+val的值{
int sum = 0
__asm__ __volatile__(
"MOV R5 , %1\n"//val放入寄存器r5
"MOV R1 , #0\n" //sum = 0
"MOV R2 , #1\衡森n"伏歼//i = 1
"LOOP:\n"
"ADD R1 , R1 ,R2\n" //sum = sum + i
"ADD R2 , R2 ,#1\n" //缺拦冲i++
" CMP R5 , R2\n" //判断 i 是否等于val if(i==val)
"BEQ END\n" //若相等 跳转至END处 break
"BLOOP\n" //若不相等 跳转至LOOP处进入下次循环 else continue
"END:\n"
"MOV %0 , R1\n" //sum = R1
:"=r"(sum)//输出
:"r"(val)//输入
:"memory"
)
return sum
}
随便写了个求和的例子 其余的循环大同小异 不懂可以继续探讨 运行之前请交叉编译然后在ARM平台上运行
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)