[工学]4嵌入式微处理器arm_2

上传人:油条 文档编号:49627827 上传时间:2018-07-31 格式:PPT 页数:89 大小:1.29MB
返回 下载 相关 举报
[工学]4嵌入式微处理器arm_2_第1页
第1页 / 共89页
[工学]4嵌入式微处理器arm_2_第2页
第2页 / 共89页
[工学]4嵌入式微处理器arm_2_第3页
第3页 / 共89页
[工学]4嵌入式微处理器arm_2_第4页
第4页 / 共89页
[工学]4嵌入式微处理器arm_2_第5页
第5页 / 共89页
点击查看更多>>
资源描述

《[工学]4嵌入式微处理器arm_2》由会员分享,可在线阅读,更多相关《[工学]4嵌入式微处理器arm_2(89页珍藏版)》请在金锄头文库上搜索。

1、1 13 32 25 54 4ARM嵌入式微处理器概述ARM体系结构概览ARM程序设计基础ARM编程模型ARM 指令集6 6嵌入式微处理器相关基本知识15.1 ARM微处理器的指令集概述 5.2 ARM指令的寻址方式 5.3 ARM指令集 5.4 Thumb指令及应用25.1 ARM微处理器的指令集概述 5.1.1 ARM微处理器的指令分类nLoad-store 结构u在通用寄存器中操作uload/store 从存储器中读某个值,操作完后再将其放回存储器中n指令分类u数据处理指令 使用和改变寄存器的值u数据传送指令 把存储器的值拷贝到寄存器中 (load) or 把寄存器 中的值拷贝到存储器中

2、(store)u控制流指令 分支分支和链接, 保存返回的地址,以恢复最先的次序u程序状态寄存器(PSR)处理指令u协处理器指令u异常产生指令3助记符指令功能描述ADC带进位加法指令ADD加法指令AND逻辑与指令B跳转指令BIC位清零指令BL带返回的跳转指令BLX带返回和状态切换的跳转指令BX带状态切换的跳转指令CDP协处理器数据操作指令CMN比较反值指令CMP比较指令EOR异或指令LDC存储器到协处理器的数据传输指令LDM加载多个寄存器指令LDR存储器到寄存器的数据传输指令MCR从ARM寄存器到协处理器寄存器的数据传输指令MOV数据传送指令4MRC从协处理器寄存器到ARM寄存器的数据传输指令M

3、RS传送CPSR或SPSR的内容到通用寄存器指令MSR传送通用寄存器到CPSR或SPSR的指令MUL32位乘法指令MLA32位乘加指令MVN数据取反传送指令ORR逻辑或指令RSB逆向减法指令RSC带借位的逆向减法指令SBC带借位减法指令STC协处理器寄存器写入存储器指令STM批量内存字写入指令STR寄存器到存储器的数据传输指令SUB减法指令SWI软件中断指令SWP交换指令TEQ相等测试指令TST位测试指令 表中指令为基本ARM指令,不包括派生的ARM指令 55.1.2 指令的条件域n所有的ARM指令都可以条件执执行n指令的执执行与否取决于CPSR寄存器的N, Z, C and V标标志位n所有

4、的Thumb指令都可以解压压成全部条件指令n当处理器工作在ARM状态时,几乎所有的指令均根据CPSR中条件码的状态和指令 的条件域有条件的执行。n每一条ARM指令包含4位的条件码,位于指令的最高4位31:28。条件码共有16种 ,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指 令同时使用。例如,跳转指令B可以加上后缀EQ变为BEQ表示“相等则跳转”,即 当CPSR中的Z标志置位时发生跳转。n在16种条件标志码中,只有15种可以使用。 31 28 0 Cond 6指令的条件码条件码助记符后缀标 志含 义0000EQZ置位相等0001NEZ清零不相等0010CSC置位无符号数

5、大于或等于0011CCC清零无符号数小于0100MIN置位负数0101PLN清零正数或零0110VSV置位溢出0111VCV清零未溢出1000HIC置位Z清零无符号数大于1001LSC清零Z置位无符号数小于或等于1010GEN等于V带符号数大于或等于1011LTN不等于V带符号数小于1100GTZ清零且(N等于V)带符号数大于1101LEZ置位或(N不等于V)带符号数小于或等于1110AL忽略无条件执行指令的条件码 7条件执行n条件执行避免使用分支指令nExampleCMP r0, #5; BEQ BYPASS; if (r0!=5) ADD r1, r1, r0; r1:=r1+r0-r2

6、SUB r1, r1, r2; BYPASS:.CMP r0, #5; ADDNE r1, r1, r0; SUBNE r1, r1, r2; BYPASS: .使用条件执行Note: add 2 letter condition after the 3-letter opcode; if (a=b) CMP r0, r1 CMPEQ r2, r3 ADDEQ r4, r4, #18C代码:If(a b)a+;Elseb+;对应的汇编代码:CMPR0,R1 ;R0与R1比较ADDHI R0,R0,#1 ;若R0R1,则R0=R0+1ADDLS R1,R1,#1 ;若R01,则R1=R1+1示例

7、:95.1.3 指令格式n指令长度n指令集可以是以下任一种n32 bits 长 (ARM状态)n16 bits 长 (Thumb 状态)nARM 支持3种数据类型n字节 (8-bit)n半字 (16-bit)n字 (32-bit)n字必须被排成4个字节边界对齐,半字必须被排列成2个字节边界对 齐 10FARM指令使用的基本格式如下:opcodecond S Rd,Rn,operand2 指令格式中符号说明Fopcode操作码;指令助记符,如LDR、STR等。Fcond可选的条件码;执行条件,如EQ、NE等。FS可选后缀;若指定“S”,则根据指令执行结果更新CPSR中的 条件码。FRd目标寄存器

