12.7 跳转与存储器访问指令

目录

跳转指令

@方式一

@方式二

@方式三

@程序返回

ARM指令的条件码

@比较指令

内存访问指令(一)

load(LD加载)/srore(ST存储)指令:访问(读写)内存

@写内存

@读内存

ARM指令的寻址方式

@立即寻址

@寄存器寻址

@寄存器移位寻址

@寄存器间接寻址

@基址加变址寻址

@基址加变址寻址的索引方式

@前索引

@后索引

@自动索引


跳转指令

实现程序的的跳转,本质就是修改了PC寄存器

@方式一

直接去修改pc寄存器的值(不建议使用,需要我们自己去计算)

MOV PC, #0x18

@方式二

B FUNC

不带返回的跳转指令,本质就是将pc寄存器的值修改成跳转标号下第一条指令的地址

@方式三

带返回的跳转指令,本质就是将pc寄存器的值修改成跳转标号下第一条指令的地址

BL FUNC

@程序返回

MOV PC, LR

ARM指令的条件码

不是指令,指令的后缀,通过添加后缀能够决定指令在什么条件下执行

@比较指令

CMP R1,R2

@CMP的本质就是一条减法指令(SUNS),只是没有将运算的结果存入寄存器

没有目标寄存器,结果放在CPSR中的n、z、c、v中

@== z=1

@!= z=0

@< c=0

@<= c=0或z=1

@> c=1且z=0

@>= c=1

条件码助记后缀可以放在B后,

如BEQ FUNC @if(EQ){B FUNC} 本质:if(z==1){B FUNC}

如BNE FUNC @if(EQ){B FUNC} 本质:if(z==0){B FUNC}

ARM指令集中大多数指令都可以带条件码后缀

内存访问指令(一)

load(LD加载)/srore(ST存储)指令:访问(读写)内存
@写内存

MOV R1, #0xFF000000

MOV R2, #0x40000000

STR R1,[R2]

将R1寄存器中的数据存储到R2的内存空间

@读内存

LDR R3,[R2]

将内存中R2指向的内存空间中的数据读取到R3寄存器

MOV R1, #0xFFFFFFFF

MOV R2, #0x40000000

STRB R1,[R2]写入最后一个字节

STRH R1,[R2]写入最后两个字节

LDR指令同样支持以上两个指令

ARM指令的寻址方式

寻址方式就是CPU去寻找一个操作数的方式

@立即寻址

MOV R1 , #1

ADD R1, R2, #1

@寄存器寻址

ADD R1, R2, R3

@寄存器移位寻址

MOV R1, R2, LSL #1

@寄存器间接寻址

STR R1, [R2]

@基址加变址寻址

MOV R1, #0xFFFFFFFF

MOV R2, #40000000

MOV R3, #4

STR R1, [R2,R3]

将R1寄存器中的数据写入到R1+R3指向的内存空间

STR R1, [R2, R3, LSL #1]

将R1寄存器中的数据写入到R2+(R3<<1)指向的内存空间

@基址加变址寻址的索引方式
@前索引

MOV R1, #0xFFFFFFFF

MOV R2, #40000000

STR R1, [R2,#8]

将R1寄存器中的数据写入到R2+8指向的内存空间

@后索引

MOV R1, #0xFFFFFFFF

MOV R2, #40000000

STR R1, [R2],#8

将R1寄存器中的数据写入到R2指向的内存空间,然后R2自增8

@自动索引

MOV R1, #0xFFFFFFFF

MOV R2, #40000000

STR R1, [R2,#8]!

将R1寄存器中的数据写入到R2+8指向的内存空间,然后R2自增8

以上寻址方式和索引方式同样适用于LDR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值