6. ARM_ARM指令寻址
概念
什么是寻址方式:
寻址方式就是CPU去寻找一个操作数的方式。
ARM指令寻址的种类:
ARM指令寻址有立即寻址、寄存器寻址、寄存器移位寻址、寄存器间接寻址、基址加变址寻址、等。
种类
1、立即寻址
立即寻址就是操作数直接包含在指令中,即:操作数是一个立即数。
如:"MOV R1,#1" 在这个指令里的1数值是一个立即数,它包含在32位的ARM指令中。
2、寄存器寻址
寄存器寻址就是操作数是寄存器,即:操作数是R0~R15
如:"MOV R1,R2" 在这个指令里的R2就是寄存器
3、寄存器移位寻址
寄存器移位寻址就是操作数后面有一个移位操作,操作数需要先进行移位再进行赋值
如:"MOV R1,R2,LSL #1"
4、寄存器间接寻址
寄存器间接寻址就是寄存器中存放的值是一个地址,从这个地址去取数值。
如:"STR R1,[R2]" ,在这个指令中R2寄存器中存放的数据代表一个地址,是将R1数据赋值给该地址空间中。
5、基址加变址寻址
5.1 概念
基址加变址寻址就是将寄存器的值改变某个值后,再取值。
如:"STR R1,[R2,R3]",在这个指令中R2叫做基址、R3叫做变址,R2+R3之后的数据是最终的地址。最终指令是将R1的数据存放到R2+R3这个地址空间处。
如:"STR R1,[R2,R3,LSL #1]",在这个指令中最终的地址是R2+(R3值<<1),将R1的数据存放到该地址中。
5.2 索引方式
基址加变址寻址的索引方式有前索引和后索引,前索引就是先加值再用地址,后索引就是先用地址再进行加值。
如:"STR R1,[R2,#8]",该指令就是前索引,将R1数据存放到R2+8指向的地址中,但是R2中的数据不会进行改变。
如:"STR R1,[R2],#8",该指令就是后索引,先将R1数据存放到R2指向的地址中,再将R2存放的地址数据+8,在后索引中,R2的数据发生了改变。
5.3 自动索引
自动索引是允许前索引改变地址值。
如:"STR R1,[R2,#8]!",该指令就是前索引的自动索引,将R1数据存放到R2+8指向的地址中,这时R2的值也发生改变,变为R2=R2+8