嵌入式系统原理与应用课件:EMB-3 Cortex-M3指令与Proteus软件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《嵌入式系统原理与应用课件:EMB-3 Cortex-M3指令与Proteus软件.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式系统原理与应用课件:EMB-3 Cortex-M3指令与Proteus软件 嵌入式 系统 原理 应用 课件 EMB Cortex M3 指令 Proteus 软件
- 资源描述:
-
1、第3章 Cortex-M3指令与Proteus软件 第1节 Cortex-M3指令寻址模式 第2节 Cortex-M3指令集 第3节 Cortex-M3汇编语言编程模型 第4节 Proteus仿真软件第3章 Cortex-M3指令与Proteus软件 第1节 Cortex-M3指令寻址模式 第2节 Cortex-M3指令集 第3节 Cortex-M3汇编语言编程模型 第4节 Proteus仿真软件Cortex-M3指令系统 指令系统反映中央处理单元(CPU)的结构。指令系统确定后,CPU内核结构就确定。 指令由2部分构成,即:操作码和操作数。v 操作码最终操作对象是操作数,被操作的对象可放在C
2、PU内部寄存器,片内存储器或片外存储器,也可是常数。v CPU必须按照“预先制定的规则”找到这些被操作的对象。v 操作对象包括:立即数、直接位地址、程序地址、直接数地址、间接地址、特殊的汇编器符号。v 这些操作对象和寻址模式相关。Cortex-M3指令寻址模式 CPU寻找操作对象位置的过程,称为寻址。v 把寻找操作对象的方法,称为寻址模式。 Cortex-M3支持的寻址模式:v 立即寻址;寄存器寻址;v 寄存器移位寻址;寄存器间接寻址;v 多寄存器寻址;基址寻址;v 堆栈寻址;v 块复制寻址;相对寻址立即寻址与寄存器寻址 立即寻址:操作数由1个直接16位地址域指定。v 指令: MOS R11,
3、#0 x000B v 功能:将值0 x000B写入到寄存器R11。 寄存器寻址:某些特定指令用来访问寄存器组中的1个寄存器。这些指令不需要地址域,因此这些指令访问效率更高。v 指令: SUB R0,R1,R2v 功能:寄存器R1内容减去寄存器R2内容,结果保存到R0。寄存器移位寻址与寄存器间接寻址 寄存器移位寻址:ARM指令集特有寻址模式。第2个操作数是移位方式时,第2个寄存器操作数与第1个操作数结合之前,选择移位操作。v 指令: ANDS R1,R1,R2,LSL R3v 功能:寄存器R2值左移R3位,然后和寄存器R1值逻辑与,结果保存在R1寄存器中。 寄存器间接寻址:指令指定1个寄存器,该
4、寄存器包含操作数的地址。v 指令: LDR R8,R10v 功能:将R10所指向地址的内容加载到寄存器R8内。多寄存器寻址与基址寻址 多寄存器寻址:1次可传送数个寄存器的值。v 指令:LDMIA R1!,R2-R7,R12v 功能:R1指向单元数据读出道R2:7或R12寄存器。 基址寻址:基址寄存器内容与指令偏移量相加,形成操作数有效地址。访问基址附近存储单元,用于查表、数组操作等。v 指令:LDR R2,R3,#0 x0Cv 功能:读取R3+0 x0C指向存储器单元内容,并加载到寄存器R2中。堆栈寻址 堆栈寻址v 栈是按特定顺序进行存取的存储区,操作顺序为后进先出,堆栈寻址是隐含的,v 使用
5、专门寄存器(堆栈指针)指向存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。v 存储器堆栈分为2种: 向上生长:向高地址方向生长,称为递增堆栈。 向下生长:向低地址方向生长,称为递减堆栈。v 堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下1个待压入数据的空位置,称为空堆栈。 堆栈寻址v 满递增 堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。 指令:LDMFA、STMFA等; v 空递增 堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。 指令: LDMEA、STMEA等; 堆栈寻址v 满递减 堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。 指令:LDMFD、S
6、TMFD等;v 空递减 堆栈向下增长,堆栈指针向堆栈下的第一个空位置。 指令: LDMED、STMED等。快复制寻址与相对寻址 块复制寻址:多寄存器传输指令将数据从存储器空间的某位置复制到存储器空间的另位置。v 指令:STMIA R0!,R1-R7v 功能:将R1-R7的数据保存到存储器中,存储器指针在保存第一个值后增加,增长的方向为向上增长。 相对寻址:基址寻址的变通。PC提供基地址,指令地址码部分作为偏移量,两者相加得到的地址即为操作数有效地址。v 指令: BL SUBR1v 功能:调用到SUBR1的子程序。第3章 Cortex-M3指令与Proteus软件 第1节 Cortex-M3指令
7、寻址模式 第2节 Cortex-M3指令集 第3节 Cortex-M3汇编语言编程模型 第4节 Proteus仿真软件Cortex-M3指令集 指令集概述 CMSIS函数 存储器访问指令 通用数据处理指令 乘法和除法指令 饱和指令 比特位操作指令 分支和控制指令 其它操作指令指令集概述 指令宽度选择v 很多指令产生16位或32位编码,取决于指定的操作数和目标寄存器。 使用带有宽度后缀,强制指定具体指令大小。.W后缀强制32位指令编码。.N后缀强制16位指令编码。v 若给出宽度后缀,而汇编器不能产生所要求宽度的指令编码,则产生错误。v 一些情况下需要指定.W后缀。 如,分支指令中,若操作数是一个
8、指令标号或一个文字数据。这是因汇编器不能自动产生正确大小的编码。CMSIS函数 ISO/IEC C代码不能直接访问某些Cortex-M3指令。v 这部分给出使用CMSIS和C编译器内提供的固有函数,能产生这些指令。v 若C编译器不支持合理的固有函数,则使用内联汇编器访问一些指令。 Cortex微控制器软件接口标准(Cortex Microcontroller Software Interface Standard - CMSIS)函数产生某些Cortex-M3指令。v CMSS函数也提供大量的函数,用于使用MRS和MSR指令访问特殊寄存器。存储器访问指令 ADR指令 LDR和STR立即偏移指令
9、 LDR和STR寄存器偏移指令 LDR和STR非特权指令 LDR和PC相对指令 LDM和STM指令 PUSH和POP指令 LDREX和STREX指令 CLREX指令通用数据处理指令 ADD,ADC,SUB,SBC和RSB指令 AND,ORR,EOR,BIC和ORN指令 ASR,LSL,LSR,ROR和RRX指令 CLZ指令 CMP和CMN指令 MOV和MVN指令 MOVT指令 REV,REV16,REVSH和RBIT指令 TST和TEQ指令乘法和除法指令 MUL,MLA和MLS指令 UMULL,UMLAL,SMULL和SMLAL指令 SDIV和UDIV指令比特位操作指令 BFC和BFI指令 S
10、BFX和UBFX指令 SXT和UXT指令分支和控制指令 B,BL,BX和BLX指令 CBZ和CBNZ指令 IT指令 TBB和TBH指令其他操作指令 BKPT指令和CPS指令 DMB指令和DSB指令 ISB指令和MRS指令 MSR指令和NOP指令 SEV指令和SVC指令 WFE指令和WFI指令第3章 Cortex-M3指令与Proteus软件 第1节 Cortex-M3指令寻址模式 第2节 Cortex-M3指令集 第3节 Cortex-M3汇编语言编程模型 第4节 Proteus仿真软件C语言编程 示例实现下述功能的C语言代码描述main() int i=0; s=0; for(i=1;ir7
11、Cortex-M3汇编语言编程(2)mov r3, #0 ;/将0加载到r3寄存器str r3, r7, #4 ;/将r3寄存器内容保存到(r7)+4所指向的存储器地址的空间,(r3)-r7+4mov r3, #1 ;/将1加载到r3寄存器str r3, r7, #0 ;/将r3寄存器的内容保存到r7寄存器所保存的存储器地址的空间,即(r3)-r7Cortex-M3汇编语言编程(3)b.L2 ;/无条件跳转到标号为L2位置的汇编指令区.L3: ldr r2, r7, #4;/将(r7)+4所指向的存储器地址的空间的内容加载到r2寄存器,r7+4-(r2) ldr r3, r7, #0;/将r7
12、寄存器所指向的存储器地址空间的内容加载到r3寄存器,即r7-(r3)Cortex-M3汇编语言编程(4)add r3, r2, r3; /将r2寄存器内容和r3寄存器内容相加后,保存到r3寄存器中,(r3)+(r2)-(r3)str r3, r7, #4;/将r3寄存器内容保存到(r7)+4所指向的存储器地址的空间,(r3)-r7+4ldr r3, r7, #0 ;/将r7寄存器所指向的存储器地址空间的内容加载到r3寄存器,即r7-(r3)add r3, r3, #1;/将r2寄存器内容加1后,保存到r3寄存器中,(r3)+1-(r3)Cortex-M3汇编语言编程(5)str r3, r7,
13、 #0 ;/将r3寄存器内容保存到(r7)所指向的存储器地址的空间,(r3)-r7.L2:ldr r3, r7, #0 ;/将r7寄存器所指向的存储器地址空间的内容加载到r3寄存器,即r7-(r3)cmp r3, #10;/将r3寄存器的内容和10进行比较 ble .L3;/如果r3寄存器的内容小于等于10,则跳转到标号为L3的位置Cortex-M3汇编语言编程(6)ldr r3, r7, #4 ;/将(r7)+4所指向的存储器地址的空间的内容加载到r3寄存器,r7+4-(r3)ldr r0, =result ;/将数据段result所指向的存储空间的地址加载到r0str r3,r0;/将r3
展开阅读全文