第3章ARM指令系统



《第3章ARM指令系统》由会员分享,可在线阅读,更多相关《第3章ARM指令系统(30页珍藏版)》请在文档大全上搜索。
1、 本章以流行本章以流行ARM处理器为例介绍处理器为例介绍嵌入式微处理器的指令系统嵌入式微处理器的指令系统 ,主要介,主要介绍绍ARM微处理器的寻址方式以及微处理器的寻址方式以及ARM指令集、指令集、Thumb和和Thumb-2指令集。指令集。ARMARM指令集特点:指令集特点: ARM使用标准的、固定长度的使用标准的、固定长度的32位指令格式位指令格式 所有所有ARM指令都使用指令都使用4位的条件编码来决定指位的条件编码来决定指令是否执行,以解决指令执行的条件判断令是否执行,以解决指令执行的条件判断 ARM微处理器的指令集是加载微处理器的指令集是加载/存储型的,即存储型的,即指令集仅能处理寄存
2、器中的数据指令集仅能处理寄存器中的数据 返回指令分类(指令分类(6 6类)类)ARMARM微处理器的指令集可以分为微处理器的指令集可以分为分支指令分支指令、数数据处理指令、据处理指令、程序状态寄存器(程序状态寄存器(CPSRCPSR)处理指)处理指令令、加载加载/ /存储指令、存储指令、协处理器指令协处理器指令和和异常产异常产生指令。生指令。 当处理器工作在当处理器工作在ARM状态时,几乎所有的指令状态时,几乎所有的指令均根据均根据CPSR中条件码的状态和指令的条件域中条件码的状态和指令的条件域有条件的执行。有条件的执行。 当指令的执行条件满足时,指令被执行,否则当指令的执行条件满足时,指令被
3、执行,否则指令被忽略。指令被忽略。 每一条每一条ARM指令包含指令包含4位的条件码,位于指令位的条件码,位于指令的最高的最高4位位31:28。 详见下表详见下表条件码条件码助记符后缀助记符后缀标标 志志含含 义义0000EQZ置位置位相等相等0001NEZ清零清零不相等不相等0010CSC置位置位无符号数大于或等于无符号数大于或等于0011CCC清零清零无符号数小于无符号数小于0100MIN置位置位负数负数0101PLN清零清零正数或零正数或零0110VSV置位置位溢出溢出0111VCV清零清零未溢出未溢出1000HIC置位置位Z清零清零无符号数大于无符号数大于1001LSC清零清零Z置位置位
4、无符号数小于或等于无符号数小于或等于1010GEN等于等于V带符号数大于或等于带符号数大于或等于1011LTN不等于不等于V带符号数小于带符号数小于1100GTZ清零且(清零且(N等于等于V)带符号数大于带符号数大于1101LEZ置位或(置位或(N不等于不等于V)带符号数小于或等于带符号数小于或等于1110AL忽略忽略无条件执行无条件执行返回“# #”立即数符号立即数符号 “#”符号表示立即数,其中后可以是二进制数,也可以是十进制数符号表示立即数,其中后可以是二进制数,也可以是十进制数或十六进制数或十六进制数“0 x”十六进制符号十六进制符号 “0 x”后面的数据(每位可以是后面的数据(每位可
5、以是0-9,A-F)表示十六进制)表示十六进制数,如数,如0 xFFFF“!”更新基址寄存器符号更新基址寄存器符号 表示指令在完成操作后最后的地址应该写入基址寄存器表示指令在完成操作后最后的地址应该写入基址寄存器 “-”指示寄存器列表范围符号指示寄存器列表范围符号 表示多个连续寄存器表示多个连续寄存器 ,如,如R0-R7表示寄存器共表示寄存器共8个寄存器:个寄存器:R0,R1,R2,R3,R4,R5,R6和和R7。即含义。即含义“从从到到” 定义定义 所谓寻址方式就是处理器根据指令中给出的地所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。址信息来寻找物理地址的方式。寻址方式
6、种类寻址方式种类 目前目前ARMARM指令系统支持如下指令系统支持如下7 7种常见的寻址方式。种常见的寻址方式。 立即寻址,立即寻址,寄存器寻址,寄存器寻址,寄存器间接寻址寄存器间接寻址 基址加变址寻址,基址加变址寻址,相对寻址,相对寻址,堆栈寻址堆栈寻址 块拷贝块拷贝( (多寄存器)寻址多寄存器)寻址返回 立即寻址立即寻址也叫立即数寻址,操作数本身就在指令也叫立即数寻址,操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数。作数被称为立即数。 例如:例如:MOV R0,#0 x10FF66ED ADC R0,R0,#100
7、0 立即数立即数注意立即数前面的注意立即数前面的“”含义:含义:R0R01000+C返回寄存器寻址寄存器寻址是利用寄存器中的数值作为操作数是利用寄存器中的数值作为操作数寻址的一种方式,此方式执行效率较高,经常寻址的一种方式,此方式执行效率较高,经常被各种处理器采用。被各种处理器采用。 例如:例如: ADD R0,R1,R2含义: R0R1R2寄存器间接寻址寄存器间接寻址是以寄存器中的值作为操作数是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中,用于间的地址,而操作数本身存放在存储器中,用于间接接寻址的寄存器必须用接接寻址的寄存器必须用 括起来。括起来。 例如:例如:ADD R0,R
8、1,R2 LDR R0,R1含义:含义:R0R1R2含义:含义:R0R1基址加变址寻址基址加变址寻址是将寄存器(该寄存器一般是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。移量相加,从而得到一个操作数的有效地址。例如:例如:LDR R0,R1,4 LDR R0,R1,4! LDR R0,R1 ,4 变址寻址方式常用于访问某基地址变址寻址方式常用于访问某基地址附近的地址单元。附近的地址单元。R0R14R0R14、R1R14R0R1、R1R14相对寻址相对寻址以程序计数器以程序计数器PC的当前值为基
9、地址,的当前值为基地址,指令中的地址标号作为偏移量,将两者指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。相加之后得到操作数的有效地址。例如:例如: BLSubroutine_A ;跳转到子程序;跳转到子程序Subroutine_A处执行处执行 Subroutine_A MOVPC,LR;从子程序返回;从子程序返回0 x2100000 偏移量为0 x0100 PC0 x2100100 PC执行执行堆栈堆栈是一种数据结构,按先进后出(是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用堆栈指针专)的方式工作,使用堆栈指针专用寄存器指示当前的操
10、作位置,堆栈指针总是指用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。向栈顶。堆栈的生成方式堆栈的生成方式 : 满递增堆栈 满递减堆栈 空递增堆栈 空递减堆栈 当堆栈指针指向最后压入堆栈的数当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(据时,称为满堆栈(Full Stack) 当堆栈由低地址向高地址当堆栈由低地址向高地址生成时,称为递增堆栈生成时,称为递增堆栈 当堆栈由高地址向低地址当堆栈由高地址向低地址生成时,称为递减堆栈生成时,称为递减堆栈 当堆栈指针指向下一个将要放入数据的当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(空位置时,称为空堆栈(Empty Stack) 块拷贝寻