收藏 分享(赏)

《DSP器件及应用》- 汇编语言伪指令和目标代码的生成new.ppt

上传人:hwpkd79526 文档编号:8386848 上传时间:2019-06-23 格式:PPT 页数:86 大小:1.73MB
下载 相关 举报
《DSP器件及应用》- 汇编语言伪指令和目标代码的生成new.ppt_第1页
第1页 / 共86页
《DSP器件及应用》- 汇编语言伪指令和目标代码的生成new.ppt_第2页
第2页 / 共86页
《DSP器件及应用》- 汇编语言伪指令和目标代码的生成new.ppt_第3页
第3页 / 共86页
《DSP器件及应用》- 汇编语言伪指令和目标代码的生成new.ppt_第4页
第4页 / 共86页
《DSP器件及应用》- 汇编语言伪指令和目标代码的生成new.ppt_第5页
第5页 / 共86页
点击查看更多>>
资源描述

1、DSP器件及应用,佘勇,成都信息工程学院新技术研究所,汇编语言伪指令和目标代码的生成,7.1.1 宏汇编语言伪指令,汇编伪指令:用于预设变量、参数,控制程序汇编过程,简化程序编辑,提高程序的可读性。 只在程序汇编过程中有效,并不能实际执行。 由汇编器进行控制和计算,1、段定义伪指令,初始化段:.text.data.sect “section name”.asect “section name” , address 非初始化段.bss symbol, size in words blocking flag Symbol.usect “ section name”, size in words,

2、blocking flag,.text,.text 定义代码段,用于代码段开始前,给汇编器和链接器以说明 如果还没有代码汇编到.text段,SPC为0,如果原来已有代码汇编到.text段,SPC重载原来的值 举例:.text Adcproc: clrc sxm ;从此段开始处放置一个子程序Adcprog,.data,.data 定义数据段,用于数据段开始前,给汇编器和链接器以说明 .data段可以包含代码,但通常是初始化的数据变量 举例:.data.word 0abcdh, 01234h, 9876;从此段开始处定义三个常数,.sect,.sect ”section name” 定义初始化了的

3、命名段,其后的源码将汇编到此段以便以后以此名调用.sect ”var_defs”.word 17, 18 ;Start assembling into a named, initialized ;section, var_defs,.asect,.asect “section name”,地址 指定有名初始化段地址,为绝对地址 代码/数据段均可 举例:.asect “dataout”, 02000h,.bss,.bss symbol, size in WORDS , blocking flag 定义非初始化变量空间,为未初始化变量保留若干字空间 symbol指向保留空间的第一个字,可作为变量名

4、 blocking flag非0,则保留空间将不会跨越页边界 举例:.bss sym, 19 ; Reserve space in .bss.word 15, 16,.usect,Symbol .usect ”section name”, size in words, blocking flag 定义非初始化有名变量空间,为该名称的段保留若干字空间 举例:usym .usect ”xy”, 20; Reserve space in xy,举例,2、初始化常数伪指令,在当前段保留若干位空间:.bes size in bits 或 .space size in bits 在当前段连续定义一个或多个

5、字节:.byte value 1 , . , value n ; 将数值置入当前字的特定数量的位中:.field value , size in bits 定义32bit,IEEE单精度浮点常数注意不要越过页界.float value ;或 .bfloat value,定义一个或多个32bit值注意不要越过页界:.long value 1 , . , value n 或 .blong value 1 , . , value n 定义一个或多个16-bit整数:.int value 1 , . , value n .word value 1 , . , value n 定义一个或多个字符串:.s

6、tring ”string1”, . ,”string n”,.space & .bes,45 0007 0100 .word 100h,200h0008 0200 46 0009 Res_1: .space 17 47 000B 000F .word 15 48 000C Res_2: .bes 20 49 000E 00BA .byte 0BAh,定义常数,1 0000 aa .byte 0AAh, 0BBh0001 bb 2 0002 cccc .word 0CCCCh 3 0003 dddd .int 0DDDDh 4 0004 ffff .long 0EEEEFFFFh0005 ee

