SP第4章语言和伪指令_第1页
SP第4章语言和伪指令_第2页
SP第4章语言和伪指令_第3页
SP第4章语言和伪指令_第4页
SP第4章语言和伪指令_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章汇编语言和伪指令1采用汇编语言,用户可以直接操作到处理器内部的工作寄存器和片内RAM单元,能把数据的处理过程表述得非常具体和详实。汇编语言并不独立于具体机器,是一种非常通用的低级程序设计语言。4.1汇编语言程序设计24.1.1汇编语言源程序格式典型的汇编语言格式是四段式格式:标号段:操作码段操作数段;注释段

LABLE:OPCODEOPRAND;COMMENT其中操作码段是必选项,任何语句都必须有操作码段。如果是多个操作数,中间用逗号隔开。P1:ADD#1;ACC加1,结果保存在ACC中BCNDP1,LEQ;如果ACC≤0则转到P134.1.2常用伪指令介绍[指令语句]

每一条指令语句在源程序汇编时都要产生可供计算机执行的指令代码(即目标代码),所以这种语句又叫可执行语句。每一条指令语句表示计算机具有的一个基本能力,如数据传送,两数相加或相减,移位等,而这种能力是在目标程序(指令代码的有序集合)运行时完成的,是依赖于汁算机内的中央处理器(CPU)、存储器、I/O接口等硬件设备来实现的。

4[伪指令语句]

伪指令语句是用于指示汇编程序如何汇编源程序,所以这种语句又叫命令语句。例如源程序中的伪指令语句告诉汇编程序:该源程序如何分段,有哪些逻辑段在程序段中哪些是当前段,它们分别由哪个段寄存器指向;定义了哪些数据,存储单元是如何分配的等等。伪指令语句除定义的具体数据要生成目标代码外,其他均没有对应的目标代码。伪指令语句的这些命令功能是由汇编程序在汇编源程序时,通过执行一段程序来完成的,而不是在运行目标程序时实现的。

5

6条件汇编伪指令以下分两种情况介绍条件汇编伪指令。(1)第一种情况:.ifwell-definedexpression.elseifwell-definedexpression.else.endif(2)第二种情况:.loop [well-definedexpression].break[well-definedexpression].endloop74.2C语言程序设计用汇编语言编写程序是一件繁杂的事情,开发周期相对较长。因此各个DSP公司都推出了相应的高级语言(如C语言),使得DSP芯片的软件可以直接使用高级语言写成。,从而大大提高DSP芯片的开发速度,也使程序的修改和移植变得十分方便。

C语言程序文件的后缀名为.c。在该程序中实现DSP要完成的功能,由开发人员编写。8C编译器概述TMS320C2xxC编译器是一个功能齐全的优化编译器。它的主要功能是把标准的ANSIC语言程序转换成TMS320DSP芯片能够识别执行的汇编语言代码。94.3调试时需要的五种文件调试时需要以下五种文件:(1)C语言程序(.c)或者汇编语言文件(.asm)(2)头文件(.h)(3)库文件(rts2xx.lib)(4)命令文件(.cmd)(5)复位和中断向量文件vectors.asm104.3.1C语言文件文件或汇编语言文件该文件的扩展名为:*.c或*.asm;该文件内容为DSP所要完成功能的源程序代码。114.3.2头文件头文件的扩展名为:*.h;汇编语言头文件:包含了各种寄存器的名称和地址,此外,用户还可以定义各种常量和宏;C语言头文件:包含了C语言定义下的各种语言定义下的各种寄存器和地址,还包含支持C语言的的各种库函数;头文件必须放在C源程序的开始,并使用“#include”语句声明和添加。或者在汇编主程序的开始使用汇编伪指令.include、.copy对头文件进行调用。12头文件部分寄存器和宏定义举例:;IMR.set0004h;中断屏蔽寄存器IFR.set0006h;中断标志寄存器;DELAY_S.macrodelay_value;延时=0.05μs×延时计数RPT#delay_valueNOP.endm调用宏:DELAY_S0AC5H13头文件F2407.h,在该文件中寄存器都以指针方式进行寻址。头文件为DSP的寄存器和位测试指令的位码定义助记符144.3.3命令文件扩展名为*.cmd,实现对程序存储空间和数据存储器空间的分配;它由三部分组成:一是输入输出文件和选项等(该部分可以省略),二是目标存储器定义,使用伪指令MEMORY定义,三是各段的定位,由SECTIONS命令定义。

MEMORY伪指令用来标示实际存在目标系统中并且可被使用的存储器范围。每个存储器范围有名字、起始地址和长度。

SECTIONS伪指令的作用是:描述输入段怎样被组合到输出段;在可执行程序内定义输出段;规定在存储器内何处放置输出段;允许重命名输出段。15MEMORY{PAGE0:/*程序存储器*/name1[(attr)]:origin=constant,length=constant;……namen[(attr)]:origin=constant,length=constant;PAGE1:/*数据存储器*/name1[(attr)]:origin=constant,length=constant;……namen[(attr)]:origin=constant,length=constant;PAGE2:/*I/O空间*/name1[(attr)]:origin=constant,length=constant;……namen[(attr)]:origin=constant,length=constant;}16

