汇编语言实现数组求和_汇编语言loop循环1到100求和

汇编语言实现数组求和_汇编语言loop循环1到100求和ARM汇编数组求和、ARM汇编语句循环框架

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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


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

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

这里我们看到在主函数中定义了一个数组,定义了两个变量,然后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表示,如果带符号小于就跳转。

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASU3msaTlp4blh6_nibk=,size_20,color_FFFFFF,t_70,g_se,x_16

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

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,多次循环就实现了累加

完成!

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASU3msaTlp4blh6_nibk=,size_20,color_FFFFFF,t_70,g_se,x_16


??????完结撒花!??????

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/186763.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(2)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号