【文档说明】cortex-m34基础4指令系统--实时嵌入式-硬件基础课件.pptx,共(89)页,2.636 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-76377.html
以下为本文档部分文字说明:
电子与信息工程学院11、ARMv7概述2.Cortex-M3基础2.1结构框图2.2操作模式、特权等级2.3存器组2.4流水线2.5总线2.6存储系统2.7中断和异常2.8SYSTICK定时器主要内容2.9低功耗2.10复
位2.11MPU2.12调试架构2.13调试部件3.Cortex-M3指令集3.1指令集综述3.2寻址方式3.3指令集介绍4.K60硬件基础电子与信息工程学院21、ARMv7概述2.Cortex-M3基础2.1结构框图2.2操作模式、特权等级2.3
存器组2.4流水线2.5总线2.6存储系统2.7中断和异常2.8SYSTICK定时器主要内容2.9低功耗2.10复位2.11MPU2.12调试架构2.13调试部件3.Cortex-M3指令集3.1指令集综述3.2寻址方式3.3指令集介绍4.K60硬件基础电子与信息工程学院3
1、ARMv7概述2.Cortex-M3基础2.1结构框图2.2操作模式、特权等级2.3存器组2.4流水线2.5总线2.6存储系统2.7中断和异常2.8SYSTICK定时器主要内容2.9低功耗2.10
复位2.11MPU2.12调试架构2.13调试部件3.Cortex-M3指令集3.1指令集综述3.2寻址方式3.3指令集介绍4.K60硬件基础电子与信息工程学院1.CM3程序的文件类型:C程序:CM3开发中大
部分程序使用C语言编写,文件类型为“*.C”;汇编程序:涉及到硬件底层操作的代码有时必须使用汇编语言编写,文件类型为“*.S”。2.为什么学习CM3指令系统:操作系统移植编写启动代码方便程序调试电子与信息工程学院5概述电子与信息工程学院1.处理器的寻址方式;2.指令的特点;3.指令的种类,
它能完成哪些功能。学习重点电子与信息工程学院71、ARMv7概述2.Cortex-M3基础2.1结构框图2.2操作模式、特权等级2.3存器组2.4流水线2.5总线2.6存储系统2.7中断和异常2.8SYSTICK定时器主要内容2.9低功
耗2.10复位2.11MPU2.12调试架构2.13调试部件3.Cortex-M3指令集3.1指令集综述3.2寻址方式3.3指令集介绍4.K60硬件基础电子与信息工程学院3.2ARM处理器寻址方式•寻址方式分类
寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。ARM处理器具有8种基本寻址方式。1.寄存器寻址;2.立即寻址;3.寄存器移位寻址;4.寄存器间接寻址;5.基址寻址;6.多寄存器寻址;7.堆栈寻址;8.相对寻址。电子与信息工程学院
操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例如下:MOVR1,R2;将R2的值存入R1SUBR0,R1,R2;将R1的值减去R2的值,结果保存到R00xAA0x55R2R1•寻址方式分类——寄存器寻址
MOVR1,R20xAA3.2ARM处理器寻址方式电子与信息工程学院立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指
令举例如下:SUBSR0,R0,#1;R0减1,结果放入R0,并且影响标志位MOVR0,#0xFF000;将立即数0xFF000装入R0寄存器0x55R0MOVR0,#0xFF00程序存储•寻址方式分类——立即寻址MOVR0,#0xFF000xFF00从代码中获得数据3.2ARM
处理器寻址方式电子与信息工程学院寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下:MOVR0,R2,LSL#3;R2的值左移3位,结果放入R0,;即是
R0=R2×8ANDSR1,R1,R2,LSLR3;R2的值左移R3位,然后和R1相;“与”操作,结果放入R10x55R0R20x01•寻址方式分类——寄存器移位寻址MOVR0,R2,LSL#30x080x08逻辑左移3位3.2ARM处理器寻址方式
电子与信息工程学院寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令举例如下:LDRR1,[R2];将
R2指向的存储单元的数据读出;保存在R1中SWPR1,R1,[R2];将寄存器R1的值和R2指定的存储;单元的内容交换0x55R0R20x400000000xAA0x40000000•寻址方式分类——寄存器间接寻址LDRR0,[
R2]0xAA3.2ARM处理器寻址方式电子与信息工程学院基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。基址寻址指令举例如下:
LDRR2,[R3,#0x0C];读取R3+0x0C地址上的存储单元;的内容,放入R2STRR1,[R0,#-4]!;先R0=R0-4,然后把R1的值寄存;到保存到R0指定的存储单元•寻址方式分类——基址寻址0x55R
2R30x400000000xAA0x4000000CLDRR2,[R3,#0x0C]0xAA将R3+0x0C作为地址装载数据3.2ARM处理器寻址方式电子与信息工程学院多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄
存器的任何子集或所有寄存器。多寄存器寻址指令举例如下:LDMIAR1!,{R2-R7,R12};将R1指向的单元中的数据读出到;R2~R7、R12中(R1自动加1)STMIAR0!,{R2-R7,R12};将寄存器R2~
R7、R12的值保;存到R0指向的存储;单元中;(R0自动加1)0x40000000R1R20x??0x010x400000000x??R3R40x??R60x??0x020x030x040x400000040x400000080x4000
000C存储器•寻址方式分类——多寄存器寻址LDMIAR1!,{R2-R4,R6}0x010x020x030x040x400000103.2ARM处理器寻址方式电子与信息工程学院堆栈是一个按特定顺序进行存取的存储区,
操作顺序为“后进先出”。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种:向上生长:向高地址方向生长,称为递增堆栈向下生长:向低地址方向生长,称为递减堆栈•寻址方式分类——堆栈
寻址3.2ARM处理器寻址方式电子与信息工程学院•寻址方式分类——堆栈寻址栈底栈顶栈区SP堆栈存储区栈顶栈底栈区SP向下增长向上增长0x123456780x12345678堆栈压栈堆栈压栈3.2ARM处理器寻址方式电子与信息工程学院栈顶SP栈顶SP栈底空堆栈栈底满堆栈堆栈指针指向最后
压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。•寻址方式分类——堆栈寻址0x123456780x12345678栈顶SP0x12345678栈顶SP压栈压栈3.2ARM处理器寻址方式电子与信息工程学院所
以可以组合出四种类型的堆栈方式:满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA、STMFA等;空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA、S
TMEA等;满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD、STMFD等;空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如LDMED、STMED等。•寻址方式分类——堆栈寻址3.2ARM处理器寻址方式
电子与信息工程学院相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下:BLSUBR1;调用到SUBR1子程序BEQLOOP;条件跳转到LOOP标号
处...LOOPMOVR6,#1...SUBR1...•寻址方式分类——相对寻址3.2ARM处理器寻址方式电子与信息工程学院201、ARMv7概述2.Cortex-M3基础2.1结构框图2.2操作模式、特权等
级2.3存器组2.4流水线2.5总线2.6存储系统2.7中断和异常2.8SYSTICK定时器主要内容2.9低功耗2.10复位2.11MPU2.12调试架构2.13调试部件3.Cortex-M3指令集3.
1指令集综述3.2寻址方式3.3指令集介绍4.K60硬件基础电子与信息工程学院3.3指令集介绍3.3.1汇编基础3.3.2指令集3.3.3CM3中的前卫指令电子与信息工程学院•简单的程序;文件名:TEST1.S;功能:实现两个寄存器相加;说明:使用ARMulate软
件仿真调试AREAExample1,CODE,READONLY;声明代码段Example1ENTRY;标识程序入口CODE32;声明32位ARM指令STARTMOVR0,#0;设置参数MOVR1,#10LOOPBLADD_SUB;调用子程序ADD_SUBBLOOP;跳转到LOO
PADD_SUBADDSR0,R0,R1;R0=R0+R1MOVPC,LR;子程序返回END;文件结束使用“;”进行注释标号顶格写实际代码段声明文件结束电子与信息工程学院3.3指令集介绍3.3.1汇编基础3.3.
2指令集3.3.3CM3中的前卫指令电子与信息工程学院243.3.1汇编基础1、基本语法标号操作码操作数1,操作数2,„„;注释注释:1)标号可选,如果有,必须顶格写。标号的作用是让汇编器来计算程序转移地址。2)操作码是指令的助记符,前面必须至少有一个空白符。3)第1操作数,通常给出本指令的执
行结果的存储位置。4)第2操作数以后的操作数,通常是参与运算的数据或其位置。5);后的为注释,不影响汇编器的工作。电子与信息工程学院252、汇编语言中的后缀1)条件执行后缀通常用于跳转指令;2)如果其他指令在IF-THEN指令块中,也可以使用条件执行后;3)条
件后缀和S后缀可同时使用。电子与信息工程学院263、统一汇编语言ULA1)为了支持Thumb-2,并且最大程度的发挥其功能,ARM汇编器引入了一个“统一汇编语言”ULA,同时支持16位和32位指令。2)在ULA语法中,指令使用后缀s才可以影响AP
SR。3)在UAL下,汇编器能主动决定用16位指令或32位指令,也可以手工指定;电子与信息工程学院3.3指令集介绍3.3.1汇编基础3.3.2指令集3.3.3CM3中的前卫指令电子与信息工程学院•存储器访问指令•算术运算指令•逻辑运算指令•移位
、循环指令•展开指令•数据反转指令•位域处理和操作指令•条件跳转•指令屏障和存储器屏障指令•饱和运算指令28电子与信息工程学院•存储器访问指令——后缀装载指令:LDRx目标寄存器,源地址保存指令:STR
x源寄存器,目标地址B:从/向指定位置加载/存储字节H:从/向指定位置加载/存储半字无:从/向指定位置加载/存储字EX:排他性加载/存储D:从/向指定位置加载/存储双字电子与信息工程学院•存储器访问指令——地址形式装载指令:LDRx目标寄存
器,源地址保存指令:STRx源寄存器,目标地址立即数:立即数可以是一个无符号的数值。这个数据可以加到基址寄存器,也可以从基址寄存器中减去这个数值。如:LDRR1,[R0,#0x12]寄存器:寄存器中的数值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。如:LDRR1,[R0,R2]寄存器及
移位常数:寄存器移位后的值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。如:LDRR1,[R0,R2,LSL#2]电子与信息工程学院•存储器访问指令——寻址方式装载指令:LDRx目标寄存器,源地址保存
指令:STRx源寄存器,目标地址零偏移:如:LDRRd,[Rn]前索引偏移:如:LDRRd,[Rn,#0x04]!程序相对偏移:如:LDRRd,labe1后索引偏移:如:LDRRd,[Rn],#0x04电子与信息工程学院存储器访问指令——单寄存器加载/存储电子与信息工程学院0x
55R2R50x400000000x123456780x40000000存储器地址应用示例:LDRR2,[R5];将R5指向地址的字数据存入R20x12345678•ARM存储器访问指令——单寄存器加载应
用电子与信息工程学院0x12345678R1R20x400000000x??0x40000004存储器地址应用示例:STRR1,[R2,#0x04];将R1的数据存储到R0+0x04地址0x12345678+4•ARM存储器访问指令——单寄存器保存应用电子与信息工程学院35电子与信息
工程学院•存储器访问指令——多寄存器存取装载指令:LDM源地址,目标寄存器列表存储指令:STM目标地址,源寄存器列表存储器源地址目标寄存器1目标寄存器n存储器目标地址源寄存器1源寄存器n电子与信息工程学院•存储器访问指令——多
寄存器存取装载指令:LDM存储指令:STMxxLDM/STM指令搭配不同的后缀实现不同方式地址增长方式:IA:每次传送后地址加4DB:每次传送前地址减4电子与信息工程学院存储器访问指令——多寄存器加载/存储电子与信息工程学院•ARM存储器访问指令——多寄存器存取数据块传送指令操作过
程如右图所示,其中R1为指令执行前的基址寄存器,R1’则为指令执行后的基址寄存器。R5R6R7R1R1’指令STMIAR1!,{R5-R7}4008H4004H4000H4014H4010H400CHR5R6R7R1’R1指令STMDBR1!,{R5-R7}40
08H4004H4000H4014H4010H400CH电子与信息工程学院0x40000000R1R20x??0x010x400000000x??R3R40x??R60x??0x020x030x040x400000040x4000000
80x4000000C存储器0x010x020x030x040x40000010应用示例:LDMIAR1!,{R2-R4,R6}将R1指向的内存数据读取到R0-R4和R6寄存器中•存储器访问指令——多寄存器存
取电子与信息工程学院41另外两种存储器操作为栈的PUSH和POP.PUSH{R0,R4-R7,R9}POP{R2,R3}电子与信息工程学院42•存储器访问指令•算术运算指令•逻辑运算指令•移位、循环指令•展开指令•数据反转指令•
位域处理和操作指令•条件跳转•指令屏障和存储器屏障指令•饱和运算指令电子与信息工程学院常见的算术四则运算指令电子与信息工程学院44•存储器访问指令•算术运算指令•逻辑运算指令•移位、循环指令•展开指令•数据反转指令•位域处理和操作指令•条件跳转•指令屏障和存储器屏障指令•
饱和运算指令电子与信息工程学院电子与信息工程学院46•存储器访问指令•算术运算指令•逻辑运算指令•移位、循环指令•展开指令•数据反转指令•位域处理和操作指令•条件跳转•指令屏障和存储器屏障指令•饱和运算指令电子与信息工程学院47移位操作指令电子与信息工程学院电子与信息工程学
院49•存储器访问指令•算术运算指令•逻辑运算指令•移位、循环指令•展开指令•数据反转指令•位域处理和操作指令•条件跳转•指令屏障和存储器屏障指令•饱和运算指令电子与信息工程学院50带符号展开指令SXTBRd,Rm;Rd=si
gnext(Rm[7:0])SXTHRd,Rm;Rd=signext(Rm[15:0])电子与信息工程学院51•存储器访问指令•算术运算指令•逻辑运算指令•移位、循环指令•展开指令•数据反转指令•位域处理和操作指令•条件跳转•指令屏障和存储器屏障指令•饱和运算指令电子与信息工程
学院52数据反转指令电子与信息工程学院53•存储器访问指令•算术运算指令•逻辑运算指令•移位、循环指令•展开指令•数据反转指令•位域处理和操作指令•条件跳转•指令屏障和存储器屏障指令•饱和运算指令电子与
信息工程学院54位域处理指令电子与信息工程学院55电子与信息工程学院56电子与信息工程学院57•存储器访问指令•算术运算指令•逻辑运算指令•移位、循环指令•展开指令•数据反转指令•位域处理和操作指令•条件跳转•指令屏障和存储器屏障指
令•饱和运算指令电子与信息工程学院58跳转依据在CM3中,下列指令可以更新PSR中的标志:16位算术逻辑指令32位带S后缀的算术逻辑指令比较指令(如,CMP/CMN)和测试指令(如TST/TEQ)直接写PSR/APSR(MSR指令)电子与信息工程学院操作码条件助记符标志含义0000EQZ=
1相等0001NEZ=0不相等0010CS/HSC=1无符号数大于或等于0011CC/LOC=0无符号数小于0100MIN=1负数0101PLN=0正数或零0110VSV=1溢出0111VCV=0没有溢出1000HIC=1,Z=0无符号数大于1001LSC=0,Z
=1无符号数小于或等于1010GEN=V有符号数大于或等于1011LTN!=V有符号数小于1100GTZ=0,N=V有符号数大于1101LEZ=1,N!=V有符号数小于或等于1110AL任何无条件执行(指令默认条件)1111NV任何从不执行(不要使用)•指令条件码表电子与信息工程学院6
0BEQlabel;当Z=1时转移CMPR0,R1;比较R0,R1ITTETGT;IfR0>R1Then(T代表Then,E代表Else)MOVGTR2,R0MOVLER2,R0MOVGTR3,R1MOVGTR3,R1电子与信息工程学院61•存储器访问指令•算术运算指令•逻辑运算指令
•移位、循环指令•展开指令•数据反转指令•位域处理和操作指令•条件跳转•指令屏障和存储器屏障指令•饱和运算指令电子与信息工程学院62隔离指令在一些结构比较复杂的存储器系统中是必要的。在这类系统中,如果没有必要的
隔离,会导致系统发生紊乱危象(racecondition),(相当于数电中的“竞争与冒险”)。如果RAM的访问是带缓冲的,并且写完之后马上读,就必须让它“喘口气”——用DMB指令来隔离,以保证缓冲中的数据已经落实到RAM中。DSB比DMB
更保险(当然也是有执行代价的),它是宁可错杀也不漏网——清空了写缓冲,使得任何它后面的指令,不管要不要使用先前的存储器访问结果,通通等待访问完成。如果某个程序从下一条要执行的指令处更新了自己,但是先前的旧指令
已经被预取到流水线中去了,此时就必须清洗流水线,把旧版本的指令洗出去,再预取新版本的指令。因此,必须在被更新代码段的前面使用ISB,以保证旧的代码从流水线中被清洗出去,不再有机会执行。电子与信息工程学院6
3•存储器访问指令•算术运算指令•逻辑运算指令•移位、循环指令•展开指令•数据反转指令•位域处理和操作指令•条件跳转•指令屏障和存储器屏障指令•饱和运算指令电子与信息工程学院64CM3中的饱和运算指令分为两种:1)“没有直流分量”的交流信号饱和——带符号饱和运算;2)无符号饱
和运算则类似于“削顶失真+单向导通”。电子与信息工程学院65指令名功能描述SSAT.WRd,#imm5,Rn,{,shift}以带符号数的边界进行饱和运算(交流)USAT.WRd,#imm5,Rn,{,shift}以无符号数的边界进行饱和运算(带纹波的
直流)电子与信息工程学院3.3指令集介绍3.3.1汇编基础3.3.2指令集3.3.3CM3中的前卫指令电子与信息工程学院•MSR/MRS•IF-THEN•SDIV/UDIV•REV/REVH/REVSH•SXTB/SXTH/UXTB/UXTH•UBFX/SBFX•LDRD/STRD•表格跳转
字节/表格跳转半字67电子与信息工程学院68MRS、MSR专用特殊寄存器访问指令,只能在特权级状态下使用,APSR除外,APSR可以在用户级状态下使用。MRS<Rn>,<SReg>;加载特殊功能寄存器的值到Rn
MSR<Sreg>,<Rn>;存储Rn的值到特殊功能寄存器指定PSP进行更新的例子:–LDRR0,=0x20008000–MSRPSP,R0–BXLR–;如果是从异常(Handler模式)返回到用户线程模
式,•则使用新的PSP的值作为栈顶指针•实质上是替换了之前线程状态使用的PSP指针(所指向的内存地址空间)电子与信息工程学院69电子与信息工程学院•MSR/MRS•IF-THEN•SDIV/UDIV•R
EV/REVH/REVSH•SXTB/SXTH/UXTB/UXTH•UBFX/SBFX•LDRD/STRD•表格跳转字节/表格跳转半字70电子与信息工程学院71IF-THEN(IT)指令围起一个快,里面最多有4条指令,可以条件执行。IT指令已经带了一个“T”,因
此还可以最多再带3个“T”或者“E”,并且对T和E的顺序没有要求,其中T对应条件成立时执行的语句,E对应条件不成立时执行的语句。电子与信息工程学院72电子与信息工程学院•MSR/MRS•IF-THEN•SDIV/UDIV•REV/REVH/REVSH•SXTB/SXTH/UXTB/U
XTH•UBFX/SBFX•LDRD/STRD•表格跳转字节/表格跳转半字73电子与信息工程学院7432位硬件除法指令电子与信息工程学院•MSR/MRS•IF-THEN•SDIV/UDIV•REV/REVH/REVSH•SXTB/SXTH/UXTB/UXTH•UB
FX/SBFX•LDRD/STRD•表格跳转字节/表格跳转半字75电子与信息工程学院76这些指令专门服务于大端模式和小端模式的转换,最常用于网络应用程序中(网络通常是大端,主机通常是小端)电子与信息工程学院77RBIT比前面的REV之流更精细,它是按位反转的
,相当于把32位整数的二进制表示法水平旋转180度。其格式为:电子与信息工程学院•MSR/MRS•IF-THEN•SDIV/UDIV•REV/REVH/REVSH•SXTB/SXTH/UXTB/UXTH•UBFX/SBFX•LD
RD/STRD•表格跳转字节/表格跳转半字78电子与信息工程学院79指令格式电子与信息工程学院•MSR/MRS•IF-THEN•SDIV/UDIV•REV/REVH/REVSH•SXTB/SXTH/UXTB/UXTH
•UBFX/SBFX•LDRD/STRD•表格跳转字节/表格跳转半字80电子与信息工程学院81UBFX/SBFX都是位段提取指令,语法格式为:UBFX从Rn中取出任一个位段,执行零扩展后放到Rd中。SBFX也抽取任意的位段,但是以带符号的方式进行扩
展。电子与信息工程学院•MSR/MRS•IF-THEN•SDIV/UDIV•REV/REVH/REVSH•SXTB/SXTH/UXTB/UXTH•UBFX/SBFX•LDRD/STRD•表格跳转字节/表格跳转半字82电子与信息工程学院8364位数据加载/存储指令电子与信息工程学院•MSR/MR
S•IF-THEN•SDIV/UDIV•REV/REVH/REVSH•SXTB/SXTH/UXTB/UXTH•UBFX/SBFX•LDRD/STRD•表格跳转字节/表格跳转半字(TBB/TBH)84电子与信息工程学院85TBB(查
表跳转字节范围的偏移量)指令和TBH(查表跳转半字范围的偏移量)指令,分别用于从一个字节数组表中查找转移地址,和从半字数组表中查找转移地址。TBB和TBH只能做前向跳转,即偏移量只能是无符号整数。因为CM3的指令至少是按半字
对齐的,表中的数值都是在左移一位后才作为前向跳转的偏移量的。又因为PC的值为当前地址+4,故TBB的跳转范围可达255*2+4=514;TBH的跳转范围更可高达65535*2+4=128KB+2。Rn指向
跳转表的基质,Rm则给出表中元素的下标。电子与信息工程学院86电子与信息工程学院87电子与信息工程学院88电子与信息工程学院89THEEND.