当前位置:文档之家› 嵌入式系统讲义3——指令分类与寻址方式

嵌入式系统讲义3——指令分类与寻址方式

TM

嵌入式系统原理
20
20
堆栈寻址
ARM微处理器指令的寻址方式

根据堆栈的生成方式,又可以分为递增堆栈( Ascending Stack)和递减堆栈(Decending Stack),当堆栈由低地址向高地址生成时, 称为递增堆栈,当堆栈由高地址向低地址生成 时,称为递减堆栈。
嵌入式系统原理
TM
21
指令的条件域表-1
ARM微处理器指令的条件域
条件码
0000 0001 0010 0011
后缀
EQ NE CS CC
标志
Z置位 Z清零 C置位 C清零 相等
含义
不相等 无符号数大于或等 于 无符号数小于
0100
0101 0110 0111
嵌入式系统原理
MI
PL VS VC
N置位
N清零 V置位 V清零
TM
嵌入式系统原理
18
18
相对寻址
ARM微处理器指令的寻址方式

与基址变址寻址方式相类似,相对寻址以程序计数器PC的当 前值为基地址,指令中的地址标号作为偏移量,将两者相加 之后得到操作数的有效地址。以下程序段完成子程序的调用 和返回,跳转指令BL采用了相对寻址方式: BL NEXT …… NEXT …… MOV PC,LR ;从子程序返回 ;跳转到子程序NEXT处执行
BLX
BX
嵌入式系统原理
带返回和状态切换的跳转指令
带状态切换的跳转指令
TM
3
3
ARM微处理器指令表-2
ARM微处理器指令的分类 助记符 CDP 指令功能描述 协处理器数据操作指令
CMN
CMP
比较反值指令
比较指令
EOR
LDC LDM LDR MCR
嵌入式系统原理
异或指令
存储器到协处理器的数据传输指令 加载多个寄存器指令 存储器到寄存器的数据传输指令 ARM寄存器到协处理器寄存器数据传输
/*R0←[R1]*/
/*[R1]←R0*/
R1,R1,[R2] ;将寄存器R1的值和R2指定的存储单元的内容交
0x40000000
0xAA

R2 0x40000000 在第一条指令中,以寄存器R2的值作为操作数的地址,在存储器中取得一 R0 0xAA 0x55 个操作数后与R1相加,结果存入寄存器R0中;
第二条指令将以R1的值为地址的存储器中的数据传送到R0中。 第三条指令将R0的值传送到以R1的值为地址的存储器中。
嵌入式系统原理
TM
LDR
R0,[R2]
16
16
基址变址寻址
ARM微处理器指令的寻址方式

