常用的arm汇编指令(3) -学无止尽,积土成山,积水成渊
1. NEGS R3, R2; 求补指令 带进位加法指令 ADC(Addition Carry); Bpl是跳转指令,其中pl代表正号+,Bpl也就是当结果为正时,跳转; ORR(Logical OR)为逻辑或操作指令
2. SMULxy [condition] dest, op1, op2. SMULxy 指令使用有符号 16 位操作数 op1 与 op2 执行乘法。乘法的结果写入 dest。condition 必须是有效值;否则将指令当作 NOP。
3. 逆向减法指令:RSB R0,R1,R2; R0 = R2 – R1 , ORR―――――逻辑"或"操作指令, eor是逻辑异或指令
4. BIC(位清除)指令对 Rn 中的值 和 Operand2 值的反码按位进行逻辑“与”运算。
5.ADRL 伪指令:将相对于程序或相对于寄存器的地址载入寄存器中。BCC branch on carry clear进位标志被清除时转移。
6.BIC(位清除)指令对 Rn 中的值 和 Operand2 值的反码按位进行逻辑“与”运算。
7.BLT Branch if Less Than; CBZ 比较,如果结果为0 就转移。
8.SBC带进位减法指令,即除了加两个数以外,还要把CPSR的C值也要带进来,类似ADC
9.atpcs-ARM-THUMB procedure call standard(ARM-Thumb过程调用标准)的简称,规定了一些子程序间调用的基本规则,哪寄存器的使用规则,堆栈的使用规则和参数的传递规则等。
1)寄存器的使用规则子程序之间通过寄存器r0~r3来传递参数,当参数个数多于4个时,使用堆栈来传递参数。此时r0~r3可记作A1~A4。在子程序中,使用寄存器r4~r11保存局部变量。因此当进行子程序调用时要注意对这些寄存器的保存和恢复。此时r4~r11可记作V1~V8。寄存器r12用于保存堆栈指针SP,当子程序返回时使用该寄存器出栈,记作ip。寄存器r13用作堆栈指针,记作SP。寄存器r14称为链接寄存器,记作lr。该寄存器用于保存子程序的返回地址。寄存器r15称为程序计数器,记作PC。
2)堆栈的使用规则
atpcs规定堆栈采用满递减类型(fd,Full Descending),即堆栈通过减小存储器地址而向下增长,堆栈指针指向内含有效数据项的最低地址。
3)参数的传递规则
整数参数的前4个使用r0~r3传递,其他参数使用堆栈传递;浮点参数使用编号最小且能够满足需要的一组连续的FP寄存器传递参数。子程序的返回结果为一个32位整数时,通过r0返回;返回结果为一个64位整数时,通过r0和r1返回;依此类推。结果为浮点数时,通过浮点运算部件的寄存器F0、D0或者S0返回。
10.ROR OPRD ,m :把由OPRD指定的寄存器或存储器操作数循环右移m所指定的次数,每右移一次,把操作数的最低位同时移入CF和操作数的最高位汇编指令 ror和rol 用高级语言(如C)该如何描述:
ror eax,cl ==> eax=(eax>>cl)+(eax<<(32-cl));rol eax,cl ==> eax=(eax<<cl)+(eax>>(32-cl));
头文件STDLIB.H ;unsigned long __cdecl _lrotl(unsigned long, int);循环左移
unsigned long __cdecl _lrotr(unsigned long, int);循环右移
10.CBZ 比较(Compare),如果结果为零(Zero)就转移(只能跳到后面的指令)
TST : 测试指令用于将一个寄存器的值和一个算术值做比较。条件标志位根据两个操作数做“逻辑与”后的结果设置。
BCC 是指当CPSR寄存器条件标志位为0时跳转。 BIC(位清除)指令对 Rn 中的值 和 Operand2 值的反码按位进行逻辑“与”运算。
参考学习:ARM处理器汇编
常用的arm汇编指令(3) -学无止尽,积土成山,积水成渊相关推荐
- 常用的ARM汇编指令总结
第一次写博客,请各路大神多多关照. 本人从事软件开发相关的工作,平时主要用c语言撸代码,前段时间因工作需要,接触到了ARM架构下的汇编指令,之前学过51单片机的汇编指令,早已经还给老师了,且ARM汇编 ...
- ARM 汇编指令 MOV32用法
前言 移植基于ARM平台的RTOS时,需要掌握一些基本的汇编指令,只有熟悉了这些ARM 的汇编指令,才能真正的掌握RTOS的移植方法 MOV32 指令,字面意思是 MOVE 一个 32位 值的意思,具 ...
- arm汇编指令详细整理及实例详解
目录 一.简介 二.ARM 汇编指令说明 2.1 32位数据操作指令 2.2 32位存储器数据传送指令 2.3 32位转移指令 2.4 其它32位指令 三.实例讲解 3.1 MRS 3.2 MSR 3 ...
- 嵌入式工程师到底要不要学习ARM汇编指令?arm学习文章汇总
嵌入式工程师到底要不要学习ARM汇编指令? 网上搜索这个问题,答案很多,大部分的建议是不要学汇编,只要学C语言. 而一口君作为一个十几年经验的驱动工程师,个人认为,汇编语言还是需要掌握的,想要搞精.搞 ...
- ARM汇编指令调试方法
学习ARM汇编时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在 ...
- ida pro 反汇编 Android so 库后修改 arm 汇编指令的方法总结
1 前言 最近博主在学习Android逆向的时候,参照吾爱破解论坛的<教我兄弟学Android逆向系列课程>学习的时候,学到第8章<教我兄弟学Android逆向08 IDA爆破签名验 ...
- arm汇编指令——分析问题的利器
文章目录 arm汇编指令为什么重要 1. 主导问题 2. arm汇编指令分类介绍 通用寄存器 状态寄存器 数据转移指令 寻址格式 运算指令 比较指令 跳转指令 3. 反汇编接口 4. 反汇编分析举例 ...
- ARM汇编指令学习---基于启动文件startup.S分析
本文主要是基于启动文件startup.s对ARM汇编指令进行学习分析. 以 . 开头一般是伪汇编/操作指令,形如: .section伪操作来定义一个段,形如: .section .testsectio ...
- 1.15.ARM汇编指令3之逻辑指令
ARM汇编指令之逻辑指令:and & orr & eor & bic * and 逻辑与操作指令,将operand2的值与寄存器Rn的值按位逻辑与操作,结果保存到Rd中. 指令 ...
最新文章
- Savitzky-Golay 滤波器详解及C/matlab语言程序设计
- vue项目运行启动方法(从github上下载了一个前端项目进行运行)
- 暑期作息时间表模板_人民日报给孩子的暑假作息时间表,转给家长!
- Mongodb副本集配置
- ubuntu gedit出错:Failed to connect to the session manager
- 【转】android Notification 的使用
- 盲人如何学计算机编程,盲人程序员是如何编程的?
- java调用nodejs程序,从java里面调用node.js脚本
- 技术干货丨隐私保护下的迁移算法
- Python+OpenCV:Hough圆检测(Hough Circle Transform)
- C++ Web编程实战
- 最新版gg服务器框架安装器,GG服务框架安装器
- 4大领域、33篇课题成果,2021阿里研究生态报告集来了
- java mxs mxm_mxm格式在3DMax中具体怎么用(步骤)?
- Java遍历包中所有类包括jar包(完整转载)
- spring事务管理配置
- Windows中Nginx下载、安装、配置
- 例行性工作排程 (crontab)
- 特征选择对于机器学习重要性
- ublox center获取RTK卫星数据
热门文章
- wxpython制作excel表格_怎么做一个精美的excel表格
- LOGO创意-IT行业-随记
- 【历史上的今天】9 月 17 日:世界上的第一张火车票;GamerDNA 创始人出生;中国开设第一个网上多媒体讲座
- OFDM载波间隔_5G NR的空口技术。为什么子载波间隔越大,符号长度越小?
- 删除+mysql+用户密码_误删除mysql中的所用用户,如何重新设置root账号和密码
- 阿里云服务器的windows和linux系统怎么选
- 企业ERP管理系统原型
- Modelsim仿真流程及相关命令
- 传奇如何一台服务器配置多个版本微端更新
- 如何有效的招聘技术人员