7、ee 5 0006 6865 .string ”help”0007 6c70 6 0008 ffa8 .float 1.999990009 3fff,3、安置段程序计数器,Align the Section Program Counter (SPC).align ;将SPC设置在页边界上.even ;将SPC设置在字边界上,4、设置列表输出格式伪指令,5、引用说明伪指令,.copy ” filename ” * 包含其他源文件,相当于把目标文件内 容纳入本程序文件中.mlib ” filename ” * 定义宏库,功能类似.copy .include ” filename ” * 包含其他源

8、文件,同.copy,.def symbol 1 , . , symbol n * 说明在当前模块中定义,可被其他模 块调用的一个或多个模块(子程序) 符号.global symbol 1 , . , symbol n * 说明一个或多个全局符号(外部) .ref symbol 1 , . , symbol n * 说明在当前模块中要调用,而在其他 模块中定义的一个或多个模块(子程 序)符号,6、条件汇编伪指令,.if well-defined expression * 若.if条件为真,则汇编相应代码块。.elseif well-defined expression * 若.if条件为假且.e

9、lseif条件为真,则汇编相应代码块。.elseif为可选.else * 若以上条件为假,则汇编相应代码块。 .else为可选.endif * 终止.if代码块,.loop well-defined expression * 定义重复汇编(若条件成立)代码块 的块首.break well-defined expression * 若条件为真,退出.loop循 环。.break为可选.endloop * 结束.loop代码块,7、汇编时符,.asg ” character string ” * 给符号指定字符串(该符号代表相应的字 符串).set 或 .equ * 符号等于某数值.eval ex

10、pression, symbol * 计算表达式,将其值转换成字符,并将该 字符串赋予给一个符号.newblock * 取消局部标号,.struct * 结构定义开始,类似C.endstruct * 结构定义结束.tag * 给结构分配一个标号表示,8、其它伪指令,.end * 程序结束,终止汇编.label symbol * 定义特定符号代表当前段中的装入地址.mmregs * 说明存储器映射寄存器符号以便程序使用.port * 打开汇编器端接口开关.sblock ”section name” , ”section name”, . . . * 给一个或多个模块指明段,若模块不超出1页,则在

11、页内安放,否则起新页,.version generation #number * 设置处理器版本.emsg string * 发送用户定义的错误信息到输出设备.mmsg string * 发送用户定义的汇编信息到输出设备.wmsg string * 发送用户定义的警告信息到输出设备,9、宏汇编,定义宏: macname .macro parameter 1.,parameter n * macname为宏名,parameter 1, n为参数.mexit * 退出到宏结束.endm.endm * 宏定义结束.var substitution symbol1,n * 定义宏内临时局部符号,相当于