基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令 中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式 常用于访问某基地址附近的地址单元。采用变址寻址方式的指令常见有以下 几种形式,如下所示: LDR R0,[R1,#0x0c] LDR R0,[R1,#4]! ;R0←[R1+4] ;R0←[R1+4]、R1←R1+4
嵌入式系统原理
TMΒιβλιοθήκη 1919堆栈寻址
ARM微处理器指令的寻址方式

堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个 称作堆栈指针的专用寄存器指示当前的操作 位置,堆栈指针总是指向栈顶。 当堆栈指针指向最后压入堆栈的数据时,称 为满堆栈(Full Stack),而当堆栈指针指向 下一个将要放入数据的空位置时,称为空堆 栈(Empty Stack)。
R0,R0,#0x3f R0 0xFF00 0x55 MOV R0,#0xFF000 ;将立即数0xFF000 装入R0 MOV R0,#0xFF00 在以上指令中,第二个源操作数即为立即数,要求以“#” 为前缀,对于以十六进制表示的立即数,还要求在“#”后 加上“0x”。
嵌入式系统原理
TM
ADD
21
堆栈寻址
ARM微处理器指令的寻址方式 高地址
递增堆栈 递减堆栈
堆栈压栈 SP栈顶
0x12345678 栈底
栈区
向上 增长
堆栈存 储区
向下 增长
栈区
栈底
栈顶SP
0x12345678
TM
低地址
嵌入式系统原理
堆栈压栈
22
22
堆栈寻址
ARM微处理器指令的寻址方式
堆栈指针指向最后压入的堆栈的有效数据项, 称为满堆栈;堆栈指针指向下一个待压入数据 的空位置,称为空堆栈。
嵌入式系统原理
MOV
; 然 后
R0,R2,LSL #3
15
TM
15
寄存器间接寻址
ARM微处理器指令的寻址方式
寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存
放在存储器中。例如以下指令: ADD R0,R1,[R2] /*R0←R1+[R2]*/
LDR
STR SWP
R0,[R2]
R0,[R1]
TM
负数
正数或零 溢出 未溢出
10
10
指令的条件域表-2
ARM微处理器指令的条件域 条件码 1001 1010 1011 1100 后缀 LS GE LT GT 标志 C清零Z置位 N等于V N不等于V Z清零且(N 等于V) Z置位或(N 不等于V) 忽略
TM
含义 无符号数小于或等 于 带符号数大于或等 于 带符号数小于 带符号数大于
嵌入式系统原理
TM
24
24
块拷贝寻址
ARM微处理器指令的寻址方式

多寄存器传送指令用于将一块数据从存储器 的某一个位置拷贝到另一个位置。如:
STMIA R0!,{R1-R7};将R1~R7的数据保存到存储器中; 存储指针R0在保存第一个值之后向上增长 STMIB R0!,{R1-R7};将R1~R7的数据保存到存储器中; 存储指针R0在保存第一个值之前向上增长
在第三条指令中,以寄存器R1的内容作为操作数的有效地址,从而取得操作 LDR R0,[R1,#0x0C] 数存入寄存器R0中,然后,R1的内容自增4个字节。



在第四条指令中,将寄存器R1的内容加上寄存器R2的内容形成操作数的有效 地址,从而取得操作数存入寄存器R0中。
TM
嵌入式系统原理
17
17
多寄存器寻址
压栈 SP栈顶 SP栈顶 0x12345678 0x12345678 SP栈顶 SP栈顶 压栈 0x12345678
满堆栈 栈底 栈底
空堆栈
嵌入式系统原理
TM
23
23
堆栈寻址
ARM微处理器指令的寻址方式

这样就有四种类型的堆栈工作方式



满递增堆栈:堆栈指针指向最后压入的数据,且由低地 址向高地址生成。指令如LDMFA、STMFA等; 满递减堆栈:堆栈指针指向最后压入的数据,且由高地 址向低地址生成。指令如LDMFD、STMFD等; 空递增堆栈:堆栈指针指向下一个将要放入数据的空位 置,且由低地址向高地址生成。指令如LDMEA、STMEA等 ; 空递减堆栈:堆栈指针指向下一个将要放入数据的空位 置,且由高地址向低地址生成指令如LDMED、STMED等。
/*R0←R0+1*/ 从代码中获得数据 /*R0←R0+0x3f*/
14
14

寻址方式分类——寄存器移位寻址
ARM微处理器指令的寻址方式 寄存器移位寻址是ARM指令集特有的寻址方式。当第2个 操作数是寄存器移位方式时,第2个寄存器操作数在与第1个 操作数结合之前,选择进行移位操作。寄存器移位寻址指令 举例如下: R0,R2,LSL #3 ;R2的值左移3位,结果 ;放入R0,即是R0=R2×8 逻辑左移3位 ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位, R2 0x01 0x08 和R1相 “与”操作,结果放入R1 R0 0x08 0x55 MOV
TM
4
4
ARM微处理器指令表-3
ARM微处理器指令的分类
助记符
MLA MOV MRC MRS MSR MUL MLA MVN
嵌入式系统原理
指令功能描述
乘加运算指令 数据传送指令 协处理器寄存器到ARM寄存器数据传输 传送CPSR或SPSR的内容到通用寄存器 传送通用寄存器到CPSR或SPSR的指令 32位乘法指令 32位乘加指令 数据取反传送指令

ARM微处理器的指令集可以分为六大类 :

跳转指令 数据处理指令 程序状态寄存器(PSR)处理指令 加载/存储指令 协处理器指令和异常产生指令 异常中断产生指令
TM
嵌入式系统原理
2
2
ARM微处理器指令表-1
ARM微处理器指令的分类 助记符 ADC ADD AND B BIC BL 指令功能描述 带进位加法指令 加法指令 逻辑与指令 跳转指令 位清零指令 带返回的跳转指令
LDR R0,[R1] ,#4
LDR R0,[R1,R2]

;R0←[R1]、R1←R1+4
0x4000000C
;R0←[R1+R2]
0xAA
将R3+0x0C作 在第一条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取 R1 0x40000000 得操作数存入寄存器R0中。 为地址装载数 R0 0xAA 0x55 在第二条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取 据 得操作数存入寄存器R0中,然后,R1的内容自增4个字节。
1101 1110
嵌入式系统原理
LE AL
带符号数小于或等 于 无条件执行
11
11
ARM指令的寻址方式
相关主题