第四章 汇编语言程序开发工具
DSP精讲汇编语言程序开发工具

名段(自定义段)。
2019年1月25日 DSP原理及应用 6
第4章 汇编语言程序开发工具
3. 段与目标存储器的对应关系
目标文件中的段与目标存储器之间的关系
目标文件
目标存储器
.bss
RAM
E2PROM
.data
.text
ROM
2019年1月25日
DSP原理及应用
可用.usect和.sect两个伪指令产生命名段。
2019年1月25日
DSP原理及应用
11
第4章 汇编语言程序开发工具
3. 命名段 .usect伪指令产生类似.bss的段,为变量在RAM 中保留存储空间。 .sect伪指令产生类似.text和.data的段,可以 包含代码或数据。.sect伪指令产生可重新定位地址 的命名段。 产生命名段伪指令格式: 符号 .usect “段名”,字数 .sect “段名” 可以产生多达32767个不同的命名段。段名可长 达200个字符。
段起点——是任选项。 若选用,它为段程序计数器SPC定义一个起始值。
若默认,则SPC从0开始。
2019年1月25日 DSP原理及应用 10
第4章 汇编语言程序开发工具
4.3.2 汇编器对段的处理 3. 命名段(自定义段) 命名段由用户指定,与默认的.text,.data和 .bss段的使用相同,但它们被分开汇编。
2019年1月25日 DSP原理及应用 1
第4章 汇编语言程序开发工具
4.2 汇编语言程序的编辑、汇编和链接过程
示意图
. cmd 链接命 令文件
.asm 源文件 .obj 目标文件 .out 输出文件
文本编辑器
第四章-汇编语言程序的设计

