- 1、本文档共61页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 TMS320C55x汇编语言
第4章 TMS320C55x汇编语言编程 4.1 TMS320C55x软件开发流程 编程语言 汇编语言 编程过程复杂,但程序执行效率高 代码调试工具 软件仿真器(Simulator) 是一种模拟DSP芯片各种功能并在非实时条件下进行软件调试的调试工具,它不需目标硬件支持,只需在计算机上运行 4.2 TMS320C55x目标文件格式 COFF文件的基本单元—段 汇编器对段的处理 链接器对段的处理 段(section)是COFF文件的基本单元。 图4-1 目标文件中的段与目标存储器的关系 一些汇编伪指令可将代码和数据的各个部分与相应的段相联系 4.2.2 汇编器对段的处理 汇编器通过段伪指令自动识别各个段,并将段名相同的语句汇编在一起 每次使用.bss指令,汇编器就在对应的段开辟更多的存储空间 图4-2 两个文件的链接过程 4.3 TMS320C55x汇编伪指令 4.3.1 汇编伪指令 汇编伪指令为程序提供数据和汇编过程的控制,功能有: 表4-1 定义段的汇编伪指令 表4-2 初始化常数(数据和存储器)伪指令(1) 表4-2 初始化常数(数据和存储器)伪指令(2) 表4-3 引用其他文件的指令 4.3.2 宏指令 宏指令的作用主要是: 定义自己的宏指令和重新定义已存在的宏指令 简化长的或者复杂的汇编代码 访问指令库 在一个宏里定义有条件和可重复块 在一个宏里操作字符串 控制扩展列表 宏定义的格式 宏名 .macro [参数1][,…, 参数n] 指令或者汇编指令 ;即宏的内容 [.mexit] .endm 例4-2,宏的定义和引用。 3.其他宏指令 4.4 C55x汇编语言源文件的书写格式 汇编语言程序以.asm为扩展名 语句的书写规则: 所有语句必须以标号、空格、星号或分号(*或;)开始 4.4.2 汇编语言中的常数与字符串 汇编器可支持7种类型的常数与字符串,见表4-5 4.4.3 汇编源程序中的符号 汇编程序中的符号用于标号、常数和替代字符。由字母、数字及下划线和美元符号(A~Z,a~z,0~9,_和$)等组成。 符号名最多可长达200个字符。 在符号中,第1位不能是数字,并且符号中不能含空格。 例4-5,符号常数 K .set 1024 ;常数定义 maxbuf .set 2*K value .set 0 delta .set 1 item .struct ;item 结构定义 .int value ;常数value偏移量= 0 .int delta ;常数delta偏移量= 1 i_len .endstruct array .tag item ;数组声明 .bss array, i_len*K 4.4.4 汇编源程序中的表达式 表达式可以是常数、符号,或者是由算术运算符分开的一系列常数和符号。 有效表达式的范围为-32768~32767 要求表达式中的符号或汇编时间常数在表达式之前已定义 例4-6,有效定义的表达式。 .data label1 .word 0 ;将16位值0,1,2放入标号为 .word 1 ;label1的当前段连续字中 .word 2 label2 .word 3 ;将3放入标号为label2的字中 X .set 50h ;定义X的值 goodsym1 .set 100h+X ;有效定义的表达式=150h goodsym2 .set label1 ;=0 goodsym3 .set label2-label1 ;有效定义的表达式=3h 表4-6 汇编源程序表达式中的运算符 4.4.5 内建数学函数 汇编器支持如表4-7所示的内建数学函数 函数中的表达式必须为常数 表4-7 汇编器内建数学函数 4.5 TMS320C55x链接器 TMS320C55x链接器有两个功能强大的指令,即MEMORY和SECTIONS。 MEMORY指令允许用户定义一个目标系统的存储器映射,可以命名存储器的各个部分,并且指定开始地址和大小。 SECTIONS指令告诉链接器合成输入段为输出段,并且告诉链接器把这些输出段放在存储器的某个位置。 1 、MEMORY指令 MEMORY { [PAGE 0:] name_1[(attr)]:o=constant,l=constant; [PAGE n:] name_n[(attr)]:o=constant,l=constant; } 2、 SECTIO
文档评论(0)