SECTIONS{name:[property,property,property,…]name:[property,property,property,…]name:[property,property,property,…]}17

每一个以name开始的段的规格说明定义了一个输出段。在段名之后是特性列表,定义段的内容以及它们是怎样被分配的。(1)装载位置,规定段将被装载在存储器内何处。(2)运行位置,定义段将在存储器内何处运行。(3)输入段,定义组成输出段的输入段。(4)段类型,定义特定段类型的标志。(5)填充值,定义用于填充未初始化空位的数值。18命令文件举例-MEMORY伪指令和SECTION伪指令:MEMORY{PAGE0:VECS:origin=0000h,length=0040h/*程序复位*/PVECS:origin=0040h,length=0F00h/*外设中断向量*/PM:origin=1000h,length=6000hPM1:origin=7000h,length=1000hPM2:origin=8000h,length=800h/*如果PON=1,则为SARAM*/B0_PM:origin=0FF00h,length=100h/*如果CNF=1,则为DARAMB0块*/PAGE1:MMRS:origin=0000h,length=0060hB2:origin=0060h,length=0020h/*DARAMB2块*/

B0:origin=0200h,length=0100h/*如果CNF=0则为DARAMB0块*/B1:origin=0300h,length=0100h/*DARAMB1块*/SARAM:origin=0800h,length=0800h/*如果DON=1则为SARAM*/

PERIPH:origin=7000h,length=1000h/*外设帧*/EXTRAM:origin=8000h,length=8000h/*外部扩展RAM*/PAGE2:

IO_EX:origin=0000h,length=0FFF0hIO_IN:origin=0FFF0h,length=0Fh}19SECTIONS{

.reset:{}>VECSPAGE0

/*复位中断向量*/

.vectors:{}>

VECSPAGE0/*中断向量表*/

.pvecs:{}>

PVECSPAGE0

/*外设中断向量表*/

.text:{}>

PMPAGE0

/*代码*/

.table:{}>

PMPAGE0

.bss:{}>

B1PAGE1

.data0:{}>

B0PAGE1

.data2:{}>

B2PAGE1.stack:{}>

SARAMPAGE1

}204.3.4中断向量文件中断向量文件vectors.asm定义了系统中各种中断服务程序的入口地址。214.3.5库文件rts2xx.librts2xx.lib库文件可在C:\CCStudio_v3.1\C2400\cgtools\lib下找到,不得修改,完全复制到需要的地方。rts2xx.lib包含以下内容:ANSIC标准库;系统启动程序_c_int0;允许C访问特殊指令的函数和宏。224.4C语言和汇编语言混合编程方法4.4.1在C语言中嵌入汇编语言程序1.在C语言中嵌入单条汇编语句//系统初始化程序voidinital(){asm("setcSXM");//SXM位置1,抑制符号扩展位asm("clrcOVM");//OVM位清0,累加器中结果正常溢出asm("clrcCNF");//CNF位清0,B0被映射到数据存储器空间}232.在C语言中嵌入实现某一完整功能的多条汇编语句

在C语言中调用汇编语言编写的子程序,用户必须遵循相关规则自行维护模块的入口和出口代码,主要应弄清楚堆栈的使用情况。244.5分开编写C语言和汇编语言程序1.分离的C语言程序和汇编语言程序接口

须注意:在编写汇编语言程序时,必须遵守有关调用规则和寄存器规则,这样不会影响C语言程序的运行环境。252.在C语言程序中访问汇编语言程序的变量

2种操作方法:(1)汇编变量在.bss段中定义采用.bss命令定义变量采用.global命令定义变量在变量名前加一下划线“_”在C语言程序中将变量说明为外部变量26(2)用.set和.global命令定义的常数。在汇编语言中将常数符号定义成全局常数;在C语言程序中访问汇编语言程序中的常数时,应在常数前加一个地址符号“&”273.在汇编语言程序中访问C语言程序变量在C语言程序中定义变量(如x);在汇编语言程序中使用前面加下划线“_”(如_x)。284.6用C语言处理DSP中断1.通过软件识别中断标志的方法实现可屏蔽的中断

例如,要实现捕捉单元4的中断(CAP4INT),则先建立一个复位和中断向量文件vectors.asm.title"vectors.asm".ref_c_int0,_nothing,_capint;定义每个需要用到的符号.sect".vectors"reset:b_c_int0;复位向量INT1:b_nothingINT2:b_nothingINT3:b_nothingINT4:b_capint;当发生INT4中断时,程序跳转至capint所标志;的终端服务程序INT5:b_nothingINT6:b_nothing;当发生其他级别中断时,直接跳转至nothing

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论