




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.1ARM指令分类及指令格式
1、指令分类分支指令、数据处理指令、程序状态寄存器(CPSR)处理指令、加载/存储指令、协处理器指令和异常产生指令。2、指令格式<opcode>{<cond>}{S}<Rd>,<Rn>{,<op2>}操作码;指令助记符,如LDR、STR等可选的条件码;执行条件,如EQ、NE等。可选后缀;若指定“S”,则根据指令执行结果更新CPSR中的条件码目标寄存器第一个操作数,必须是寄存器第二个操作数
助记符指令功能描述所属类型ADC带进位加法指令数据处理类之算术运算指令ADD加法指令数据处理类之算术运算指令AND逻辑与指令数据处理类之逻辑运算指令B跳转指令分支类指令BIC位清零指令数据处理类之逻辑运算指令BKPT断点中断指令异常中断类指令BL带返回的跳转指令分支类指令BLX带返回和状态切换的跳转指令分支类指令BX带状态切换的跳转指令分支类指令CDP协处理器数据操作指令协处理器类指令CMN比较反值指令数据处理类之比较类指令CMP比较指令数据处理类之比较类指令EOR异或指令数据处理类之逻辑运算指令LDC存储器到协处理器的数据传送指令加载/存储类指令LDM加载多个寄存器指令加载/存储类指令LDR存储器到寄存器的数据传送指令加载/存储类指令MCR从寄存器到协处理器寄存器的数据传送指令协处理器类指令MLA乘加运算指令数据处理类之算术运算指令MOV数据传送指令数据处理类之数据传送指令MRC从协处理器寄存器到寄存器的数据传送指令协处理器类指令MRS传送CPSR或SPSR的内容到通用寄存器指令程序状态寄存器与通用寄存器传输类指令MSR传送通用寄存器到CPSR或SPSR的指令程序状态寄存器与通用寄存器传输类指令MUL32位乘法指令数据处理类之算术运算指令MLA32位乘加指令数据处理类之算术运算指令MVN数据取反传送指令数据处理类之数据传送指令ORR逻辑或指令数据处理类之逻辑运算指令RSB逆向减法指令数据处理类之算术运算指令RSC带借位的逆向减法指令数据处理类之算术运算指令SBC带借位减法指令数据处理类之算术运算指令STC协处理器寄存器写入存储器指令协处理器类指令STM批量内存字写入指令加载/存储类指令STR寄存器到存储器的数据传送指令加载/存储类指令SUB减法指令数据处理类之算术运算指令SWI软件中断指令异常中断类指令SWP交换指令数据处理类之交换指令TEQ相等测试指令数据处理类之测试指令TST位测试指令数据处理类之测试指令
指令中的条件域条件码助记符后缀标志含义0000EQZ置位相等0001NEZ清零不相等0010CSC置位无符号数大于或等于0011CCC清零无符号数小于0100MIN置位负数0101PLN清零正数或零0110VSV置位溢出0111VCV清零未溢出1000HIC置位Z清零无符号数大于1001LSC清零Z置位无符号数小于或等于1010GEN等于V带符号数大于或等于1011LTN不等于V带符号数小于1100GTZ清零且(N等于V)带符号数大于1101LEZ置位或(N不等于V)带符号数小于或等于1110AL忽略无条件执行
1、#立即数符号:32位立即数2、0x十六进制符号3、!更新基址寄存器符号4、^复制SPSR到CPSR符号5、-指示寄存器列表符号ARM指令中的操作数符号
ARM指令中的移位操作移位操作符opsh操作含义示例示例说明LSL逻辑左移MOVR0,R1,LSL#2将R1中的内容左移2位送R0中,低位用0填充ASL算术左移MOVR0,R2,ASL#3 将R2中的内容左移3位送R0中,LSL与ASL效果相同,可以互换LSR逻辑右移MOVR0,R1,LSR#2 将R1中的内容右移两位后传送到R0中,左端用零来填充ASR算术右移MOVR0,R1,ASR#2 将R1中的内容右移两位后传送到R0中,左端用第31位的值来填充ROR循环右移MOVR0,R1,ROR#2将R1中的内容循环右移两位后传送到R0中RRX扩展的循环右移MOVR0,R1,RRX#2将R1中的内容进行带扩展(C标志)的循环右移两位后传送到R0中3.2ARM指令的寻址方式
7种常见的寻址方式1、立即寻址:ADDR0,R1,#102、寄存器寻址:MOVR1,R23、寄存器间接寻址:STRR0,[R1]4、基址加变址寻址:LDRR1,[R1,#4]5、相对寻址:BLSUB16、堆栈寻址7、块拷贝(多寄存器)寻址:LDMIAR0,{R1-R5}3.3ARM指令集
程序状态指令分支指令数据处理指令加载/存储指令协处理器指令异常中断指令数据处理指令
数据传送指令
比较指令
测试指令
加法指令
减法指令
逻辑运算指令
乘法指令与乘加指令MOV—数据传送指令如:MOV R1,R0
MVN—数据取反传送指令如:MVN R0,#0
CMP—比较指令
CMP R1,R0CMN—反值比较指令
CMN R1,#100TEQ—相等测试指令
TEQ R1,R2TST—位测试指令
TST R1,#0xfe
ADD—加法指令
ADDR0,R1,#256
ADC—带进位加法指令
ADCR3,R7,R11
SUB—减法指令
SUB R0,R1,#256SBC—带借位减法指令
SUBSR0,R1,R2
RSB—反向减法指令
RSB R0,R1,R2RSC—带借位反向减法指令
RSC R0,R1,R2AND—逻辑与指令
ORR—逻辑或指令EOR—逻辑异或指令
BIC—位清除指令
返回程序状态指令
程序状态指令用于在程序状态寄存器和通用寄存器之间传送数据。MRS—程序状态寄存器到通用寄存器的数据传送指令
例如:MRSR0,CPSR;传送CPSR的内容到R0MSR—通用寄存器到程序状态寄存器的数据传送指令
例如:MSRSPSR,R0;传送R0的内容到SPSR分支指令分支指令用于实现程序流程的跳转,ARM指令集中的分支指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括4条指令:B转移指令BL带返回的转移指令BLX带返回且带状态切换的转移指令BX带状态切换的转移指令
点击右图示例加载/存储指令
加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。加载存储指令有三类:单一数据加载/存储批量数据加载/存储数据交换指令协处理器指令ARM协处理器指令包括5条:CDP(协处理器数操作指令)LDC(协处理器数据加载指令)STC(协处理器数据存储指令)MCR(ARM处理器寄存器到协处理器寄存器的数据传送指令)MRC(协处理器寄存器到ARM处理器寄存器的数据传送指令)。异常中断指令
ARM微处理器所支持的异常中断指令有如下两条:SWI—软件中断指令示例:SWI 0x01
;该指令调用操作系统编号为01的系统例程。BKPT—断点中断指令示例:BKPT 0XF010支持16位的立即数
Thumb指令集指令编码长度为16位,但指令的操作数和指令地址仍是32位;Thumb指令集是ARM指令系统的一个子集
;
Thumb指令集在保留32代码优势的同时,大大的节省了系统的存储空间。3.4Thumb指令集
Thumb指令集
数据处理指令分支指令加载/存储指令异常中断指令SVCimm_8软件中断指令BKPTimm_8断点异常中断指令CPSID禁止指定中断CPSIE允许指定中断WFE等待事件WFI等待中断Thumb-2是一种新型混合指令集,融合了16位和32位指令,用于实现密度和性能的最佳平衡。3.5Thumb-2指令集
Thumb-2指令集
数据处理指令(见P.73表3.12)分支指令与程序处理指令(P.75表3.13)加载与存储指令
(P.75见表3.14)
指令性指令:可以执行的指令伪指令:是一种指示性语句,是不可执行的指令。指令性语句汇编后由相应的机器代码所取代,指示汇编程序为数据分配内存空间或相应寄存器,不产生任何机器代码。ARM处理器支持的伪指令有ADR、LDR和NOP三类。3.6ARM处理器支持的伪指令ADR伪指令功能:将程序相对偏移地址或寄存器偏移地址加载到指定寄存器中。格式:ADR{cond}Rd,expr示例:Mloop MOVR1,#0xf9 ADR R0,mloop ;将mloop对应相对偏移地址传送到R0中
LDR伪指令功能:将32位常量或一个地址加载到到指定寄存器中。格式:LDR{cond}Rd,=[expr|lable-expr]
示例:LDRR1,=0x1234 ;R1=0x1234MloopLDR R2,#0xABCDEF98;R2=0xABCDEF98 LDR R3,=mloop ;将mloop对应地址传送到R3中NOP伪指令功能:空操作,产生所需的ARM无操作代码,用于简单延时,与MOVRd,Rd等效。格式:NOP
示例:
LDRR7,=1000LOOP NOP ;作为延时主体
SUBR7,R7,#1 BNZLOOPARM汇编语言的格式ARM汇编中常用符号ARM汇编中的常用表达式和运算符ARM汇编器所支持的伪指令ARM汇编语言程序结构3.7ARM汇编语言程序设计
语句格式:
{标号}{指令或伪操作}{;注释}标号:从一行的行头开始,不能包含空格指令或伪操作:指令的前面必须有空格或符号(不能顶格写)注释:以“;”开头续行:如果一条语句太长,可将该长语句分为若干行来书写,在行的末尾用“\”表示下一行与本行为同一条语句。ARM汇编语言的格式在汇编语言程序中常用的符号常量:数字常量(32位)、逻辑常量和字符串常量变量:数字变量(8~32)、逻辑变量和字符串变量变量代换:$
在ARM汇编语言程序设计中,经常使用各种符号代替地址、变量和常量等,以增加程序的可读性。尽管符号的命名由编程者决定,但并不是任意的,必须遵循以下的约定。汇编语言程序中的表达式和运算符在汇编语言程序设计中,也经常使用各种表达式。表达式一般由变量、常量、运算符和括号构成。常用的表达式有数字表达式、逻辑表达式和字符串表达式,其运算次序遵循如下的优先级:括号运算符的优先级最高。优先级相同的双目运算符的运算顺序为从左到右。相邻的单目运算符的运算顺序为从右到左,且单目运算符的优先级高于其他运算符。ARM汇编器所支持的伪指令在ARM的汇编程序中,有如下几种伪操作:符号定义伪操作数据定义伪操作汇编控制伪操作其他伪操作。类型格式功能描述符号定义伪指令GBLA全局变量名定义一个全局数值变量,并初始化为0GBLL全局变量名定义一个全局逻辑变量,并初始化为FGBLS全局变量名定义一个全局字符变量,并初始化为空LCLA局部变量名定义一个局部数据变量,并初始化为0LCLL局部变量名定义一个局部逻辑变量,并初始化为FLCLS局部变量名定义一个局部字符变量,并初始化为空变量名
SETA表达式给一个数值变量赋值变量名
SETL表达式给一个逻辑变量赋值变量名
SETS表达式给一个字符变量赋值名称
RLIST{寄存器列表}对一个通用寄存器列表定义名称数据定义伪指令标号
DCB表达式分配一片连续的字节存储单元并对数据初始化标号
DCW表达式分配一片连续的半字(2字节)存储单元并对数据初始化标号
DCD表达式分配一片连续的字节(4字节)存储单元并对数据初始化标号
DCQ表达式分配一片连续的双字节(8字节)存储单元并对数据初始化标号
SPACE表达式分配一片连续的存储区域并将初始化表达式个为0汇编控制伪指令IF逻辑表达式
指令序列1ELSE指令序列2ENDIF有条件的按照符合逻辑表达式条件汇编指定的指令序列1,不满足条件,则执行指令序列2WHILE逻辑表达式
指令序列WEND如果满足逻辑表达式条件,由执行指令序列,否则不执行指令序列其他伪指令AREA段名,属性1,属性2...CODE属性DATA属性READONLY属性READWRITE属性ALLGN属性NOINIT属性COMMO定义一个段如代码段或数据段定义一个代码段,默认只读READONLY定义一个数据码,可读写READWRITE只读读写对齐方式,,按照2ALLGN字节对齐ALLGN=3,8字节对齐未初始化通用段属性CODE16CODE32指示以下指令为16位Thumb指令代码指示以下指令为32位ARM指令代码ENTRY汇编语言程序入口END汇编语言程序结束名称
EQU表达式[,类型]等于伪指令EXPORT标号全局标号声明伪指令IMPORT标号引入一个标号伪指令EXTERN标号外部标号引用声明伪指令汇编语言的程序结构AREA Init,CODE,READONLYENTRYStartLDRR0,=0x3FF5000MOVR1,#0xFF;或LDRR1,=0xFFSTRR1,[R0]LDRR0,=0x3FF5008MOVR1,#0x01 ;或LDRR1,=0x01STRR1,[R0]┉┉Handler1PROC ;子程序名Handler1: ;子程序主体
ENDP ;子程序结束
END ;整个汇编语言程序结束ARM汇编语言子程序都有一个子程序的名称,也有子程序的返回指令,采用MOVPC,LR返回。如果一个子程序不在调用的同一个文件中,则需要先用IMPORT声明是外部的,IMPORT声明可以放在AREA语句之前。在ARM汇编语言程序中,子程序的调用一般是通过BL指令来实现的。BL子程序名汇编语言的子程序调用与返回CMSIS(CortexMicrocontrollerSoftwareInterfaceStandard)是ARMCortex™微控制器软件接口标准,是Cortex-M处理器系列与供应商无关的硬件抽象层。使用CMSIS,可以为处理器和外设实现一致且简单的软件接口,从而简化软件的重用、缩短微控制器新开发人员的学习过程,并缩短新产品上市时间。3.8CMSIS及其规范基于CMSIS应用程序的软件层次(1)内核外设访问层(CPAL=CorePeripheralAccessLayer)。由ARM公司负责实现,包括对寄存器名称、地址的定义,对核寄存器、NVIC、调试子系统的访问接口定义等。(2)中间件访问层(MWAL=MiddlewareAccessLayer)。
定义了访问中间件的一些通用API函数,该层也有ARM公司负责,但芯片厂家也要根据自己器件的设备特性更新。(3)片上外设访问层(DPAL,DevicePeripheralAccessLayer)。
由芯片厂商负责实现,其实现与CPAL类似,负责对硬件寄存器地址以及外设访问接口进行定义。该层可调用CPAL层提供的接口函数,同时根据设备特性对异常向量表进行扩展,以处理相应外设的中断请求。CMSIS包含三个层次(1)CMSIS的C代码遵照MISRA2004规则。(2)使用标准ANSIC头文件<stdint.h>定义的标准数据类型,在stm32f10x.h中包含(3)#define定义的包含表达式的常数必须用括号括起来。查看stm32f10x.h(4)变量和参数必须有完全的数据类型。在stm32f10x.h中定义(5)CPAL(内核外设访问层)层的函数必须是可重入的。(6)CPAL层的函数不能有阻塞代码,也就是说等待、查询等循环必须在其他的软件层中。(7)定义每个异常/中断的处理函数:每个异常处理函数的后缀是_Handler,每个中断处理器函数的后缀是_IRQHandler。如看门狗中断处理函数WDT_IRQHandler,查看STM32F10x的中断向量。(8)默认的异常中断处理器函数(弱定义)包含一个无限循环。(9)用#define将中断号定义为后缀为_IRQn的名称。CMSIS代码基本规范(1)定义外设访问函数、中断函数名称时首字母大写。(2)对于某个外设相应的函数,一般用该外设名称作为其前缀。(3)按照Doxygen规范撰写函数的注释,注释使用C90风格(/*注释*/)或者C++风格(//注释),注释内容如下:①一行函数简介;②参数的详细解释;③返回值的详细解释;④函数功能的详细描述。CMSIS代码推荐规范CMSIS文件结构(例:以STM32F10x系列为例)BootLoader:是应用程序运行之前的引导加载程序,类似于PC的BIOS程序,目的是将PC指针引导到C语言程序main入口。ARM处理器启动过程:3.9BootLoard及启动文件BootLoader主要任务启动文件的功能主要包括链接地址描述以及各种初始化的程序两大类,实现以下功能:(1)描述文件实现功能描述文件的功能主要包括指定程序下载的地址和指定程序执行的地址。(2)初始化程序的功能初始化程序的功能主要包括异常向量初始化、内存环境初始化以及其它硬件初始化。在MDK-ARM(KEIL)环境下浏览一下启动文件,具体分析详见P.95~P.100一、嵌入式C程序设计基础(P.100-P.107)
数据类型、运算符、常用语句等。二、嵌入式程序设计过程(P.107)三、嵌入式系统的程序结构(P.109-P.110)四、汇编语言与C语言混合编程(P.111)五、基于CMSIS的固件库及其使用(P.113)3.10嵌入式C程序设计嵌入式C数据类型位数C和C99(stdint.h)数据类型含义有符号数范围无符号数范围8charint8_tuint8_t字节数有符号字节数无符号字节数-2n-1~2n-1-1(n=8)0~2n-1(n=8)16shortint16_tuint16_t16位数16位有符号数16位无符号数-2n-1~2n-1-1(n=16)0~2n-1(n=16)32intint32_tuint32_tlongfloat32位整型数32位有符号数32位无符号数32位数整型数32位浮点数,8个点-2n-1~2n-1-1(n=32)0~2n-1(n=32)64longlongint64_tuint64_tdoublelongdouble64位整型数64位有符号数64位无符号数双精度浮点数,16个点长双精度浮点数,32个点-2n-1~2n-1-1(n=64)0~2n-1(n=64)嵌入式C运算符赋值运算=赋值运算符变量=表达式/=除后赋值变量/=表达式*=乘后赋值变量*=表达式%=取模后赋值变量%=表达式+=加后赋值变量+=表达式-=减后赋值变量-=表达式<<=左移后赋值变量<<=表达式>>=右移后赋值变量>>=表达式&=与后赋值变量&=表达式|=或后赋值变量|=表达式^=异或后赋值变量^=表达式条件运算符?:条件运算符表达式1?表达式2:表达式3特殊运算符[]数据下标数组名[常数表达式]()圆括号(表达式)或函数名(形参表).成员选择(对象)对象.成员表->成员选择(指针)对象指针->成员表指针运算符*取值运算符*指针变量&取地址运算符&变量名长度运算符sizeof长度运算符Sizeof(表达式)逗号运算符,逗号运算符表达式,表达式,表达式,......优先级运算符名称及含义使用形式算术运算+加表达式+表达式-减表达式-表达式*乘表达式*表达式/除表达式/表达式%余数(取模)整数表达式%整数表达式++自增运算符++变量名或变量名++--自减运算符--变量名或变量名--关系运算>大于表达式>表达式<小于表达式<表达式>=大于等于表达式>=表达式<=小于等于表达式<=表达式==等于表达式==表达式!=不等于表达式!=表达式逻辑运算&&逻辑与表达式&&表达式||逻辑或表达式||表达式!逻辑非运算符!表达式位操作&按位与表达式&表达式^按位异或表达式^表达式|按位或表达式|表达式<<左移变量<<表达式>>右移变量>>表达式~按位取反~表达式嵌入式应用中常用运算符举例uint32_ttemp;例1:让temp的指定位n置位temp=temp|(1<<n);//n=0~31或temp|=(1<<n);//n=0~31例2:让temp的指定位n清0temp=temp&~(1<<n);//n=0~31temp&=~(1<<n);//n=0~31如果n=1,则可用temp=temp&0xFFFFFFFD;或temp&=0xFFFFFFFD;最好用temp&=(1<<1);//简单明了,容易检查嵌入式应用中常用运算符举例续例3:让temp的指定位n取反法一实现: if((temp&(1<<n))!=0)temp&=~(1<<n); elsetemp|=(1<<n)法二实现: temp=temp^(1<<n);
或temp^=(1<<n);例4:LED1闪烁(LED1为GPIO的PD2引脚)#defineLED1(x)((x)?(GPIO_SetBits(GPIOD,GPIO_Pin_2)):(GPIO_ResetBits(GPIOD,GPIO_Pin_2)));
LED1(0);Delay();LED1(1);Delay();嵌入式应用中常用运算符举例续例3:让temp的指定位n取反法一实现: if((temp&(1<<n))!=0)temp&=~(1<<n); elsetemp|=(1<<n)法二实现: temp=temp^(1<<n);
或temp^=(1<<n);嵌入式应用中常用运算符举例续例4:LED1闪烁(LED1为GPIO的PD2引脚)法一:利用?:运算符定义指示灯引脚,然后引用#defineLED1(x)((x)?(GPIO_SetBits(GPIOD,GPIO_Pin_2)):(GPIO_ResetBits(GPIOD,GPIO_Pin_2))); while(1){
LED1(0);Delay(); LED1(1);Delay();}法二:利用异或运算符直接操作指定引脚
假设已经定义一个GPIOD结构体,其中ODR为输出寄存器
while(1) { GPIOD->ODR^=(1<<2); Delay(); }嵌入式系统中常用的C语言语句(P104~107)1、表达式语句2、复合语句3、条件语句(if/else)4、循环语句(for/while)5、swith语句6、break语句7、continue语句8、返回语句嵌入式程序设计过程嵌入式应用程序有4种基本的处理流程:
(1)基于轮询的处理流程;
(2)基于中断驱动的处理流程;
(3)基于轮询与中断相结合的处理流程;
(4)基于处理并发任务的处理流程。嵌入式系统的程序结构轮询处理流程轮询结构适用于简单应用,程序设计上实际上是一个死循环,在这个循环体内,查询满足执行不同条件的任务,查询的次序也决定了任务的优先级。无RTOS下的轮询结构中断驱动处理流程采用中断驱动方式,是在满足任务处理条
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年下半年广东佛山顺德区陈村镇招考机关聘员29人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年江苏省镇江市公需课培训(专业技术人员继续教育)试题及答案
- 2025年下半年广东佛山共青团佛山市委员会招考2人易考易错模拟试题(共500题)试卷后附参考答案
- 吕梁市人民医院出院标准把握考核
- 2025年下半年广东中山市南头镇人民政府招聘合同制工作人员4人重点基础提升(共500题)附带答案详解
- 晋中市中医院肛肠科疑难病例讨论考核
- 2025年医院卫生院应急物资管理制度
- 2025年行政执法证考试题库答案注解
- 2025年行政考核法律试题及答案
- 2025年下半年崇左市总工会招考财会工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 2025新疆喀什地区网信系统招聘事业单位人员18人笔试备考试题及答案解析
- 2025公需课《人工智能赋能制造业高质量发展》试题及答案
- 【MOOC】研究生英语科技论文写作-北京科技大学 中国大学慕课MOOC答案
- (中职)旅游概论第四章 旅游业课件
- JJG 700 -2016气相色谱仪检定规程-(高清现行)
- 齐鲁医学可用于普通食品的新资源食品及药食两用原料名单
- GB∕T 12234-2019 石油、天然气工业用螺柱连接阀盖的钢制闸阀
- 礼堂舞台机械灯光、音响扩声系统工程设计方案
- 政务礼仪-PPT课件
- 三黄丸_千金卷二十一引巴郡太守方_方剂加减变化汇总
- 部编版语文五年级上册--第五单元习作单元教材材解读和教学目标课件
评论
0/150
提交评论