【vfp精品源码栏目提醒】:本文主要为网学会员提供“【精品】第10章 2009年 C与ARM混合编程 - 电子电信”,希望对需要【精品】第10章 2009年 C与ARM混合编程 - 电子电信网友有所帮助,学习一下!
ARM嵌入式技术与教学安排 陈 赜 clshust163.com 2010.122013-3-12 1 一、ARM汇编语言的伪操作、宏指令 与伪指令2013-3-12 2 ARM汇编语言的伪操作、宏指令与伪 指令 伪操作、宏指令及伪指令概念 两种常见的ARM编译环境 ADS编译环境下的伪操作 GNU编译环境下的伪操作 ARM汇编语言的伪指令2013-3-12 3 一伪操作、宏指令 及伪指令的概念 伪操作是ARM汇编语言程序里的一些特殊指令助记符 ,主要是为完成汇编程序做各种准备工作,在源程序 进行汇编时由汇编程序处理,而不是在处理器运行期 间由机器执行。
宏指令是一段独立的程序代码,它通过伪操作来定义 。
通过宏名来调用宏,并可以设置相应的参数。
宏定 义本身不会产生代码,只是在调用它时把宏体插入到 源程序中。
伪指令也是ARM汇编语言程序里的特殊指令助记符, 也不在处理器运行期间由机器执行,它们在汇编时将 被合适的机器指令代替成ARM或Thumb指令从而实 现真正指令操作。
2013-3-12 4二两种常见的ARM编译开发环境 ADS/SDT IDE开发环境:它由ARM公司开 发,使用了CodeWarrior公司的编译器; 集成了GNU开发工具的IDE开发环境:: 它由GNU的汇编器as、交叉编译器gcc、 和链接器ld等组成。
2013-3-12 5 三ADS编译环境下的伪操作和宏指令 ADS编译环境下的伪操作可分为以下几类: 符号定义(Symbol Definition)伪操作 数据定义(Data Definition)伪操作 汇编控制(Assembly Control)伪操作 信息报告(Reporting)伪操作 其他(Miscellaneous)伪操作2013-3-12 6符号定义伪操作 伪操作 语法格式 作用 GBLA GBLA Variable 声明一个全局的算术变量,并将其初始化成0。
GBLL GBLL Variable 声明一个全局的逻辑变量,并将其初始化成 FALSE。
GBLS GBLS Variable 声明一个全局的字符串变量,并将其初始化成空串 “”。
LCLA LCLA Variable 声明一个局部的算术变量,并将其初始化成0。
LCLL LCLL Variable 声明一个局部的逻辑变量,并将其初始化成 FALSE。
LCLS LCLS Variable 声明一个局部的串变量,并将其初始化成空串“”。
SETA SETA Variable expr 给一个全局或局部算术变量赋值。
SETL SETL Variable expr 给一个全局或局部逻辑变量赋值。
SETS SETS Variable expr 给一个全局或局部字符串变量赋值。
RLIST name LIST { list of 为一个通用寄存器列表定义名称。
registers} CN name CN expr 为一个协处理器的寄存器定义名称。
CP name CP expr 为一个协处理器定义名称。
DN/SN name DN/SN expr DN/SN为一个双精度/单精度的
VFP寄存器定义名 称。
FN name FN expr 为一个FPA浮点寄存器定义名称。
2013-3-12 7数据定义伪操作 伪操作 语法格式 作用 LTORG LTORG 声明一个数据缓冲池(也称为文字池)的开始。
MAP MAP expr { , base- 定义一个结构化的内存表(Storage Map)的首地址。
register} FIELD {label} FIELD expr 定义一个结构化内存表中的数据域。
SPACE {label} SPACE expr 分配一块连续内存单元,并用0初始化。
DCB label DCB expr { , 分配一段字节内存单元,并用expr初始化。
expr} DCD/ label DCD expr , 分配一段字内存单元。
DCDU expr… DCDO {label} DCDO expr{, 分配一段字对齐的字内存单元。
expr}… DCFD/ label DCFD { U } 为双精度的浮点数分配字对齐的内存单元。
DCFDU fpliteral{,fpliteral}… DCFS/ label DCFS { U } 为单精度的浮点数分配字对齐的内存单元。
DCFSU fpliteral {,fpliteral}… DCI label DCI expr { , 在ARM代码中分配一段字对齐的内存单元 在Thumb代 expr}… 码中,分配一段半字对齐的半字内存单元。
DCQ/ label DCQ{U}{-} 分配一段以双字(8个字节)为单位的内存 DCQU literal { , { - } literal }2013-3-12 8 … DCW/ label DCW { U } expr DCW用于分配一段半字对齐的半字内存单元。
DCWU {,expr}…汇编控制伪操作 伪操作 语法格式 作用 IF,ELSE及 IF logical expression 能够根据条件把一段源代码包括在汇编 ENDIF … 语言程序内或者将其排除在程序之外。
ELSE … ENDIF WHILE 及 WHILE logical expression 能够根据条件重复汇编相同的一段源代 WEND … 码。
WEND MACRO 、 MACRO MACRO标识宏定义的开始,MEND标 MEND 及 label macroname {parameter{, 识宏定义的结束。
MERIT用于从宏中 MEXIT parameter}…} 跳转出去。
用MACRO和MEND定义的 … ;宏代码 一段代码,称为宏定义体。
通过宏名称 MEND 来调用宏。
2013-3-12 9信息报告伪操作 伪操作 语法格式 作用 ASSERT ASSERT logical 对汇编程序的第二遍扫描中,如果其中ASSERT中条 expression 件不成立,ASSERT伪操作将报告该错误信息。
INFO INFO numeric- 在汇编处理过程的第一遍扫描或者第二遍扫描时 expression , string- INFO伪操作报告诊断信息。
expression OPT OPT n 通过OPT伪操作可以在源程序中设置列表选项。
TTL TTL title 在列表文件的每一页的开头插入一个标题。
SUBT SUBT subtitle 在列表文件的每一页的开头插入一个子标题。
2013-3-12 10其他伪操作 伪操作 语法格式 作用CODE16 CODE16 告诉汇编编译器后面的指令序列为16位的Thumb指令CODE32 CODE32 告诉汇编编译器后面的指令序列为32位的ARM指令。
EQU name EQU expr{,type} 为数字常量、基于寄存器的值和程序中的标号(基于PC的值)定 义一个字符名称。
AREA AREA sectionname{,attr} 定义一个代码段或者数据段。
{,attr}…ENTRY ENTRY 指定程序的入口点。
END END 告诉编译器已经到了源程序结尾。
ALIGN ALIGN {expr{,offset}} 通过添加补丁字节使当前位置满足一定的对齐方式。
EXPORT/ EXPORT symbol 声明一个符号可以被其他文件引用,相当于声明了一个全局变GLOBAL {〔WEAK〕} 量。
IMPORT IMPORT symbol {WEAK} 告诉编译器当前的符号不是在本源文件中定义的,而是在其他源 文件中定义的,在本源文件中可能引用该符号。
EXTERN EXTERN symbol {〔WEAK 告诉编译器当前的符号不是在本源文件中定义的,而是在其他源 〕} 文件中定义的,在本源文件中可能引用该符号。
GET/ GET filename 将一个源文件包含到当前源文件中,并将被包含的文件在其当前INCLUDE 位置进行汇编处理。
INCBIN INCBIN filename 将一个文件包含到当前源文件中,被包含的文件不进行汇编处 理。
KEEP KEEP{symbol} 告诉编译器将局部符号包含在目标文件的符号表中。
NOFP NOFP 禁止源程序中包含浮点运算指令。
REQUIRE REQUIRE lable 指定段之间的相互依赖关系。
RN name RN expr 为一个特定的寄存器定义名称。
ROUT name ROUT 定义局部变量的有效范围。
2013-3-12 11四 GNU编译环境下的伪操作和宏指令 GNU编译环境下的伪操作可分为以下 几类: 常量编译控制伪操作 汇编程序代码控制伪操作 宏及条件编译控制伪操作 其他伪操作2013-3-12 12常量编译控制伪操作 伪操作 语法格式 作用 .byte .byte expr ,expr … 分配一段字节内存单元,并用expr初始化。
.hword/.shor .hword expr ,expr … 分配一段半字内存单元,并用expr初始化。
t .ascii .ascii expr ,expr … 定义字符串expr(非零结束符)。
.asciz /.string .asciz expr ,expr … 定义字符串expr(以/0为结束符)。
.float/.single .float expr ,expr … 定义一个32bit IEEE 浮点数expr。
.double .double expr ,expr … 定义64bit IEEE浮点数expr。
word/.long .word expr ,expr … 分配一段字内存单元,并用expr初始化。
/.int .fill .fill repeat ,size, 分配一段字节内存单元,用size长度value填充repeat value 次。
.zero .zero size 分配一段字节内存单元,并用0填充内存。
.space/.skip .space size value 分配一段内存单元,用value将内存单元初始化。
2013-3-12 13汇编程序代码控制伪操作 伪操作 语法格式 作用 .section .section expr 定义域中包含的段。
.text .text subsection 将操作符开始的代码编译到代码段或代码段子段。
.data .data subsection 将操作符开始的数据编译到数据段或数据段子段。
.bss .bss subsection 将变量存放到.bss段或.bss段的子段。
.code 16/.thumb .code 16 表明当前汇编指令的指令集选择Thumb指令集。
.thumb .code 32/.arm .code 32 表明当前汇编指令的指令集选择ARM指令集。
.arm .end .end 标记汇编文件的结束行,即标号后的代码不作处理。
.include .include “filename” 将一个源文件包含到当前源文件中。
.align/.balign .align alignment 通过添加填充字节使当前位置满足一定的对齐方式。
2013-3-12 ,fill ,max 14宏及条件编译控制伪操作 伪操作 语法格式 作用 .macro 、 .macro .macro伪操作标识宏定义的开始,.endm标识宏 .exitm 及 acroname{ 定义的结束。
用.macro及.endm定义一段代码, .endm parameter{, 称为宏定义体。
.exitm伪操作用于提前退出宏。
parameter}…} … .endm . ifdef,.else .ifdef condition 当满足某条件时对一组语句进行编译,而当条 及.endif … 件不满足时则编译另一组语句。
其中else可以缺 .else 省。
… .endif2013-3-12 15其他伪操作 伪操作 语法格式 作用.eject .eject 在汇编符号列表文件中插入一分页符。
.list .list 产生汇编列表(从 .list 到 .nolist)。
.nolist .nolist 表示汇编列表结束处。
.title .title “heading” 使用“heading ”作为标题。
.sbttl .sbttl “heading” 使用“heading”作为子标题。
.ltorg .ltorg 在当前段的当前地址(字对齐)产生一个文字池。
.req .req name,expr 为一个特定的寄存器定义名称。
.err .err 使编译时产生错误报告。
.print .print string 打印信息到标准输出。
2013-3-12 16 .fail .fail expr 编译汇编文件时产生警告。
五ARM汇编语言的伪指令ARM中伪指令不是真正的ARM指令或Thumb指令,它们在编译器对源程序进行汇编处理时被替换成相应的ARM或Thumb指令序列。
伪指令 语法格式 作用 ADR ADR {cond} register 将基于PC或基于寄存器的地址值读取到寄存器 ,expr 中。
小范围的地址读取。
ADRL ADRL { cond } 将基于PC或基于寄存器的地址值读取到寄存器 register,expr 中。
中等范围的地址读取。
LDR LDR { cond } 将一个32位的立即数或者一个地址值读取到寄存 register , 〔 expr 器中。
大范围的地址读取。
label-expr〕 NOP NOP 在汇编时将被替换成ARM中的空操作。
2013-3-12 17 二、ARM汇编语言程序设计2013-3-12 18ARM汇编语言程序设计 ARM汇编中的文件格式 ARM汇编语言语句格式 ARM汇编语言程序格式 ARM汇编语言编程的重点2013-3-12 19 一、ARM汇编中的文件格式 ARM源程序文件(可简称为源文件)可以由任意一 种文本编辑器来编写程序代码,它一般为文本格式。
在 ARM程序设计中,常用的源文件可简单分为以下几种: 源程序文件 文件名 说明 汇编程序文件 .S 用 ARM 汇 编 语 言 编 写 的 ARM 程 序 或 Thumb程序。
C程序文件 .C 用C语言编写的程序代码。
头文件 .H 为了简化源程序,把程序中常用到的常 量命名、宏定义、数据结构定义等等单 独放在一个文件中,一般称为头文件。
2013-3-12 20
上一篇:
《数据库VFP60》教学网站的设计开发
下一篇:
法律专业开题报告范文