8、。FRn存放第1操作数的寄存器。Foperand2第2个操作数。 Note: SUBS PC,R14_fiq ,#4 ;若寄存器为PC,则含S指令, 更新PC同时CPSR=SPSR11ARM指令集编码*125.2 ARM指令的寻址方式所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地 址的方式。5.2.1 立即寻址 立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在 指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即 数,对应的寻址方式也就叫做立即寻址。 例如以下指令: ADDR0,R0,1;R0R01 ADDR0,R0,0x3f;R0R00x3f第二个源操作数

9、即为立即数,要求以“”为前缀,对于以十六进 制表示的立即数,还要求在“”后加上“0x”或“ r1 points to TABLE1 ADR r2, TABLE2; r2 points to TABLE2 LOOP:LDR r0, r1 STR r0, r2 ADD r1, r1, #4 ADD r2, r2, #4 . TABLE1:. TABLE2:.COPY:ADR r1, TABLE1; r1 points to TABLE1 ADR r2, TABLE2; r2 points to TABLE2 LOOP:LDR r0, r1, #4 STR r0, r2, #4 . TABLE1:.

10、 TABLE2:.装载地址伪指令185.2.5 多寄存器寻址采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址 方式可以用一条指令完成传送最多16个通用寄存器的值。 LDMIA R0,R1,R2,R3,R4;R1R0 ;R2R04 ;R3R08 ;R4R012该指令的后缀IA表示在每次执行完加载/存储操作后,R0按字长度增 加,因此,指令可将连续存储单元的值传送到R1R4。 0x40000000R1R20x?0x010x400000000x?R3R40x?R60x?0x020x030x040x400000040x400000080x4000000C存储器LDMIA R1!,R2

11、-R4,R6 0x010x020x030x040x40000010195.2.6 相对寻址与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址, 指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式:BLNEXT;跳转到子程序NEXT处执行 NEXT MOVPC,LR ;从子程序返回 205.2.7 堆栈寻址堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工 作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总 是指向栈顶。满堆栈(Full Stack):

12、当堆栈指针指向最后压入堆栈的数据时; 空堆栈(Empty Stack):当堆栈指针指向下一个将要放入数据的空位置时;根据堆栈的生成方式,又可以分为递增堆栈和递减堆栈, 递增堆栈(Ascending Stack) :当堆栈由低地址向高地址生成时; 递减堆栈(Decending Stack) :当堆栈由高地址向低地址生成时;21ARM微处理器支持这四种类型的堆栈工作方式,即:满递增堆栈FA:堆栈指针指向最后压入的数据,且由低地址向高地址生成 。满递减堆栈FD:堆栈指针指向最后压入的数据,且由高地址向低地址生成 。空递增堆栈EA:堆栈指针指向下一个将要放入数据的空位置,且由低地址向 高地址生成。空递

13、减堆栈ED:堆栈指针指向下一个将要放入数据的空位置,且由高地址向 低地址生成。 8086堆栈Ucosii移植:#define OS_STK_GROWTH 1 /* 堆栈由高地址向低 地址增长 nLDMnSTM22栈操作图示编号小的寄存器 对应存储器低地 址235.3.1 数据处理指令 n数据处理指令的类别u算术操作u按位逻辑操作u寄存器移位操作u比较操作n操作数: 32-bits 宽; 有3种指定操作数的方式u来自寄存器u第二操作数可以是常数(立即数)u移位寄存器操作数n结果: 32-bits 宽, 放在寄存器中u长乘法产生64位结果5.3 ARM指令集24 ARM数据处理指令指令编码指令执行

14、的条件码I用于区别立即数(I 为1)和寄存器移位 (I为0)opcode数据处理指 令操作码第二操作数Rd目标寄存器Rn第一操作数寄存器S设置条件码,与指令 中的S位对应带进位加法ADC0101带进位减法指令SBC0110带进位逆向减法指令RSC0111位测试指令TST1000相等测试指令TEQ1001比较指令CMP1010负数比较指令CMN1011逻辑或操作指令ORR1100数据传送MOV1101位清除指令BIC1110数据非传送MVN1111加法运算指令ADD0100逆向减法指令RSB0011减法运算指令SUB0010逻辑异或操作指令EOR0001逻辑与操作指令AND0000说明指令助记符

15、操作码opcode操作码功能表25数据处理指令 cond0 0operand 2#opcodeSRnRd3128 27 26 25 2421 20 1916 1512 110目的寄存器第一操作寄存器设置操作码算术/逻辑功能8-bit 立即数125118 70#rotRm11765 430#shiftRm025118 765 430RsSh010Shimmediate alignmentimmediate shift lengthshift typesecond operand register移位寄存器长度立即数仅立即数仅8 8位。位。MOV R1,R0,LSL326数据处理指令27数据处理指

16、令ADD r0, r1, r2r0 := r1 + r2ADC r0, r1, r2r0 := r1 + r2 + CSUB r0, r1, r2r0 := r1 - r2 SBC r0, r1, r2r0 := r1 - r2 + C - 1 RSB r0, r1, r2r0 := r2 r1RSC r0, r1, r2r0 := r2 r1 + C - 1算术操作按位逻辑操作AND r0, r1, r2r0 := r1 and r2ORR r0, r1, r2r0 := r1 or r2EOR r0, r1, r2r0 := r1 xor r2 BIC r0, r1, r2r0 := r1 and (not) r2寄存器传送MOV r0, r2r0 := r2MVN r0, r2r0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号