DSP精讲汇编语言程序开发工具_第1页
DSP精讲汇编语言程序开发工具_第2页
DSP精讲汇编语言程序开发工具_第3页
DSP精讲汇编语言程序开发工具_第4页
DSP精讲汇编语言程序开发工具_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

会计学1DSP精讲汇编语言程序开发工具2023年1月18日2第4章汇编语言程序开发工具4.2汇编语言程序的编辑、汇编和链接过程示意图汇编器调试程序链接器文本编辑器.asm源文件.obj目标文件.out输出文件.cmd链接命令文件.lst列表文件.map存储器映像文件十六进制转换程序HEX500-

o-

m-

l第1页/共30页2023年1月18日3第4章汇编语言程序开发工具4.3

COFF的一般概念

汇编器和链接器生成的目标文件,是一个可以由’C54x器件执行的文件。这些目标文件的格式称之为公共目标文件格式(COFF)。

在编写汇编语言程序时,COFF采用代码段和数据段的形式,以便于模块化的编程,使编程和管理变得更加方便。这些代码段和数据段简称为段。汇编器和链接器提供一些伪指令来建立和管理各种各样的段。第2页/共30页2023年1月18日4第4章汇编语言程序开发工具4.3.1

COFF文件的基本单元

1.

段(sections)

段——是存储器中占据相邻空间的代码或数据块。一个目标文件中的每个段都是分开的和各不相同的。

COFF目标文件都包含以下3种形式的段:.text

段(文本段),通常包含可执行代码;.data

段(数据段),通常包含初始化数据;.bss

段(保留空间段),通常为未初始化变量保留存储空间。第3页/共30页2023年1月18日5第4章汇编语言程序开发工具4.3.1

COFF文件的基本单元

2.

段的基本类型

COFF目标文件中的段有两种基本类型。

初始化段

未初始化段(1)

初始化段初始化段中包含有数据或程序代码。主要有:.text段——已初始化段;.data段——已初始化段;.sect段——已初始化段,由汇编器伪指令建立的自定义段。

第4页/共30页2023年1月18日6第4章汇编语言程序开发工具4.3.1

COFF文件的基本单元

2.

段的基本类型

(2)

未初始化段

在存储空间中,为未初始化数据保留存储空间。它包括:.bss段——未初始化段;.usect段——未初始化段,由汇编命令建立的命名段(自定义段)。第5页/共30页2023年1月18日7第4章汇编语言程序开发工具3.

段与目标存储器的对应关系目标文件中的段与目标存储器之间的关系

目标文件目标存储器.bss.data.textRAME2PROMROM第6页/共30页2023年1月18日8第4章汇编语言程序开发工具(1).bss伪指令1.未初始化段

用于在bss段中保留若干个空间。格式:.bss

符号,字数符号——对应于保留的存储空间第一个字的变量名称。可以让其他段引用,也可以用.global命令定义为全局符号。

字数——表示在bss段或标有名字的段中保留若干个存储单元。第7页/共30页2023年1月18日9第4章汇编语言程序开发工具1.未初始化段

(2).usect伪指令

用于为指定的命名段保留若干个空间。格式:符号.usect

“段名”,字数段名——程序员为未初始化的命名段定义的名字。第8页/共30页2023年1月18日10第4章汇编语言程序开发工具已初始化命令的句法:2.

已初始化段

.text[段起点]

.data[段起点]

.sect

“段名”[,段起点]段起点——是任选项。若选用,它为段程序计数器SPC定义一个起始值。若默认,则SPC从0开始。

第9页/共30页2023年1月18日11第4章汇编语言程序开发工具4.3.2

汇编器对段的处理

命名段由用户指定,与默认的.text,.data和.bss段的使用相同,但它们被分开汇编。

可用.usect和.sect两个伪指令产生命名段。3.

命名段(自定义段)第10页/共30页2023年1月18日12第4章汇编语言程序开发工具

.usect伪指令产生类似.bss的段,为变量在RAM中保留存储空间。.sect伪指令产生类似.text和.data的段,可以包含代码或数据。.sect伪指令产生可重新定位地址的命名段。3.

命名段产生命名段伪指令格式:

符号

.usect

“段名”,字数

.sect

“段名”可以产生多达32767个不同的命名段。段名可长达200个字符。第11页/共30页2023年1月18日13第4章汇编语言程序开发工具经汇编后,得列表文件(部分):2*******************************3**汇编一个初始化表到.data段**4

*******************************50000.data600000044coeff.word044h,055h,066h00010055000200667*******************************8**在.bss段中为变量保留空间**9*******************************100000.bssbuffer,811*******************************12**仍然在.data段中**13*******************************1400030456prt.word0456h目标代码段名100df0100001f8420001110af166000aF8680006004400550066045600cc00dd00ee00440088

没有数据保留10个字50000.data600000044coeff.word044h,055h,066h100000.bssbuffer,81400030456prt.word0456h.data

