汇编语言实现数组求和_汇编语言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

相关推荐

  • error link2019无法解析的外部符号_inferior

    error link2019无法解析的外部符号_inferior最近在用VS2008开发,初学遇到不少问题,最头疼的问题之一就是:LNK2019。百度一下讲的并不够全面,反正都没解决我的问题。errorLNK2019问题在VC6.0中是errorLNK2001:unresolvedexternalsymbol问题,可能错误号改了。编译时出现类似这样的错误:Dlgcode.obj:errorLNK2019:无法解析的外部符号_readRe…

  • jmeter测试服务器性能测试报告,Jmeter的性能测试

    jmeter测试服务器性能测试报告,Jmeter的性能测试需要分析的系统信息需要分析的业务信息性能需求评估确定性能测试点:关键业务:确定被测项目是否属于关键业务,有哪些主要的业务逻辑点,特别是跟交易相关的功能点。例如转账,扣款等接口。如果项目(或功能点)不属于关键业务(或关键业务点)日请求量:确定被测项目各功能点的日请求量(可以统计不同时间粒度下的请求量如:小时,日,周,月)。如果日请求量很高,系统压力很大,而且又是关键业务,该项目需要做性能测试,而且关…

  • 笛卡尔积算法「建议收藏」

    笛卡尔积算法「建议收藏」/***生成笛卡尔积*@paramdimvalue*@paramresult*@paramlayer*@paramcurList*/privatestaticvoiddescartes(List

  • jq正则表达式_JAVA 正则表达式

    jq正则表达式_JAVA 正则表达式一、JavaScript正则表达式正则表达式(英语:RegularExpression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。搜索模式可用于文本搜索和文本替换。什么是正则表达式?正则表达式是由一个字符序列形成的搜索模式。当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。正则表达式可以是一个简单的字符,或一个更…

  • 搞懂JavaScript全局变量与局部变量,看这篇文章就够了[通俗易懂]

    搞懂JavaScript全局变量与局部变量,看这篇文章就够了[通俗易懂]<scripttype=”text/javascript”>vara=”Hello”;functiontest(){vara;console.log(a);a=”World”;console.log(a);}//undefined//Worldvarb=”Hello”;fun…

  • git需要安装吗(git与gitlab的区别)

    git需要安装吗(git与gitlab的区别)git和github的区别及安装1.什么是Git,与Github的关系(1)Git的定义(2)Github是什么(3)Git和Github的关系2.Git的安装(1)Windows系统上的安装(2)Linux系统上的安装(部分,参考[git官网](https://git-scm.com/download/linux”DownloadforLinu…

发表回复

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

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