第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。
(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。
在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。
(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。
汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。
①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。
②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。
(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。
)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。
操作数:给指令的操作提供数据或地址。
注释:是对语句或程序段的解释说明。
(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。
冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。
汇编语言程序开发工具

第4章 汇编语言程序开发工具
2. ’C54x的开发工具
(1)代码生成工具:
助记符指令—代数式指令翻译器:用来将包含 助记符指令的汇编语言源文件转换成包含代数式指令 的汇编语言源文件。 建库实用程序:用来建立用户自己使用的、并 用C/C++语言编写的支持运行的库函数。 十六进制转换程序:可以很方便地将COFF目标 文件转换成TI、Intel、Motorola等公司的目标文件 格式。
2013年8月11日5时4分 DSP原理及应用 3
第4章 汇编语言程序开发工具
4.1 TMS320C54x软件开发过程
1. ’C54x应用软件开发流程
’C54x应用软件的开发可在TI公司提供的开发环境中进行, 用户可以用C/C++语言或汇编语言编写源文件,经C编译器、 汇编器生成COFF格式的目标文件,再用链接器进行链接,生 成在’C54x上可执行的目标代码,然后利用调试工具对可执 行的目标代码进行仿真和调试。 当调试完成后,通过Hex代码转换工具,将调试后的可执 行目标代码转换成EPROM编程器能接受的代码,并将该代码固 化到EPROM中或加载到用户的应用系统中,以便DSP目标系统 脱离计算机单独运行。
目标文件
目标存储器
.bss
RAM
E2PROM
.data
.text
ROM
2013年8月11日5时4分
DSP原理及应用
23
第4章 汇编语言程序开发工具
4.3.2 汇编器对段的处理 汇编器对段的处理是通过段伪指令来区别各个段 的,并将段名相同的语句汇编在一起。
汇编器有5条伪指令可识别汇编语言程序的各个 部分: ● .bss ——定义未初始化段 ● .usect ——定义未初始化段 ● .text ——定义已初始化段 ● .data ——定义已初始化段 ● .sect ——定义已初始化段
汇编语言程序的开发工具

真器,完成用户程序的非实时调试; 可扩展的开发系统,Emulator硬件仿真 器,将PC中用户程序下载到目标系统的 存储器中,完成用户程序的实时调试; 硬件开发模块(EVM)
固化用户程序:
说明
TI各类DSP芯片:指令集不同,但编程
方式一致
链接命令文件写法一致 语言规则,伪指令,宏用法一致 汇编器,链接器,编译器用法和参数设
确定硬件方案
器件选型
系 统 分 析
原理图设计
PCB图设计
系 统 综 合
硬件调试
软 件 设 计 框 图
DSP软件设计步骤
‘C54x两种编程语言:
汇编语言( *.asm ) C/C++语言(*.c )
编写C或汇编源程序
经c编译器和汇编器,.c
.asm
.obj
COFF目标文件 经汇编器,.asm
例4.5.1
链接器命令文件举例
vectors.obj example.obj -o example.out o -m example.map -e start
MEMORY { PAGE 0: PROG: origin=8000h length=0100h VECS: org=0ff80h len=0040h PAGE 1: DATA1: origin=0060h length=0020h DATA2: origin=0080h length=0100h }
段伪指令使用举例
段程序计数器:SPC
.data coeff .word 044h, 055h, 066h .bss buffer,8 prt .word 0456h .text start: LD #0DH,A
段伪指令使用举例
第4章 MCS-51单片机汇编语言程序设计

程序清单:
送转移地址序号
A,R3 ;取序号 A ;序号乘2 DPTR, #JTAB ;32个子程序 首地址送DPTR JMP @A+DPTR ;根据序号转移 JTAB: AJMP ROUT00 ;32个子程序首地址 AJMP ROUT01 … MP: MOV RL MOV AJMP ROUT31
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
【例4-1】
双字节二进制数求补。
程序说明:对R3(高8位)、R2(低8位)中的二进制定 点数取反加1即可得到其补码。
开始
程序清单:
BINPL:MOV A,R2 CPL A ADD A,#01H MOV R2,A MOV A,R3 CPL A ADDC A,#00H MOV R3,A RET ;低位字节取反 ;加1 ;低位字节补码送R2 ;高位字节取反 ;加进位 ;高位字节补码送R3
散转生成正确偏移号
置换指令地址表首址
转入R3指示的程序
AJMP
……
AJMP
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
3.循环程序
包括:循环初始化、循环处理、循环控制
开始 置初值 循环体 循环结束? Y 循环修改 N 循环体 循环结束? N Y 结束 循环修改 结束 开始 置初值
;调用查表子程序 ; 暂存R1中 ;调查表子程序 ;平方和存A中 ;等待
取第一个数→A 调查表子程序 结果存入R1 取下一个数→A 调查表子程序 两数平方相加 存结果
子程序清单:
SQR: INC A ;加RET占的一个字节 MOVC A,@A+PC ;查平方表 RET TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END
汇编语言程序的开发

汇编语言程序的开发汇编语言程序的开发是计算机编程中的一种重要技术。
它使用类似于机器码的指令来编写程序,可以直接操作计算机硬件,实现高效的程序性能。
本文将介绍汇编语言程序的开发过程,并探讨其在实际应用中的优势和应用场景。
一、概述汇编语言是一种低级语言,与机器语言很接近,使用特定的助记符和指令来编写程序。
通过汇编语言编写的程序可以直接在计算机上运行,达到较高的执行效率。
二、开发工具为了编写汇编语言程序,需要使用特定的开发工具。
常见的汇编语言开发工具包括MASM(Microsoft Macro Assembler)、NASM(Netwide Assembler)等。
这些工具提供了汇编语言程序的编辑、编译和调试等功能,方便开发者进行程序开发和测试。
三、开发过程1. 确定程序需求:在开始开发之前,需要明确程序的需求和功能。
这包括确定程序要实现的功能、输入输出的方式等。
2. 编写汇编代码:根据程序需求,使用汇编语言编写程序代码。
汇编语言使用特定的助记符和指令,可以直接操作寄存器、内存和其他硬件资源。
3. 调试和测试:编写完毕后,需要进行程序的调试和测试。
这包括检查代码的正确性和逻辑性,以及运行程序并验证其输出结果是否正确。
4. 优化与改进:在程序测试中,可能会发现一些性能问题或不足之处。
这时可以根据实际情况进行优化和改进,以提高程序的性能和稳定性。
四、优势与应用场景汇编语言程序的开发具有以下优势:1. 高效性:汇编语言程序直接操作计算机硬件,能够充分利用底层资源,实现高效的程序性能。
2. 灵活性:汇编语言提供直接的对硬件资源的控制和操作,使得程序具有更大的灵活性和可定制性。
3. 应用广泛:汇编语言程序广泛应用于一些对性能要求较高的场景,如操作系统、嵌入式系统、图形处理等领域。
总结:汇编语言程序的开发是一项具有挑战性的任务,需要开发者具备扎实的计算机基础知识和编程技能。
通过使用合适的开发工具和遵循开发过程,可以高效地开发出高性能的汇编语言程序。
第4章 汇编语言程序开发工具

1.运行汇编程序 汇编器是名为asm500.exe的可执行程序 asm500 [input file[object file[listing file]]][-options] 例如 asm500 cjy.asm -l -s -x 源程序 cjy.asm 经汇编后将生成一个 cjy. obj 目标 文件、列表文件、符号表(在目标文件中)以及交 叉引用表(在列表文件中)。
4.宏定义和宏调用
‘C54汇编器支持宏指令语言.如果程序中有一段 程序需要执行多次,就可以把这一段程序定义为 宏指令。使用分为宏定义、宏调用和宏展开。
宏指令与子程序的异同
(1)两者都可以被多次调用,但是把子程序汇编成目标代码 的过程只进行一次,而在用到宏指令的每个地方都要对宏指令 中的语句逐条地进行汇编。 (2)在调用前,由于子程序不使用参数,故子程序所需要的 寄存器等都必须事先设置好;而对于宏指令来说,由于可以使 用参数,调用时只要直接代入参数就行了。 (3)宏指令可以在源程序的任何位置上定义,但必须在用到 它之前先定义好。宏定义可以嵌套。
例4-1 编写y=a1*x1+a2*x2+a3*x3+a4*x4的汇编源程序 •* * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * *
example.asm y=a1*x1+a2*x2+a3*x3+a4*x4 .title “example.asm” .mmregs STACK .usect “STACK”, 10h .bss a,4 .bss x,4 .bss y,1 .def _c_int00 .data table: .word 1,2,3,4 .word 8,6,4,2 ;为汇编源程序取名 ;定义存储器映象寄存器 ;分配10个单元的堆栈空间 ;为系数a分配4个单元的空间 ;为变量x分配4个单元的空间 ;为结果y 分配1个单元的空间 ;定义标号_c_int00 ;定义数据代码段 ;在标号table开始的8个单元中 ;为这8个单元赋初值
第4章 汇编语言程序开发工具

第4章 汇编语言程序开发工具
4.2.1 COFF文件的基本单元
2. 段的基本类型 COFF目标文件中的段有两种基本类型。
(2) 未初始化段 在存储空间中,为未初始化数据保留存储空间。
它包括: .bss段——未初始化段; .usect段——未初始化段,由汇编命令建立的命 名段(自定义段)。
分成若干段。 段——是存储器中占据相邻空间的代码或数据块。
一个目标文件中的每个段都是分开的和各不相同的。 COFF目标文件都包含以下3种形式的段:
.text 段(文本段),通常包含可执行代码; .data 段(数据段),通常包含初始化数据; .bss 段(保留空间段),通常为未初始化变量保留存储空间。
汇编器有5条伪指令可识别汇编语言程序的各个 部分:
● .bss ——定义未初始化段 ● .usect ——定义未初始化段 ● .text ——定义已初始化段 ● .data ——定义已初始化段 ● .sect ——定义已初始化段
第4章 汇编语言程序开发工具
4.3.2 汇编器对段的处理
1. 未初始化段 未初始化段就是在’C54x存储器中保留空间,
第4章 汇编语言程序开发工具
4.2.1 COFF文件的基本单元
2. 段的基本类型 COFF目标文件中的段有两种基本类型。
(1) 初始化段 初始化段
初始化段中包含有数据或程序代码。主要有: .tex未t段初—始—化已段初始化段; .data段——已初始化段; .sect段——已初始化段,由汇编器伪指令建立
用于在bss段中保留若干个空间。
格式: .bss
符号, 字数
第4章 汇编语言程序开发工具
1. 未初始化段 (2) .usect伪指令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
旺旺丗你是爱我的天使
汇编器为每个段都安排了一个单独的程序计数器,即段程 序计数器SPC。
SPC表示在程序代码或数据段内的当前地址。
开始时汇编器将每个SPC置0。当汇编器将程序代码或数据 加到段内时,SPC值相应增加。若再继续对其它同名段汇编, 则其SPC要在先前数值上继续增加。
旺旺丗你是爱我的天使
源程序 段序 的行号 计数器
汇编语言 源程序
旺旺丗你是爱我的天使
汇编语言源程序经过汇编后,共建立了5个段: ● .text段—文本段,段内有10个字可执行的程序代码。
● .data段—已初始化的数据段,段内有7个字的数据。
● vectors段—用.sect命令生成的命名段,段内有2个字 的初始化数据。 ● .bss段—未初始化的数据段,在存储器中为变量保留8
个存储单元。
● newvars段—用.usect命令建立的命名段,为变量保留 10个存储单元。
旺旺丗你是爱我的天使
. cmd 链接命 令文件
.asm 源文件 .obj 目标文件 .out 输出文件
文本编辑器
汇编器
-l
链接器
-m
-o
调试程序
. lst 列表文件
. map 存储器 映像文件
十六进制 转换程序
旺旺丗你是爱我的天使
a. 默认的存储器分配过程:
链接器从地址0080H开始,一个段接一个段配置。
① 将多个目标文件中的.text段组合,形成一个.text 段,分配到ROM中;
程序中所有内容都汇编到.text段。
旺旺丗你是爱我的天使
未初始化段分为默认和命名两种,分别由汇编器伪指令.bss 和.usect产生。
未初始化段是在C54x存储器中保留空间,通常定位到RAM区。
在目标文件中,这些段中没有确切的内容。 由这些段定义的空间仅作为临时存储空间,程序运行时,可
以实时使用这些存储空间创建和保存变量。
27 28 29 30 31
0000 0001
********************************** ** 为更多的变量定义另一个段 ** ********************************** var2 .usect “newvars”,2 inbuf .usect “newvars”,8
旺旺丗你是爱我的天使
伪指令语法格式 .bss 用于在bss段中保留若干个空间。
格式:.bss
符号,字数
符号---对应于保留的存储空间第一个字的变量名称。
可让其他段引用,也可以用.global定义为全局符号; 字数---表示在.bss段或标有名字的段中保留若干个存储单元;
.usect 用于为指定的命名段保留若干个空间。
格式: .usect “段名”,字数 段名---程序员为自定义未初始化段定义的名字。
旺旺丗你是爱我的天使
由.text、.data和.sect命令生成已初始化段。 包含可执行代码或初始化数据,通常定位到RAM区。 段中的内容都在目标文件中,当程序载入处理器后再放
到C54x的存储器中。
伪指令语法格式 .text [段起点] .data [段起点] .sect “段名” [,段起点]
或固化到EPROM中或加载到用户应用系统,以便DSP目标
系统脱离计算机单独运行。
C源程序
宏源程序 C编译器
归档器
汇编代码
翻译帮助
宏库
编译器 汇编器
汇编代码
建立源程序 C编译器
汇编器 链接器
归档器
COFF文件
库建立程序
目标文件库
链接器 实时支持库
可执行 COFF文件 十六进制 转换程序 PC机 测试工具
【例4.3.1】段命令应用举例。
汇编语言源程序: .data coeff .word .bss prt .word .text add: LD aloop:SUB BC .data ivals .word
;初始化数据段
044h,055h,066h buffer,8 0456h
0Dh,A #1,A aloop,ANEQ
才能运行。
. cmd 链接命 令文件
.asm 源文件 .obj 目标文件 .out 输出文件
文本编辑器
汇编器
-l
链接器
-m
-o
调试程序
. lst 列表文件
. map 存储器 映像文件
十六进制 转换程序
旺旺丗你是爱我的天使
1.编辑
利用各种文本编辑器,如记事本、WORD等编写汇编 语言源程序。
2.汇编 利用C54x的汇编器ASM500,对一个或多个源程序分
别进行汇编,并生成列表文件(.lst)和目标文件(.obj)。
3.链接
利用C54x的链接器LNK500,根据链接器命令文件 (.cmd)对已汇编过的一个或多个目标文件(.obj)进行链 接,生成输出文件(.out)和存储器映像文件(.map)。
旺旺丗你是爱我的天使
COFF:汇编器和链接器生成的目标文件,称为公共目标文件 格式。
调试工具 Hex转换工具
EPROM 编程器
绝对 列表器
交叉引用 列表器 C54x DSP
图1 TMS320C54x DSP软件开发流程
TI公司提供的DSP开发环境和工具主要包括以下
三个部分: 代码生成工具
代码调试工具 实时操作系统
(1)代码生成工具
C编译器:将C/C++语言源程序自动编译为C54x的汇编语言 源程序。 汇编器:将汇编源文件汇编成机器语言COFF目标文件。 链接器:将汇编生成的、可重新定位的COFF目标模块组合 成一个可执行COFF目标模块。
第四章 汇编语言程序的开发工具
主要内容
C54X软件开发过程 汇编语言程序的编辑、汇编和链接过程 COFF的一般概念 源程序的汇编 链接器的使用
C54x的应用软件开发主要完成以下工作:
(1)选择编程语言编写源程序 C54x提供2种编程语言:汇编语言和C/C++语言
完成一般功能的代码---两种语言 运算量很大的关键代码---汇编语言以提高运算效率
;3组数据放入.data段
;在.bss段保留8个单元 ;0456h放入.data段
;初始化文本段
;1字指令
;2字指令
;2字指令
共计5个字
;初始化数据段
0CCh,0DDh,0EEh
;3组数据放入.data段
旺旺丗你是爱我的天使
var2
inbuf
.usect “newvars”,2 ;建立newvars命名段,保留2个单元
旺旺丗你是爱我的天使
汇编器的任务:在汇编过程中,根据汇编命令用适当的段将 各部分程序代码和数据连在一起,构成目标文件。
链接器的任务:分配存储单元,将目标文件中的段重新定位 到目标系统的存储器中,这一过程称为定位或分配。
旺旺丗你是爱我的天使
目标文件中的段与目标存储器之间的关系
目标文件
目标存储器
.bss .data .text
.usect “newvars”,8 ;在newvars段保留8个单元 .text
;初始化文本段
mpy:
LD
0Ah,B
;1字指令
mloop: MPY BC
#0Ah,B mloop,BNOV
;2字指令
;2字指令
共计5个字
.sect “vectors” .word 044h,088h
;建立vectors命名段
旺旺丗你是爱我的天使
32 33 34 35 36 37 38
0005 0005 0006 0007 0008 0009
110a f166 000a f868 0006’
**************************************** ** 汇编更多代码到.text段 ** **************************************** .text mpy: LD 0Ah,B mloop MPY #0Ah,B BC mloop,BNOV
0000 0000 0001 0002
0044 0055 0066
7 8 9 10 11 12 13 14
0000
0003
0456
********************************** ** 在.bss段中为变量保留空间 ** ********************************** .bss buffer,8 ********************************** ** 仍然在.data 段中 ** ********************************** prt .word 0456h
BC aloop,AGEQ
0004 0004 0005 0006
00cc 00dd 00ee
********************************** ** 汇编另一个初始化表到.data 段 ** ********************************** .data ivals .word 0CCh,0DDh,0EEh
旺旺丗你是爱我的天使
15 16 17 18 19 20
21 22 23 24 25 26
0000 0000 0001 0002 0003 0004
100d f010 0001 f842 0001’
********************************** ** 汇编代码到.text段 ** ********************************** .text add: LD 0Dh,A aloop: SUB #1, A