12、临时变量。 * 为了多次调用宏,可用label?格式定义标号。,addx .macro a .var tmp .asg :a(1): , tmp .if $symcmp(tmp, ”#”) = 0addk a .elseif $symcmp(tmp, ”*”) = 0add a .else .emsg ”Bad Macro Parameter” .endif .endmaddx #100 ; macro calladdx *+ ; macro call,MIN .macro a,blacc asub bbcnd m1?, NClacc bb m2? * 不能用 .mexit 伪指令代替m1?

13、lacc am2?.endm,Operators in Expressions,在C2xx DSP中,当在表达式中为了便于表达算式含义或避免运算次序混淆时,可使用“( )”,但不能使用“ ”和“ ”,Expressions 1,Expressions 2,表达式举例,8/(4/2) = 4, but 8/4/2 = 1 8 + 4/2 = 10 (4/2 is evaluated first) 8/4*2 = 4, but 8/(4*2) = 1xyz .equ 1234 W .equ 5678 .textlar ar2, #w/xyz,7.1.2 链接控制命令文件 -CMD文件,可执行目标文

14、件的生成,1、编辑源程序文件 *.ASM *.C *.LIB 2、编译成目标文件 *.OBJ 3、生成可执行文件 *.OBJ、*.LIB、*.CMD *.OUT,目标代码的存储器定位,目标程序代码和数据在存储器中的位置定位 绝对定位:在源程序中直接访问固定物理地址 链接时可重定位:在链接过程中确定代码和数据在存储器中的位置 代码和数据在存储器中的定位以段(section)为定位基本单元 段定位受控于链接命令控制文件(cmd文件),常见的段,ASM语言 初始化段:.text、.data 未初始化段:.bss 编程者命名段 C语言 初始化段:.text、.cinit、.switch、.const

15、未初始化段:.bss、.sack、.system、 编程者命名,Cmd文件组成,链接参数列表 -o xxx.out -m xxx.map 输入文件(OBJ、LIB)列表 Xxx.obj Aaa.obj 存储器资源 MEMORY 段定位 SECTIONS ,Syntax: MEMORY directive,决定用于安置输出模块的存储器,格式如下: MEMORY PAGE 0 : name 1 (attr) : origin = constant ,length = constant; PAGE n : name n (attr) : origin = constant ,length = con

16、stant; ,attr,R specifies that the memory can be read. W specifies that the memory can be written to. X specifies that the memory can contain executable code. I specifies that the memory can be initialized.,MEMORY Directive举例,SECTIONS,输入模块如何组合成输出模块 定义用于生成可执行程序的输出模块 指定输出模块在可执行程序中的定位(相互关系和整个存储器定位) 允许输出

17、块重命名,语法,SECTIONS name : property, property, property,. name : property, property, property,. name : property, property, property,. ,Possible properties,Load allocation, which defines where in memory the section is to be loadedSyntax:load = allocationor allocationor allocation,Run allocation,which de

18、fines where in memory the section is to be runSyntax:run = allocationor run allocation,Input sections,which defines the input sections that constitute the output sectionSyntax: input_sections ,cmd文件格式,/* Title: c203.cmd */ /* Generic command file for linking */ /* TMS320C2xx assembler files */ /* in

19、put files: *.obj files */ /* -o output files: *.out file */ /* -m Map files: *.map file (optional) */ /* TMS320C2xx architecture */ /* declaration for linker use */,MEMORY PAGE 0: /* PM Program memory */ EX1_PM: ORIGIN=0H, LENGTH=0FEFFH /* External program RAM */ B0_PM: ORIGIN=0FF00H, LENGTH=0100H /

20、* BLOCK MAP IN CNF=1 */,PAGE 1: /* DM Data memory */ REGS: ORIGIN=0H,LENGTH=60H/* MM REGS */ BLK_B2:ORIGIN=60H,LENGTH=20H /* B2 */ BLK_B0:ORIGIN=200H,LENGTH=100H /* B0 */ BLK_B1:ORIGIN=300H,LENGTH=100H /* B1 */ EX1_DM:ORIGIN=0800H,LENGTH=7800H /* EXTERNAL DATA RAM */ GM_DM: ORIGIN=8000H,LENGTH=8000H

21、 /* External DATA RAM AS GLOBAL*/,PAGE 2: /* I/O SPACE */ IO_IN: ORIGIN=0FF00H, LENGTH=0FFH /* I/O MAPPED PERIPHERAL */ IO_EX: ORIGIN=0000H, LENGTH=0FF00H /* EXT. I/O MAPPED PERIPHERAL */ ,SECTIONS /* Linker directive to specify */ /* section placement in the memory map */vectors : EX1_PM PAGE 0/* V

22、ectors at 0x0000 */.text : EX1_PM PAGE 0/* .text placed after vectors */.bss : EX1_DM PAGE 1/* .bss in 0x800 in DM */new : BLK_B2 PAGE 1/* new in 0x0060 in DM */.data : 0x0370 PAGE 1/* .data at 0x0370 in DM */ ,第5章 C2000 DSP开发环境,软件开发工具 命令格式的代码生成:汇编、编译、链接、 代码格式转换 集成环境下的代码生成:CCS 软件仿真Simulator及实时调试工具De

23、bug / Emulator 硬件开发工具 硬件仿真器(XDS510) EVM(Evaluation Module) DSK(DSP Starters Kit),5.1 C2xx编程-开发流程,5.2 CCS中的代码生成工具,C编译器 汇编器 链接器 文档管理器 库生成工具 运行支持库 代码格式转换工具 交叉列表程序 绝对地址列表,1、使用编辑器建立源程序(如test.asm)和链接命令控制文件(c203.cmd);2、然后汇编上述源程序,生成目标代码(test.obj)和列表文件(test.lst),目标代码目标代码用于链接,列表文件用于查错,若出现错误应修改源程序;3、最后将目标代码通过命

24、令控制文件指定定位、分配资源,生成可加载执行文件(test.out)和列表影像文件(test.map)。4、此时可进行仿真调试。,汇编,使用汇编器可将汇编源程序汇编成目标代码.obj文件,命令格式汇编器为dspa.exe,使用格式如下:dspa 汇编源程序 版本信息 选项,如源程序为myprog.asm,使用DSP为C2xx,产生列表输出(使用-L选项),将符号放进目标文件的符号表中(使用-S选项),以方便带符号调试,则汇编命令为:dspa myprog.asm V2xx L S,-V10 - TMS320C1x系列DSP-V16 - TMS320C16系列DSP-V20 - TMS320C2

25、x系列DSP-V25 - TMS320C25系列DSP-V2xx - TMS320C2xx系列DSP-V50 - TMS320C5x系列DSP,链接,控制dsplnk工作的是命令控制文件.cmd,它指出输入目标文件列表;控制产生输出文件列表;确定存储器分配(分页);落实存储器定位。dsplnk myprog.cmdCMD文件中常用Memory和Section伪指令,5.3 代码调试工具,CCS的组成,CCS-Code Composer Studio:代码设计工作室 组成: TMS320C系列CCS代码产生工具。 CCS集成开发环境(Integrated Developing Environme

26、nt,IDE) DSP/BIOS(Basic Input and Output System )插件及API(Application Program Interface)函数。 RTDX(Real Time Data eXchange)插件,主机(Host)接口及API函数。,CCS特点,CCS具有以下特点: 完全基于Windows的集成开发环境; CCS中提供了最新的、编译效率更高的C编译器; DSP/BIOS能实现实时分析,观察数据不需要中断CPU; BIOS中提供了DSP芯片内基本资源管理函数,用户可以直接调用; 先进的数据显示功能,用波形和图像显示出DSP目标板上的信号和数据,从而得到

27、系统直观易懂的属性;,DSP/BIOS,DSPBIOS可以看做是一个准实时操作系统。 DSPBIOS提供的运行服务包括基于优先级的任务调度、中断处理和I/O服务: 在软件开发阶段,它们为实时应用提供底层软件,从而简化实时应用的系统软件设计,节约开发时间。 DSPBIOS在软件调试阶段与主机CCS内的分析工具BIOScope配合,可以完成对应用程序的实时探测(Probe)、跟踪(Trace)和监控(Monitor),与RTDX技术和CCS的可视化工具相配合,除了可以直接实时显示原始数据(二维信号波形或三维图像)外,还可以对原始数据进行处理,硬件仿真,TI DSP 芯片提供片上仿真支持,使CCS能

28、控制程序运行并实时监视程序活动。主机通过仿真器(如TI XDS510)提供的JTAG接口完成与目标DSP的通信,对DSP目标系统的实时性能没有太大得影响,片上仿真硬件提供以下功能: 运行、停止或复位DSP芯片; 将代码和数据加载到DSP芯片; 检查DSP中寄存器和存储器; 检查硬件指令或数据相关的断点; 各种计算功能,包括精确到指令周期的剖切(Profiling)功能; 提供主机和目标DSP间的实时数据交换,实时数据交换技术-RTDX,RTDX允许系统开发者在不停止运行目标应用程序的情况下在计算机和DSP芯片之间传输数据,同时还可在主机上利用对象链接嵌入(OLE)技术分析和观察数据 RTDX由

29、目标和主机两部分构成: 一个小的RTDX软件库运行在目标DSP上,DSP应用程序调用软件库的API函数,从而可通过增强型JTAG接口将数据发往主机或从主机接收数据。数据的传输是实时进行的,且不影响目标DSP的程序运行 主机平台提供一个RTDX库配合CCS工作。显示和分析工具可以通过一个简单易用的COM API与RTDX通信,从目标板获得数据或将数据发往DSP芯片,EPP口的仿真工具,XDS510PP原理,XDS510PP并口(打印机接口)DSP仿真器,使用并行接口芯片(PPC/SMC34C60)将SPP/EPP/ECP信号转换成ISA格式,使用ISAJTAG转换接口芯片SN74ACT8990将控制/状态信号格式进行转换。通过译码和缓冲驱动电路变成标准JTAG边界扫描接口信号。通过短线仿真头与目标DSP芯片相连,达到仿真、调试、下载程序等的目的,ISA接口的仿真调试工具,PCI接口的仿真调试工具,14PIN的DSP-JTAG仿真头,C5401 DSK,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报