ARM常用汇编指令_gcc arm 汇编 定义4字节空间

9.“.equ”

.equ symbol, expression: 把某一个符号(symbol)定义成某一个值(expression).该指令并不分配空间,相当于c语言中的#define。例如

.equ aaa,0x20000000

10.“.macro .endm”

.macro: 定义一段宏代码,.macro表示代码的开始,.endm表示代码的结束,.exitm跳出宏, 示例如下:

.macro SHIFTLEFT a, b.if \b < 0

mov \a, \a, ASR #-\b

.exitm

.endif

mov \a, \a, LSL #\b

.endm

11.“.req”

name .req register name: 为寄存器定义一个别名

12.“.code”

.code [16|32]: 指定指令代码产生的长度, 16表示Thumb指令, 32表示ARM指令

13.“.ltorg”

.ltorg: 表示当前往下的定义在归于当前段,并为之分配空间

二.带下滑线的

1._start

汇编程序的缺省入口,但是可以更改,想要更改其他标志,到相应的链接脚本中去用ENTRY指明其他入口标志。标号可以直接认为是地址。

三.不带点的

1.mov–数据传送指令

它的传送指令只能是把一个寄存器的值(要能用立即数表示)赋给另一个寄存器,或者将一个常量赋给寄存器,将后边的量赋给前边的量,比如

mov r1,r2

mov r1,#4096

这个立即数是小于0xff(65535)的数,如果大于65535,则用ldr指令赋值

2.b、bl–相对跳转指令

b只是跳转,而bl除跳转外还将返回地址(bl的下一条指令的地址)保存到lr寄存器中。其中跳转范围是当前指令的前后32M。

3.ldr、str–内存访问指令

ldr指令即可能是大范围的地址读取伪指令,也可能是内存访问指令,当它的第二个参数之前有“=”时,表示伪指令,否则是内存访问指令,比如

ldr r0, =0x53000000//r0=0x53000000

str r1, [r2, #4]         // 将r1的数据保存到地址为r2+4的内存单元中

str r1, [r2]                // 将r1的数据保存到地址为r2的内存单元中

str r1, [r2], #4         // 将r1的数据保存到地址为r2的内存单元中,然后r2=r2+4

ldr r1, [r2,#4]         // 将地址为r2+4的内存单元数据读取到r1中

ldr r1, [r2]             // 将地址为r2的内存单元数据读取到r1中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值