ARM的寻址方式

ARM的寻址方式好像没有官方的定论,网间传闻的9种寻址方式分别是:

1、立即寻址; 2、寄存器直接寻址; 3、寄存器间接寻址; 4、寄存器偏移寻址; 5、寄存器基址变址寻址; 6、批量(多)寄存器寻址; 7、相对寻址; 8、堆栈寻址; 9、块拷贝寻址。

 

对于这种方式,我并不赞同。首先 所谓 “多寄存器寻址” 和 “块拷贝寻址”,看不出有什么区别呀!

我提出以下几种归类方式:

1、立即数寻址; 

2、寄存器直接寻址;

    这里的直接寻址有两种情况:

    一是,寄存器R 中的数据可以直接使用;

    另一种情况是,寄存器R 中的数据要经过位移,再使用,也就是“九种寻址方式” 中的 “寄存器偏移寻址”;

3、寄存器间接寻址;

     这里也分两种:

      一是,直接使用寄存器R 所指地址进行数据的访问;

      另一种情况是,寄存器R 所指地址经过加、减运算得到新的地址后,再访问新地址的数据;也就是 “九种寻址方式” 中的 “寄存器基址变址寻址”。

4、多寄存器寻址;

     这也是分两种情况:(这里的多寄存器指的是 多个寄存器与内存之间的数据交换,内存到内存的大量数据传输一般是由内存控制器处理或者分成多个寻址动作处理)

     一是,针对堆栈的批量数据操作(使用记号:FA、FD、EA、ED);

     二是,针对非堆栈的一般内存(使用记号:IA、IB、DA、DB);

      但是在实际使用的时候,这种区别已经没有了,统一都使用了一种记号(IA、IB、DA、DB)。

5、相对寻址;

     这种寻址方式,就是汇编程序中的标号跳转,如:  BL   c   ;c 是main函数的入口地址。

 

特别说明:

1、本文更适用于 ARM9 的机器,其他机器能分出什么类,我就不知道了。 

2、网上的这种分类挺多,但是官方只给了汇编,并没有给出寻址方式的具体分类(或者说我没有找到  #_# !!),兼听则明吧。

3、ARM9 好像没有 “直接寻址”,如: MOV  R0,[1000]    ;直接从地址 1000 取数据。

4、如有错误之处,请联系邮箱 [email protected] 欢迎一起讨论!

你可能感兴趣的:(ARM汇编)