ARM汇编循环语句框架、数组求和

ARM汇编循环语句框架、数组求和,第1张

通过ARM汇编实现数组求和,实现简单循环

还是老方法,初学汇编,我们可以先写一个实现同样功能的C语言代码,来参考学习

#include
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; 
}

这里我们看到在主函数中定义了一个数组,定义了两个变量,然后for循环进行了10次,for循环中执行了数组累加运算,最后把累加的和打印出来,最后返回。


1.先把框架给出来(不明白可以参见这一篇文章:如何写一个ARM汇编语言框架)
.data
……
.globl main
 main:
    stmfd sp!,{lr}
    ……
    mov r0, #0
    ldmfd sp!,{lr}
    mov pc, lr
.end
2.定义全局变量

先给一个打印出的格式,然后把数组给定义好,然后把有多少数给算出(用于判断循环结束)

    fmt:.asciz "%10d\n"  // 定义一个以空结尾的字符串格式
    ary:.word 0,1,2,3,4,5,6,7,8,9  //自定义一个数组
    .equ counter,( . - ary)/4   // .equ伪指令,声明一个 counter来存放数组个数

下面详细讲一下counter,( . - ary)/4 这个语句,其中“ . ”代表当前行的地址,ary代表的是数组的首地址,然后相减再除以一个word占的长度,得到的就是这个数组的总个数

3.声明要使用的寄存器

C语言中我们定义了一个数组,一个和一个循环数 i,这里我们依次声明

    mov r4,#0  // r4当做循环数 i
    mov r6,#0  // r6作为和sum
    ldr r5, =ary  // r5取出并存放在内存中定义的数组
4.构建循环

循环在汇编中主要用到的就是两个工具指令,跳转和判断(B 和 CMP)其中B后面又可以加很多条件,比如BLT表示,如果带符号小于就跳转。


这里我给大家贴上所有的的条件助记符

这里该这么用,大家可以看看代码中的详细注释

ARM汇编语言循环语句模板
loop:            
        …………
        add r4,#1   //在上面声明了,r4先清零,然后执行一次加1一次
testfor:cmp r4,#counter   // 比较r4的值和后面的值的大小,实质上是前面减后面
        blt loop  //  blt,就是刚刚上面提到的,如果前面小于后面,就跳转到loop

这就是常用到的循环体,我们可以把它作为模板记住。


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

完成!

然后我们来看一下整体代码和运行结果


🌸🌸🌸🌸🌸🌸完结撒花!🌸🌸🌸🌸🌸🌸

如有疑问或错误,欢迎大家评论区留言指出,谢谢支持!!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/569944.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存