004400550066.bss

没有数据保留8个字0456第12页/共30页2023年1月18日14第4章汇编语言程序开发工具15********************************16**汇编代码到.text段**17********************************180000.text190000100dadd:LD0Dh,A200001f010aloop:SUB#1,A00020001210003f842BCaloop,AGEQ

00040001’

22**********************************23**汇编另一个初始化表到.data段**24**********************************250004.data26000400ccivals.word0CCh,0DDh,0EEh000500dd000600ee27********************************28**为更多的变量定义另一个段**29********************************300000var2.usect“newvars”,2310001inbuf.usect“newvars”,8目标代码段名100df0100001f8420001110af166000aF8680006004400550066045600cc00dd00ee.data00440088

没有数据保留8个字.bss没有数据保留10个字.text

180000.text190000100dadd:LD0Dh,A100d200001f010aloop:SUB#1,Af0100001210003f842BCaloop,AGEQf8420001250004.data26000400ccivals.word0CCh,0DDh,0EEh.data

00cc00dd00ee300000var2.usect“newvars”,2newvars

保留2个字310001inbuf.usect“newvars”,8保留8个字第13页/共30页2023年1月18日15第4章汇编语言程序开发工具32*********************************33**汇编更多代码到.text段**34*********************************350005.text360005110ampy:LD0Ah,B370006f166mloopMPY#0Ah,B0007000a380008f868BCmloop,BNOV00090006’

39****************************************40**为中断向量.vectors定义一个自定义段**41****************************************420000.sect“vectors”

4300000044.word044h,088h00010088目标代码段名100df0100001f8420001110af166000aF8680006.text004400550066045600cc00dd00ee.data00440088

没有数据保留8个字.bss没有数据保留10个字newvars350005.text.text

360005110ampy:LD0Ah,B110a370006f166mloopMPY#0Ah,Bf168000a380008f868BCmloop,BNOVf8680006420000.sect“vectors”vectors

4300000044.word044h,088h00440088第14页/共30页2023年1月18日16第4章汇编语言程序开发工具4.3.3

链接器对段的处理链接器有2条伪指令支持上述任务:

MEMORY伪指令——用来定义目标系统的存储器配置空间,包括对存储器各部分命名,以及规定它们的起始地址和长度。●

SECTIONS伪指令——用来指定链接器将输入段组合成输出段方式,以及输出段在存储器中的位置,也可用于指定子段。若未使用伪指令,则链接器将使用目标处理器默认的方法将段放入存储空间。

第15页/共30页2023年1月18日17第4章汇编语言程序开发工具默认的存储器分配过程:File1.obj.text1.data1.bss1table_1(初始化的命名段)u_vars1(未初始化的命名段)File2.obj.text2.data2.bss2table_2(初始化的命名段)u_vars2(未初始化的命名段)FFT(初始化的命名段)程序存储器数据存储器.text.text1.text2.data.data1.data2.bss.bss1.bss2tabletable_1table_2u_vars1u_vars1u_vars2FFTFFT没有使用没有配置没有配置没有使用第16页/共30页2023年1月18日18第4章汇编语言程序开发工具4.4.3

汇编伪指令1.定义段的伪指令

用于定义相应的汇编语言程序的段。

助记符及语法格式

说明

.bsssymbol,sizeinwords[,blocking][,alignment]

为未初始化的数据段.bss保留存储空间。

.data指定.data后面的代码为数据段,通常包含初始化的数据。

.sect“sectionname”

定义初始化的命名段,可以包含可执行代码或数据。

.text

指定.text后面的代码为文本段,通常包含可执行的代码。

symbol.usect“sectionname”,sizeinwords[,blocking][,alignmentflag]

为未初始化的命名段保留空间。类似.bss伪指令,但允许保留与.bss段不同的空间。

第17页/共30页2023年1月18日19第4章汇编语言程序开发工具【例4.4.2】

段伪指令的使用。

1

************************************2

*

开始汇编到.text段*3

************************************4

000000

.text5

000000

0001

.word1,2

000001

00026

000002

0003

.word3,4

000003

000471.定义段的伪指令

;定义文本段

;初始化值为1,2

;初始化值为3,4第18页/共30页2023年1月18日20第4章汇编语言程序开发工具【例4.4.2】

段伪指令的使用。

8

************************************9

*

开始汇编到.data段*10

************************************11

000000

.data12

000000

0009

.word9,10

000001

000A13

000002

000B

.word11,12

000003

000C141.定义段的伪指令

;定义数据段

;初始化值为9,10

;初始化值为11,12第19页/共30页2023年1月18日21第4章汇编语言程序开发工具【例4.4.2】

段伪指令的使用。

15

************************************16

*

开始汇编到命名的初始化段*17

*

var_defs

*18

************************************19

000000

.sect“var_defs”

20

000000

0011

.word17,18

000001

