arm指令集和C语言,ARM指令集如何应用

ARM指令也称ARM汇编指令集,是用来操作及控制ARM处理器及其相关设备的32bit的汇编指令,相对于16bit的thumb指令集而言功能更加强大,包含指令与伪指令。现将常用指令归纳汇总如下:

一、指令、伪指令

指令:是机器码的助记符,经过汇编器编译为机器码后,可以由CPU执行。

伪指令:用来指导汇编器编译指令,是汇编器的产物,终不会生成机器码。

二、ARM指令的编写风格

汇编代码大写:在Windows中的IDE开发环境中一般都大写。

汇编代码小写:在Linux环境中,好遵循GNU风格,即指令一般用小写。

三、ARM汇编代码文件后缀的大小写问题

Windows环境:因为Windows不区分大小写,所以汇编文件后缀大写、小写编译过程没有区别,即test.S与test.s编译结果一致。

Linux环境:Linux环境是严格区分大小写的,test.S与test.s会被当成不同的文件来处理(处理过程也不一致)。后缀小写的test.s文件,在编译阶段不进行预处理操作,所以不能在这里面写预处理的语句(不能有宏定义等,不常用);后缀大写的test.S文件,会进行预处理、汇编等操作,所以我们可以在这里面加入预处理的命令(比较常用)。

四、ARM汇编指令的格式

ARM汇编指令的格式比较固定、简单,即是:“操作码目标寄存器,操作数1,操作数2,……操作数n”。

例如将十六进制数0xaf放到寄存器r0中,我们用汇编代码可以这样写“mov r0,#0xaf”。这里的“mov”就是操作码(指令),实现的功能是将“0xaf”这个数存放到寄存器中“r0”中,“r0”也即是目标寄存器,“#0xaf”也即是操作数。在这里,“#0xaf”表示立即数(立即寻址方式指令中给出的数称为立即数立即数,亦即是直接参与运算不需处理的数),立即数需要用“#”来标识。

五、ARM指令分类

ARM指令可以分为程序状态寄存器操作指令、寄存器装载与存储指令、算术与逻辑指令、移位指令、乘法指令、比较指令、分支指令、浮点数指令、伪指令。

1、程序状态寄存器操作指令

程序状态寄存器操作指令包含msr、mrs两个指令。

(1)msr实现将通用寄存器(r0-r15)的值复制到状态寄存器(cpsr及spsr)中,用于更改处理器的工作模式及状态。例如,

MSR CPSR, R0 ;复制 R0 到 CPSR 中

MSR SPSR, R0 ;复制 R0 到 SPSR 中

(2)mrs实现将状态寄存器(cpsr及spsr)的值复制到通用寄存器(r0-r15)中,用于读取处理器的工作模式及状态。例如,

MRS R0, CPSR ; 复制 CPSR 到 R0 中

MRS R0, SPSR ; 复制 SPSR 到 R0 中

2、寄存器装载与存储指令

常用寄存器装载与存储指令操作指令包含ldr、str、ldm、stm四个指令,其中ldm、stm可以实现多个数据的传输。

(1)ldr实现将所在内存地址的值装载到寄存器中。

ldr rd, [rba

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值