EDA365电子论坛网

标题: ARM 指令的寻址方式 [打印本页]

作者: geronimo123    时间: 2021-7-29 15:33
标题: ARM 指令的寻址方式
1、立即寻址操作数在指令中直接给出

ADD R0,R0,#1;R0←R0+1
) K) K' ?" p0 x% |5 i& W% zADD R0,R0,#0x3f;R0←R0+0x3f


/ I  s6 j5 P; ?' Z

2、寄存器寻址操作数在寄存器

ADD R0,R1,R2;R0←R1+R2

3、寄存器间接寻址 操作数的地址在寄存器

ADD R0,R1,[R2];R0←R1+[R2]/ p, M, i' z# C5 {
LDR R0,[R1];R0←[R1]$ Q, V" H' I+ C) S
STR R0,[R1];[R1]←R0


- K+ [$ n/ {& f9 N, {2 H

4、基址变址寻址操作数地址=基址寄存器+指令中给出的地址偏移

LDR R0,[R1,#4];R0←[R1+4]! ?( V' Y9 y6 C! p4 U: ~$ p: V/ V
LDR R0,[R1,#4]! ;R0←[R1+4]、R1←R1+41 J1 b- s; y$ Z- {% y0 {1 l
LDR R0,[R1],#4;R0←[R1]、R1←R1+4
: T, L8 p, T: g# g4 G$ A- jLDR R0,[R1,R2];R0←[R1+R2]


" F' X; O- Q; D( E& q) R1 b

5、多寄存器寻址类似寄存器寻址,此处是多个寄存器而已

LDMIA R0,{R1,R2,R3,R4};R1←[R0]
# k8 U; R+ I/ g1 S8 u;R2←[R0+4]' o  q# z* }! L! u
;R3←[R0+8]( ~6 Y5 a' q  u9 i6 i/ o) o
;R4←[R0+12]

: o! ?8 e: r9 i/ D

6、相对寻址目标地址= pc当前值+指令给出的标号偏移地址

BL NEXT;跳转到子程序NEXT处执行
; n3 _9 u( j( ]% P; o% s......
+ g% Q. y  }9 ^! k. c# wNEXT
5 w, C, l, q, H# E  Q/ Y......
! }0 k1 a1 @5 C, A, I# ?/ AMOV PC,LR;从子程序返回

' v$ a6 j! P4 F0 q5 u0 N! r

7、堆栈寻址. r" r  s" @2 C8 s# U
ARM微处理器支持这四种类型的堆栈工作方式。

-满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。
3 C7 g6 K% b% [; t7 z( [$ r-满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生成。; P1 S3 w3 ], z& H! ^; V8 v
-空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。! Z* E4 o1 E$ }" w
-空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。
. m! E5 `: L5 b0 W" R: i6 _
作者: 蔷薇123    时间: 2021-7-29 16:41
立即寻址、寄存器寻址
作者: modengxian111    时间: 2021-7-29 17:28
ARM指令的寻址方式




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2