汇编控制伪指令用于控制汇编程序的执行流程,常用汇编控制伪指令包括IF、ELSE、ENDIF、WHILE、WEND、MACRO、MEND、MEXIT。例如:2.循环控制伪指令WHILE、WEND格式:功能:该组伪指令能根据条件的成立与否决定是否循环执行某个指令序列。包含在MACRO和MEND之间的指令序列称为宏定义体。MACRO、MEND伪指令可以嵌套使用。4.宏退出伪指令MEXIT格式:MEXIT功能:MEXIT用于从宏定义中跳转出去。......
2023-11-21
汇编结构(Assembly Structure)伪指令用于建立汇编程序的结构框架,常用的伪指令包括以下几条。
1.段定义伪指令AREA
格式:AREA 段名 属性1,属性2,……
功能:AREA伪指令用于定义一个代码段或数据段。其中,段名若以数字开头,则该段名需用“|”括起来,如|1_test|。
注意:一个汇编语言程序至少要包含一个段,当程序太长时,也可以将程序分为多个代码段和数据段。
属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔。常用属性如下:
(1)CODE属性:用于定义代码段,默认为READONLY。
(2)DATA属性:用于定义数据段,默认为READWRITE。
(3)READONLY属性:指定本段为只读,代码段默认为READONLY。
(4)READWRITE属性:指定本段为可读可写,数据段的默认属性为READWRITE。
(5)ALIGN属性:使用方式为“ALIGN 表达式”。在默认时,ELF(可执行连接文件)的代码段和数据段是按字对齐的,表达式的取值范围为0~31,相应的对齐方式为2的表达式次幂。
(6)COMMON属性:该属性定义一个通用的段,不包含任何的用户代码和数据。各源文件中同名的COMMON段共享同一段存储单元。
上述常用属性中,ALIGN实际也是一个伪指令。
格式:ALIGN{表达式{,偏移量}}
功能:ALIGN伪指令可通过添加填充字节的方式,使当前位置满足一定的对齐方式。其中,表达式的值用于指定对齐方式,可能的取值为2的幂,如1、2、4、8、16等。若未指定表达式,则将当前位置对齐到下一个字的位置。偏移量也为一个数字表达式,若使用该字段,则当前位置的对齐方式为2的表达式次幂+偏移量。
例如:
2.状态切换伪指令CODE16、CODE32
格式:CODE16(或CODE32)
功能:CODE16伪指令通知编译器,其后的指令序列为16位Thumb指令。CODE32伪指令通知编译器,其后的指令序列为32位ARM指令。
注意:若在汇编源程序中同时包含ARM指令和Thumb指令,则可用CODE16伪指令通知编译器其后的指令序列为16位Thumb指令,用CODE32伪指令通知编译器其后的指令序列为32位ARM指令。因此,在使用ARM指令和Thumb指令混合编程的代码中,可用这两条伪指令进行切换,但注意它们只通知编译器其后指令的类型,并不能对处理器进行状态切换。
例如:
3.程序入口伪指令ENTRY
格式:ENTRY
功能:ENTRY伪指令用于指定汇编程序的入口点。
注意:在一个完整的汇编程序中至少要有一个ENTRY,当有多个ENTRY时,程序的真正入口点由链接器指定,但在一个源文件里最多只能有一个ENTRY,也可以没有。
例如:
4.程序结束伪指令END
格式:END(www.chuimin.cn)
功能:END伪指令用于通知编译器已经到了源程序的结尾。
例如:
5.标号输出伪指令EXPORT(或GLOBAL)
格式:EXPORT 标号{[WEAK]}
功能:EXPORT伪指令用于在程序中声明一个全局的标号,该标号可在其他文件中引用。
注意:EXPORT可用GLOBAL代替。标号在程序中区分大小写,[WEAK]选项声明其他同名标号优先于该标号被引用。
例如:
6.标号输入伪指令IMPORT
格式:IMPORT 标号{[WEAK]}
功能:IMPORT伪指令用于通知编译器要使用的标号在其他的源文件中定义,但要在当前源文件中引用,而且无论当前源文件是否引用该标号,该标号都会被加入当前源文件的符号表中。
注意:标号在程序中区分大小写,[WEAK]选项表示当所有的源文件都没有定义这样一个标号时,编译器也不给出错误信息,在多数情况下将该标号置为0,若该标号为B或BL指令引用,则将B或BL指令置为NOP操作。
例如:
7.标号引入伪指令EXTERN
格式:EXTERN 标号{[WEAK]}
功能:EXTERN伪指令用于通知编译器要使用的标号在其他源文件中定义,但要在当前源文件中引用。与伪指令IMPORT不同的是,如果当前源文件实际并未引用该标号,则该标号就不会被加入当前源文件的符号表中。
注意:标号在程序中区分大小写,[WEAK]选项表示当所有的源文件都没有定义这样一个标号时,编译器也不给出错误信息,在多数情况下将该标号置为0,若该标号为B或BL指令引用,则将B或BL指令置为NOP操作。
例如:
8.源文件包含伪指令GET(或INCLUDE)
格式:GET 文件名
功能:GET伪指令用于将一个源文件包含到当前的源文件中,并将被包含的源文件在当前位置进行汇编处理。可以使用INCLUDE代替GET。
注意:汇编程序中常用的方法是在某源文件中定义一些宏指令,先用EQU定义常量的符号名称,用MAP和FIELD定义结构化的数据类型,然后用GET伪指令将这个源文件包含到其他源文件中,使用方法与C语言中的“include”相似。
例如:
9.目标文件包含伪指令INCBIN
格式:INCBIN 文件名
功能:INCBIN伪指令用于将一个目标文件或数据文件包含到当前的源文件中,被包含的文件不作任何变动地存放在当前文件中,编译器从其后开始继续处理。
例如:
有关嵌入式系统原理及应用:基于ARM Cortex-M4体系结构的文章
汇编控制伪指令用于控制汇编程序的执行流程,常用汇编控制伪指令包括IF、ELSE、ENDIF、WHILE、WEND、MACRO、MEND、MEXIT。例如:2.循环控制伪指令WHILE、WEND格式:功能:该组伪指令能根据条件的成立与否决定是否循环执行某个指令序列。包含在MACRO和MEND之间的指令序列称为宏定义体。MACRO、MEND伪指令可以嵌套使用。4.宏退出伪指令MEXIT格式:MEXIT功能:MEXIT用于从宏定义中跳转出去。......
2023-11-21
数据定义伪指令用来为数据分配存储单元,建立变量和存储单元之间的联系,并可实现已分配存储单元的初始化。每个双精度浮点数占据两个字单元。例如:9.数据域定义伪指令FIELD格式:标号FIELD表达式功能:FIELD伪指令用于定义一个结构化内存表中的数据域。MAP伪指令定义内存表的首地址,FIELD伪指令定义内存表中的各个数据域,并可以为每个数据域指定一个标号供其他指令引用。......
2023-11-21
STM32F4处理器的DAC模块是12位数字输入,属于电压输出类型。DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐或右对齐。DAC可以通过引脚输入参考电压Vref+以获得更精确的转换结果。STM32F4处理器的DAC模块主要特点如下:2个DAC转换器:每个转换器对应1个输出通道。双DAC通道同时或分别转换。每个通道都有DMA功能。单DAC通道有以下3种情况。12位数据左对齐:用户将数据写入DAC_DHR12Lx[15:4]位。......
2023-11-21
ARM公司在经典处理器ARM11以后的产品改用Cortex命名,并分成A、R和M三类,旨在为各种不同的市场提供服务。Cortex系列属于ARMv7架构。ARMv7架构定义了三大分工明确的系列,其中,A系列面向尖端的基于虚拟内存的操作系统和用户应用,R系列面向实时系统,M系列面向微控制器。由于应用领域不同,基于ARMv7架构的Cortex处理器系列所采用的技术也不相同,基于ARMv7A的处理器称为Cortex-A系列,基于ARMv7R的处理器称为Cortex-R系列,基于ARMv7M的处理器称为Cortex-M系列。......
2023-11-21
ARM微处理器已经遍及工业控制、消费类电子通信系统、网络系统、无线系统各类产品市场,基于ARM技术的微处理器应用占据了32位RISC微处理器80%以上的市场份额。ARM嵌入式技术在联网方面的优势,为弧焊电源实现网络化控制奠定了基础。ARM9可以达到180~200MHz的工作速率,它能驱动的周边装置比ARM7多,应用范围也比较广。ATMEL公司的AT91AM9200是基于ARM9的,具有丰富的接口功能。ARM芯片通信接口能力强,一般用于焊接过程及设备人机界面系统的核心芯片。......
2023-06-26
DAC模拟输出的配置过程需要使用STM32的库函数,函数定义在文件stm32f4××_dac.c和头文件stm32f4××_dac.h中。该函数中使用了参数设置结构体类型DAC_InitTypeDef,其定义如下:实例代码如下:4.使能DAC转换通道初始化DAC之后,就要使能DAC转换通道了,使用库函数的方法如下:5.设置DAC的输出值通过上述设置步骤,DAC就能开始工作了。第2个参数就是DAC的输入值了,初始化设置为0。......
2023-11-21
Keil MDK软件源自德国的KEIL公司,是RealView MDK的简称。MDK5.10版本使用μVision5集成开发环境,是针对ARM处理器,尤其是Cortex M内核处理器的最佳开发工具。Keil MDK软件的功能特点如下:完美支持Cortex-M、Cortex-R4、ARM7和ARM9系列器件。大量的项目例程帮助用户快速熟悉MDK-ARM强大的内置特征。符合Cortex微控制器软件接口标准。ARM公司负责的是芯片内核的架构设计,而芯片生产公司根据ARM公司提供的芯片内核标准设计自己的芯片。......
2023-11-21
相关推荐