找回密码
 注册
关于网站域名变更的通知
查看: 377|回复: 2
打印 上一主题 下一主题

arm指令分类及其寻址方式

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-9-24 10:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
一. ARM指令长度及数据类型
6 n2 i7 I' z+ H) ^! H- mARM微处理器的指令长度可以是32位(ARM状态下), 也可以是16位(在Thumb状态下)8 J9 V& D9 {! }2 E9 q
ARM微处理器中支持字节(8位),半字(16位),字(32位)三种数据类型,字需要4字节对齐(地址低两位为0),半字需要2字节对齐(地址的最低位为0)
0 ~( J4 ^: a8 k* a程序的启动都是从ARM指令集开始, 所有的ARM指令集都可以是有条件执行的.
* [& ?, g5 k4 {2 g二. ARM汇编指令格式
9 T) z. s1 o8 b6 l! V. s# J5 B2 k* g+ B" V
{cond}: 指令执行的条件编码, 如EQ,NE
: a$ L2 D+ G  B; I<opcode>: 指令操作符编码, 如LDR, STR9 w7 J9 G# Y0 H' j. q
{S}: 决定指令的执行是否影响CPRS的值3 T' v* V8 r# M5 `. {- X; u0 _
<Rn>: 包含第一个源操作数的寄存器编码
  A/ ~2 e, q2 T6 ]4 ]& N<Rd>: 目标寄存器编码$ T6 V7 V/ Q( s' ?1 p" y; L/ n& p3 ?
<shifter_operand>: 第二个源操作数& F2 y! i7 E2 q% Z, H' b
ARM指令语法格式中,<>中的内容是必需的, 而{}中的内容是可选的
) s  H4 b& Z! [, i' i( q: J' w7 W( F 5 c6 ^2 n& W1 w) t% q, b
三. ARM指令的条件码域: t  V) u2 K6 e& l* ^
大多ARM指令都可以条件执行, 也就是根据CPSR中条件码的状态决定是否执行该指令.
/ g4 i- E" B$ N  j. ~! |+ b1 \( W. r# D只有在CPSR的条件码标志满足指定的条件时,带条件码的指令才可以执行,否则被忽略(相当于一条空操作NOP指令)
8 I5 N2 |0 R& v$ x4 I1 P每一条ARM指令编码中包含4位的条件码.位于指令编码的最高4位[31:28]8 V% t, D4 V+ A6 S
四. ARM指令的条件码域8 j6 j: Y4 U8 X3 M

) {' m# S% M( t& j0 a: n7 @五. ARM寻址方式5 s6 @8 @. p8 R1 Q0 l- s0 K% p' D' b
立即寻址: 操作数本身就是指令中给出.                                                                                                                  例如: ADD R0,R0,#1              R0<-R0+1                                                                                                                  ADD RO,R0,#0x3f        R0<-R0+0x3f       , l# b: E( @5 w& y7 {" \- s# p9 J- d5 q
寄存器寻址: 利用寄存器中的数值作为操作数.                                                                                                      例如: ADD R0,R1,R2    R0<-R1+R2- I9 w. C' B# J3 R) B
寄存器间接寻址: 以寄存器中的值作为操作数的地址, 而操作数存放在存储器中.                                          例如: ADD R0,R1,[R2]    R0<-R1+[R2]                                                                                                                LDR R0, [R1]  R0<-[R1]                                                                                                                                            STR R0,[R1]  [R1]<-R0
- K8 a" [- Q( J/ e; t& j基址变址寻址: 将寄存器的内容与指令中给出的地址偏移量相加, 从而得到一个操作数的有效地址            例如: LDR R0, [R1,#4]  R0<-[R1+4]                                                                                                                      LDR R0,[R1,#4]    R0<-[R1+4],R1<-R1+4                                                                                                                    LDR R0,[R1],#4  R0<-[R1],R1<-R1+4" H& T" d# z0 V7 `& j
多寄存器寻址: 一条指令可以完成多个寄存器值得传送.                                                                                      例如: LDMIA R0,{R1,R2,R3,R4} R1<-[R0],R2<-[R0+4],R3<-[R0+8], R4<-[R0+12]
( n5 Y. z! w" ]8 m$ F* A6 Y  x相对地址:基地址为程序计数器PC的当前值,偏移量为目的地址和现行地址之间差的基址变址寻址,将PC的值与偏移量相加之后的得到的操作数的有效地址.
* x- N% q9 R# c      例如:   BL NEXT$ L- z( L4 u# _/ Q% P% n8 O( t
              ...
1 E- M3 l3 P! V3 m4 M6 K, R              NEXT
3 x6 W; O  i* P) y: ]              ...4 N" _2 N" L9 g& X1 r; ?! j
              MOV PC,LR6 N' b2 H7 r2 X  }3 T5 N
   7.  堆栈寻址:( p, q( q9 e: A5 A; e
           递增堆栈: 向高地址方向生长9 K5 {6 J. k' ]
           递减堆栈: 向低地址方向生长6 O$ H" X/ d9 i0 w8 O
           满堆栈: 指针指向最后压入堆栈的有效数据项.
4 Y2 y* Y1 R: _           空堆栈: 指针指向下一个要放入数据的空位置.8 y$ p2 k5 }7 Y& I1 g; B
        例如: STMFD R13!,{R0,R4-R12,LR}  将寄存器列表中的寄存器(R0,R4~R12,LR)内容压入堆栈
/ r8 x3 }+ V7 p8 `* I( B" Y4 V              LDMFD R13!,{R0,R4-R12,PC}  将堆栈内容恢复到寄存器中(R0,R4~R12,PC)中.
( X3 _5 R5 [* O! T
, n1 J# t8 V! J' n/ ?- n
% [- s, N% I6 w8 T

该用户从未签到

2#
发表于 2021-9-24 11:10 | 只看该作者
大多ARM指令都可以条件执行, 也就是根据CPSR中条件码的状态决定是否执行该指令
  • TA的每日心情
    开心
    2022-12-27 15:07
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2021-9-24 15:51 | 只看该作者
    程序的启动都是从ARM指令集开始, 所有的ARM指令集都可以是有条件执行的! d4 V  h% X3 f, A2 p$ M
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-19 17:20 , Processed in 0.109375 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表