【ARM汇编练习】求绝对值|RSB指令的应用
【摘要】 ARM汇编求绝对值、RSB指令的运用
学完ARM汇编语言的所有指令,发现有个指令很有意思——RSB(RSB称为逆向减法指令)
当我们接触到一个新知识的时候,不妨想一下,这个概念为什么会出现,它能帮助我们解决什么问题呢?
带着这个疑问,我想到了绝对值的运算
思考:
RSB是逆向减,如果后面一个数为“0”,然后让它逆向减前面的一个数,那不就是他的绝对值吗嘛!
- 那如果是非负数呢,还需要让它逆向减吗?
- 因此,我们需要做一个判断,如果为正数则直接输出,如果为负数则进行逆向减。
- 那在ARM汇编中如何进行判断呢?
- CMP语句可以进行判断,然后我们让这个数与“0”进行判断,然后将两个语句组合到一起,当比较完小于的时候进行逆向减。
哦,可以用RSB来求绝对值运算!
思路清晰了,我们就可以直接开始写代码
之前我们都是先写C语言转换成汇编之后然后进行学习,但学了汇编框架之后,我们可以直接来试着写一下——ARM汇编语言框架可以详见这篇文章【
】1)先上框架
2)然后定义两个全局变量(打印的格式、常量)
3)之前我们说过,从内存中取值需要两步走,先取地址,再读值。
4)然后就是核心代码部分,判断是否大于“0”,如果小于零进行逆向减,然后将值存到一个寄存器中
这里就用到了RSB,后面加上判断标识LT(带符号数的小于)
很多小伙伴不太明白为什么最后用printf语句输出时必须要放到r1~r3中,后面我会专门写一篇给大家讲清楚。
那么让我们来看一下源代码和运行效果吧:
本期ARM汇编求绝对值就结束了,我们下期再见!
如有疑问或错误,欢迎大家评论区留言指出,谢谢支持!!
下期预告:ARM汇编中MOV和LDR的区别
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)