ARM汇编两数求和

通过两数求和搞懂ARM汇编语言基本框架

我们用C语言写的两数之和很简单

#include<stdio.h>
​
int main()
{
    int a,b,sum;
    a=5;
    b=9;
    sum=a+b;
    printf("%d\n",sum);
    return 0;
 } 

在主函数中定义三个变量,然后相加,打印出来,最后返回

   我们也可以通过C转换到汇编的方法来参考学习,详见上一篇C语言转汇编


ARM汇编语言写两数之和的基本框架也是这样

1.先定义全局变量

.data                   //在这里面声明全局变量
   str: .asciz "%5d\n"  // 定义一个以空结尾的输出格式
   a: .word 5           //定义两个int类型的数值
   b: .word 9

2.主函数部分给出框架

.globl main         //将main定义成一个可以访问的接口
 main:              //main的内容写在里面
   stmfd sp!,{lr}   // 把返回地址推到堆栈上
    ……  
   mov r0, #0       // return 0;
   ldmfd sp!,{lr}   // 从堆栈弹出返回地址
 mov pc, lr         // return to Linux
 .end               // 结束汇编程序

这就实现了基本框架

3.把我们想实现的两数之和给填到main中

在全局变量中定义了两个数,他们定义到了内存中,也就是说a和b的地址都在内存中,我们首先要把他们的地址从内存中取出,为什么用r0 因为 (r0~r3)这四个寄存器常用做传参,r0常用做传递返回值

//用这两条语句
    ldr r0,=a
    ldr r1,=b

然后需要把他值的地址,传递给寄存器用于计算

ARM的所有运算只能在寄存器中,但是这里要注意,不能用(r0~r3)也不能用(r11这是C语言中的堆栈针指针)、(r13~r15)

    ldr r4,[r0]
    ldr r5,[r1]

然后就可以直接用add 指令,把两个值加起来,然后通过bl调用C中的printf ,这里要知道的是,printf是从寄存器r1的内容开始输出,在格式中定义输出几个就输出几个数

   add r1,r4,r5
   ldr r0, =str        // 加载指向格式化字符串的指针
   bl printf
 

这就完成了我们的需求,成功输出两数之和

4.我们看一下完整程序和运行结果


本期结束,听懂掌声✿✿ヽ(°▽°)ノ✿如有疑问或错误,希望大家评论区留言指出,谢谢支持!!

下期预告:ARM汇编实现循环

  • 28
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论
### 回答1: "ARM汇编程序100例" 是一本介绍ARM汇编语言编程的参考书。该书包含了100个例子,用于帮助读者学习和理解ARM汇编程序设计的基本概念和技巧。 ARM汇编是一种低级别的程序设计语言,用于直接控制计算机硬件。它与高级语言相比,更接近计算机底层的操作。学习ARM汇编可以使程序员更深入地了解计算机体系结构,从而编写更高效和优化的程序。 "ARM汇编程序100例" 这本书的内容涵盖了从基本的指令和寄存器的使用到复杂的数据结构和算法的实现。它结合了理论知识和实际操作,通过具体的例子来演示和讲解各种ARM汇编的编程技巧。 这本书的设计初衷是帮助初学者掌握ARM汇编的基本概念和技术,并能够熟练地编写ARM汇编程序。每个例子都有详细的注释和解释,以帮助读者理解程序的功能和目的。读者可以通过学习这些例子,逐步提高自己的ARM汇编编程水平。 此外,这本书还提供了一些高级的ARM汇编程序设计技巧,以便读者能够编写更复杂和高效的程序。它还介绍了ARM处理器的一些特殊功能和优化技术,以提升程序的性能和效果。 总之,"ARM汇编程序100例" 是一本适合想要学习和掌握ARM汇编编程的读者的参考书。它通过丰富的例子和实践操作,帮助读者深入理解ARM汇编的基本原理和技巧,并提供了一些高级的编程技术,使读者能够编写更高效和优化的ARM汇编程序。 ### 回答2: ARM汇编程序100例是一本关于ARM体系结构编程技术的实例教程。本书共分为100个例子,每个例子涵盖了不同的ARM汇编编程技术和应用场景。 这本书首先介绍了ARM体系结构的基础知识,包括ARM寄存器、指令集以及主要的寻址模式等。然后,通过一系列具体的实例,展示了多种ARM汇编语言的使用方法和技巧。 这100个例子涵盖了ARM汇编编程的各个方面,包括数据处理、逻辑运算、条件分支、循环结构等等。每个例子都给出了详细的代码示例和运行结果,以帮助读者更好地理解和掌握ARM汇编语言的编程技巧。 此外,书中还介绍了一些常见的ARM应用场景和编程技巧,如中断处理、嵌入式系统开发等。这些实例旨在帮助读者在实际项目中能够灵活应用ARM汇编语言,提高编程效率和代码质量。 总之,ARM汇编程序100例是一本系统而全面的ARM汇编编程教程,通过实例的方式展示了ARM汇编语言的编程技术和应用场景。对于对ARM体系结构感兴趣的读者来说,这本书将是一本十分实用的参考资料。 ### 回答3: ARM汇编程序100例是针对ARM架构开发的一系列汇编程序示例,旨在帮助开发者更好地理解和掌握ARM汇编语言的编程技巧和应用场景。以下是一些例子供参考: 1. 反转符串:通过使用寄存器作为索引,逐个符反转存储在内存中的符串。 2. 求和:通过使用循环和累器寄存器,计算给定数组中元素的总和。 3. 斐波那契数列:根据斐波那契数列的定义,使用循环和寄存器计算前n个数。 4. 阶乘计算:通过使用递归或循环,计算给定数的阶乘。 5. 素数检测:根据素数的定义,使用循环和条件分支,判断给定数是否为素数。 6. 符串拷贝:通过使用循环和寄存器,将一个符串的内容复制到另一个符串。 7. 二进制转换:将一个正整数转换为二进制表示,并以符串形式输出。 8. 查找最大值:通过使用循环和比较指令,找到给定数组中的最大值。 9. 排序算法:使用冒泡排序、插入排序或快速排序等算法,对给定数组进行排序。 10. 十进制转换:将一个十进制数转换为二进制、八进制或十六进制表示,并以符串形式输出。 以上是部分例子,ARM汇编程序100例覆盖了更多的常见编程任务和算法,并通过示例代码的解析和说明,帮助开发人员更好地理解和应用ARM汇编语言。
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IM汤姆凯特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值