您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > KL25-ch02(ARM-Cortex-M0+处理器)
第2章ARMCortex-M0+处理器主要内容:2.1ARM处理器应用概述2.2ARMCortex-M0+处理器简介2.3ARMCortex-M0+处理器的指令系统2.4ARMCortex-M0+汇编语言的基本语法2.5本章小结12.1ARM处理器应用概述ARM即AdvancedRISCMachines的缩写。1985年4月26日,第一个ARM原型在英国剑桥的Acorn计算机有限公司诞生,由美国加州SanJoseVLSI技术公司制造。目前,ARM微处理器已遍及各类嵌入式产品市场,基于ARM技术的微处理器的应用,约占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。2ARM公司在经典处理器ARM11以后的产品统一改用Cortex命名,并分成A50、A、R和M四类,旨在为各种不同的市场提供服务。1.ARMCortex-A50系列处理器该系列处理器是面向高效的低功耗服务器市场领域。2.ARMCortex-A系列处理器该系列处理器是面向尖端的基于虚拟内存的操作系统和用户应用。3.ARMCortex-R系列处理器该系列处理器是针对实时系统,为具有严格的实时响应限制的嵌入式系统提供高性能计算解决方案。4.ARMCortex-M系列处理器该系列处理器是一系列可向上兼容的高能效、易于使用的处理器,旨在帮助开发人员满足将来的嵌入式应用的需要。32.2ARMCortex-M0+处理器简介2012年3月14日,ARM公司于中国上海发布了一款拥有全球最低功耗的微处理器ARMCortex-M0+。该处理器不仅延续了易用性、C语言编程模型等优势,而且能够兼容已有的Cortex-M0处理器的工具。42.2.1ARMCortex-M0+处理器特点与结构图52.2.2ARMCortex-M0+处理器存储器映像6存储器系统支持所谓的“位带”(bit-band)操作及小端配置和大端配置。2.2.3ARMCortex-M0+处理器的寄存器72.3ARMCortex-M0+处理器的指令简表8其共有57条基本指令,依据不同的寻址方式形成68条具体指令2.3.1ARMCortex-M0+指令简表与寻址方式1.ARMCortex-M0+指令简表2.ARMCortex-M0+指令寻址方式1)立即数寻址,立即数范围是0x00~0xffSUBR1,R0,#1@R1←R0-12)寄存器寻址,操作数来自于寄存器MOVR1,R2@R1←R23)直接寻址,操作数来自存储单元LDRRt,label@从标号label处连续取4字节至寄存器中4)偏移及寄存器间接寻址,操作数来自存储单元LDRR3,[PC,#100]@地址为(PC+100)的存储器单元的内容加载到寄存器R3中92.3.2数据传送类指令1.生成与指针PC相关地址指令2.取数指令103.存数指令4.寄存器间数据传送指令5.堆栈操作指令112.3.3数据操作类指令1.算术运算类指令2.逻辑运算类指令123.数据序转指令4.扩展类指令5.位测试指令136.移位类指令142.3.4跳转控制类指令152.3.5其他指令例如断点指令、中断指令、屏蔽指令等2.4ARMCortex-M0+汇编语言的基本语法2.4.1汇编语言格式汇编语言源程序以行为单位进行设计,每一行最多可以包含以下四个部分。标号:操作码操作数注释1.标号如果一个语句有标号,则标号必须书写在汇编语句的开头部分,命名规则与C变量相同。其值是本条语句的PC(程序计数器)值。2.操作码操作码包括指令码和伪指令。对于有标号的行,必须用至少一个空格或制表符(TAB)将标号与操作码隔开。对于没有标号的行,不能从第一列开始写指令码,应以空格或制表符(TAB)开头。编译器不区分操作码中字母的大小写。163.操作数可以是地址、标号或指令码定义的常数,也可以是由伪运算符构成的表达式。1)常数标识十进制(默认)十六进制(0x)二进制(0b)2)“#”表示立即数一个常数前添加“#”表示一个立即数,不加“#”时,表示一个地址。3)圆点“.”若圆点“.”单独出现在语句的操作码之后的操作数位置上,则代表当前程序计数器的值被放置在圆点的位置。174)伪运算符4.注释类C,多行注释以“/*”开始,以“*/”结束,且可以用“@”,“#”引导单行注释。182.4.2伪指令伪指令是没有对应机器码的指令,只能为编译器所识别并指导汇编如何进行。主要用于变量和常量以及宏的定义、条件判断、文件包含等。1.变量定义变量表示存储单元,这种存储单元中存放数值;标号也可以表示存储单元,这种存储单元中存放机器指令代码。所以变量和标号均可表示存储器操作数。.section.data@.data含义是将下面的标号声明为变量var1:.byte@定义字节变量var1,未赋初值。整条语句含义是:以标号var1开始定义一个数据区var2:.byte0x56@定义字节变量,且初值为0x56192.字符常数与字符串常数定义1)字符常数有两种字符常数。一种字符占一个字节,如‘A’;另一种是组合字符,可包含多个字符。2)字符串常量利用ASCII与ASCIZ可以定义字符串常数:.section.rodata@.rodata含义是将下面的标号声明为常量Label2:.ascii字符串@直接定义ascii码字符串Label3:.asciz字符串@定义ASCII码字符串,但末尾增加0x00203.条件伪指令及文件包含伪指令1)条件伪指令if条件伪指令后面紧跟着一个恒定的表达式(即该表达式的值为真)。并且最后要以.endif结尾。中间如果有其他条件,可以用.elseif或者.else填写汇编语句。.ifdef标号,表示如果标号被定义,执行下面的代码。2)文件包含伪指令.include“filename”.include是一个附加文件的链接指示命令,利用它可以把另一个源文件插入当前的源文件一起汇编,成为一个完整的源程序。214.有限循环伪指令1)该循环以.irp开始,.endr结束。例如:.irpparam,1,2,3movr\param,#4.endr编译器转换成下面的汇编语句执行:movr1,#4movr2,#4movr3,#42)还有一种循环以.rept开头,以.endr结尾。.rept3ADDr1,#4.endr编译器转换成下面的汇编语句执行:ADDr1,#4ADDr1,#4ADDr1,#4225.宏定义及宏调用伪指令宏定义伪指令:macroname:.macro[arg0][,arg1][,arg3]…….endm定义一个宏,以macroname.macro开始,以.endm结束。在宏内部表达式中,可以用.mexit伪指令直接退出宏,放弃后面命令。macro后面的参数是宏被调用时的参数,定义的宏名称不能与汇编指令及汇编伪指令名称相冲突,可以是标识符。宏调用伪指令:macroname[arg0[,args]]【例如】定义一个宏执行一段代码,执行一段命令name.macrolabelAmovr2,L3+labelA.endm调用这个宏name方法如下:name4这个宏等同于如下程序段:movr2,L3+4232.5本章小结•本章简要概述了ARMCortex处理器,重点介绍ARMCortex-M0+的内部结构功能特点及汇编指令,有助于读者更深层次的理解和学习ARMCortex-M0+软硬件的设计。•学习和记忆ARMCortex-M0+基本指令对理解处理器特性十分有益的。本章给出的ARMCortex-M0+指令简表可以方便读者记忆基本指令。24
本文标题:KL25-ch02(ARM-Cortex-M0+处理器)
链接地址:https://www.777doc.com/doc-5180933 .html