0012211.定义段的伪指令

;定义命名段

;初始化值为17,18第20页/共30页2023年1月18日22第4章汇编语言程序开发工具【例4.4.2】

段伪指令的使用。

22

************************************23

*

再继续汇编到.data段*24************************************25

000004

.data26

000004

000D

.word13,14

000005

000E27

000000

.bsssym,1928

000006

000F

.word15,16

000007

0010291.定义段的伪指令

;继续汇编数据段

;初始化值为13,14

;定义未初始化段,保留19个空间;仍然在.data段中;初始化值为15,16第21页/共30页2023年1月18日23第4章汇编语言程序开发工具【例4.4.2】

段伪指令的使用。

30

************************************31

*

再继续汇编到.text段*32

************************************33

000004

.text34

000004

0005

.word5,6

000005

000635

000000

usym

.usect“xy”,2036

000006

0007

.word7,8

000007

00081.定义段的伪指令

;继续汇编文本段

;初始化值为5,6

;定义xy段,保留20个空间

;仍然在.text段中

;初始化值为7,8第22页/共30页2023年1月18日24第4章汇编语言程序开发工具4.4.3

汇编伪指令2.初始化常数的伪指令用于为当前的段汇编常数值。助记符及语法格式

说明

.bytevalue[,…,value]

初始化当前段里的一个或多个连续字。每个值的宽度被限制为8位。即把8位的值放入当前段的连续字。

.charvalue[,…,value]

初始化当前段里的一个或多个连续字。每个值的宽度被限制为8位。即把8位的值放入当前段的连续字。

.fieldvalue[,sizeinbits]

初始化一个可变长度的域。将单个值放入当前字的指定位域中。

.floatvalue[,…,value]

初始化一个或多个IEEE的单精度(32位)浮点数,即计算浮点数的单精度(32位)IEEE浮

.xfloatvalue[,…,value]

初始化一个或多个IEEE的单精度(32位)浮点数,即计算浮点数的单精度(32位)IEEE浮点表示,并将它保存在当前段的两个连续的字中。不自动对准最接近的长字边界。

第23页/共30页2023年1月18日25第4章汇编语言程序开发工具2.初始化常数的伪指令助记符及语法格式

说明

.intvalue[,…,value]

初始化一个或多个16位整数。即把16位的值放到当前段的连续的字中。

.shortvalue[,…,value]初始化一个或多个16位整数。即把16位的值放到当前段的连续的字中。

.wordvalue[,…,value]

初始化一个或多个16位整数。即把16位的值放到当前段的连续的字中。

.doublevalue[,…,value]

初始化一个或多个双精度(64位)浮点数。即计算浮点数的单精度(32位)

浮点表示,并将它存储在当前段的2个连续的字中。该伪指令自动对准长字边界。

.longvalue[,…,value]初始化一个或多个32位整数。即把32位的值放到当前段的2个连续的字中。

.string“string[,…,“string”]”

初始化一个或多个字符串。把8位字符从一个或多个字符串放进当前段。

第24页/共30页2023年1月18日26第4章汇编语言程序开发工具【例4.4.3】比较.byte,.int,.long,.xlong,.float,.xfloat,.word和.string伪指令。

源程序:

.byte0AAh,0BBh.word0CCCh.xlong0EEEEFFFh.long0EEEEFFFF0DDDDh.xfloat1.99999.float1.99999.string“help”

.byte:将一个或多个8位值放入当前段的连续字中。word15

01500,100AA

00BB

.word:将一个或多个16位值放入当前段的连续字中。20CCC

.xlong:将32位值放入当前段的2个连续的字中,先存最高有效位。3,40EEE

EFFF

.long:将32位值放入当前段的2个连续的字中,先存最高有效位。6,7

EEEE

FFFF

.int:将一个或多个16位值放入当前段的连续的字中。8

DDDD

.xfloat:初始化单精度(32位)浮点数,并保存在当前段的两个连续的字中。9,A3FFF

FFAC

.float:初始化单精度(32位)浮点数,并保存在当前段的两个连续的字中。C,D3FFF

FFAC

.string:将一个或多个字符串中的8位字符放入当前段中。heE,F0068

0065lp10,11006C

0070第25页/共30页2023年1月18日27第4章汇编语言程序开发工具4.4.4

宏定义和宏调用

’C54x汇编器支持宏指令语言。如果程序中有一段程序需要执行多次,就可以把这一段程序定义(宏定义)为一条宏指令,然后在需要重复执行这段程序的地方调用这条宏指令(宏调用)。利用宏指令,可以使源程序变得简短。宏的使用分以下3个步骤:

①定义宏在调用宏时,必须首先定义宏;②调用宏在定义宏之后,可在源程序中调用宏;③扩展宏在源程序调用宏指令时,汇编器将对宏指令进行扩展。

第26页/共30页2023年1月18日

温馨提示

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

评论

0/150

提交评论