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

下载本文档

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

文档简介

第4章汇编语言程序开发工具汇编伪指令汇编器伪指令是汇编语言程序的一个重要内容。用于为程序提供数据,并控制汇编程序如何汇编源程序。

●

将代码和数据汇编进指定的段●

为未初始化的变量在存储器中保留空间●

控制清单文件是否产生

●

初始化存储器●

汇编条件代码块

●

定义全局变量●

为汇编器指定从中可以获得宏的库●

考察符号调试信息

汇编器伪指令可完成以下工作:

2023/2/281第4章汇编语言程序开发工具汇编伪指令伪指令和它所带的参数必须书写在一行。在包含汇编伪指令的源程序中,伪指令可以带有标号和注释。虽然标号一般不作为伪指令语法的一部分列出,但是有些伪指令必须带有标号,此时,标号将作为伪指令的一部分出现。

2023/2/282第4章汇编语言程序开发工具COFF文件的基本单元

1.

段(sections)

是COFF文件中最重要的概念。每个目标文件都分成若干段。

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

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

.text

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

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

段(保留空间段),通常为未初始化变量保留存储空间。2023/2/283第4章汇编语言程序开发工具COFF文件的基本单元

2.

段的基本类型

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

初始化段

未初始化段(1)

初始化段初始化段中包含有数据或程序代码。主要有:

.text段——已初始化段;

.data段——已初始化段;.sect段——已初始化段,由汇编器伪指令建立的自定义段。

2023/2/284第4章汇编语言程序开发工具COFF文件的基本单元

2.

段的基本类型

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

未初始化段

在存储空间中,为未初始化数据保留存储空间。它包括:

.bss段——未初始化段;.usect段——未初始化段,由汇编命令建立的命名段(自定义段)。2023/2/285第4章汇编语言程序开发工具汇编器对段的处理

汇编器对段的处理是通过段伪指令来区别各个段的,并将段名相同的语句汇编在一起。

汇编器有5条伪指令可识别汇编语言程序的各个部分:

●

.bss

●

.usect

●

.text

●

.data

●

.sect——定义未初始化段——定义未初始化段——定义已初始化段——定义已初始化段——定义已初始化段2023/2/286第4章汇编语言程序开发工具汇编器对段的处理

未初始化段就是在’C54x存储器中保留空间,通常它们被定位在RAM区。在目标文件中,这些段中没有确切的内容。

由这些段定义的空间仅作为临时存储空间,在程序运行时,可以利用这些存储空间存放变量。

未初始化段分为默认的和命名的两种,分别由汇编器伪指令.bss和.usect产生。

1.未初始化段

2023/2/287第4章汇编语言程序开发工具(1).bss伪指令1.未初始化段

用于在bss段中保留若干个空间。

格式:

.bss

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

字数——表示在bss段或标有名字的段中保留若干个存储单元。

每调用一次.bss伪指令,汇编器在相应的段保留更多的空间。

2023/2/288第4章汇编语言程序开发工具1.未初始化段

(2).usect伪指令

用于为指定的命名段保留若干个空间。

格式:符号.usect

“段名”,字数段名——程序员为未初始化的命名段定义的名字。

每调用一次.usect伪指令,汇编器在指定的命名段保留更多的空间。

2023/2/289第4章汇编语言程序开发工具汇编器对段的处理

已初始化段中包含有可执行代码或初始化数据。

这些段中的内容都在目标文件中,当加载程序时再放到’C54x的存储器中。每个已初始化段都是可以重新定位的,并且可以引用其他段中所定义的符号。链接器在链接时会自动地处理段间的相互引用。

已初始化段由.text、.data和.sect三个伪指令建立。2.

已初始化段2023/2/2810第4章汇编语言程序开发工具已初始化命令的句法:

2.

已初始化段

.text[段起点]

.data[段起点]

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

2023/2/2811第4章汇编语言程序开发工具

汇编器对段的处理

当汇编器遇到.text或.data或.sect命令时,将停止对当前段的汇编(相当于一条结束当前段汇编的命令),然后将紧接着的程序代码或数据汇编到指定的段中,直到再遇到另一条.text、.data或.sect命令为止。

当汇编器遇到.bss或.usect命令时,并不结束当前段的汇编,只是暂时从当前段脱离出来,并开始对新的段进行汇编。.bss和.usect命令可以出现在一个已初始化段的任何位置,而不会对它的内容发生影响。2023/2/2812第4章汇编语言程序开发工具汇编器对段的处理

命名段由用户指定,与默认的.text,.data和.bss段的使用相同,但它们被分开汇编。假如一部分可执行代码(例如初始化程序)不希望和.text段分配在一起,可将它们汇编进一个命名段,这样就可定位在与.text不同的地方。也可将初始化的数据汇编到与.data段不同的地方,或者将未初始化的变量保留在与.bss段不同的位置。可用.usect和.sect两个伪指令产生命名段。3.

命名段(自定义段)2023/2/2813第4章汇编语言程序开发工具

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

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

符号

.usect“段名”,字数

.sect“段名”

可以产生多达32767个不同的命名段。段名可长达200个字符。

2023/2/2814第4章汇编语言程序开发工具

对于.sect和.usect伪指令,段名可以作为子段的参考。

每次用一个新名字调用这些伪指令时,就产生一个新的命名段。

若用已有的段名调用这些伪指令,则汇编器就将代码或数据(或保留空间)汇编进相应名称的段中。不同的伪指令不能使用相同的名字。即不能用.usect创建了命名段,然后又用.sect创建一个相同名字的段。3.

命名段2023/2/2815第4章汇编语言程序开发工具汇编器对段的处理

汇编器为每个段都安排了一个单独的程序计数器称之为段程序计数器SPC。

SPC表示在程序代码或数据段内当前的地址。开始时汇编器将每个SPC置0。当汇编器将程序代码或数据加到段内时,增加相应的SPC值。若再继续对某个段汇编,则相应的SPC就在先前的数值上继续增加。

链接器在链接时要对每个段进行重新定位。4.

段程序计数器SPC2023/2/2816第4章汇编语言程序开发工具【例】

段伪指令的使用。

1

************************************

2

*

开始汇编到.text段*

3

************************************

4

000000

.text

5

000000

0001

.word1,2

000001

0002

6

000002

0003

.word3,4

000003

000471.定义段的伪指令

;定义文本段

;初始化值为1,2

;初始化值为3,42023/2/2817第4章汇编语言程序开发工具【例】

段伪指令的使用。

8

************************************

9

*

开始汇编到.data段*

10

************************************

11

000000

.data

12

000000

0009

.word9,10

000001

000A

13

000002

000B

.word11,12

000003

000C141.定义段的伪指令

;定义数据段

;初始化值为9,10

;初始化值为11,122023/2/2818第4章汇编语言程序开发工具【例】

段伪指令的使用。

15

************************************

16

*

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

17

*

var_defs

*

18

************************************

19

000000

.sect“var_defs”

20

000000

0011

.word17,18

000001

0012

21

1.定义段的伪指令

;定义命名段

;初始化值为17,182023/2/2819第4章汇编语言程序开发工具【例】

段伪指令的使用。

22

************************************

23

*

再继续汇编到.data段*

24************************************

25

000004

.data

26

000004

000D

.word13,14

000005

000E

27

000000

.bsssym,1928

000006

000F

.word15,16

000007

001029

1.定义段的伪指令

;继续汇编数据段

;初始化值为13,14

;定义未初始化段,保留19个空间;仍然在.data段中;初始化值为15,162023/2/2820第4章汇编语言程序开发工具【例】

段伪指令的使用。

30

************************************

31

*

再继续汇编到.text段*

32

************************************

33

000004

.text

34

000004

0005

.word5,6

000005

0006

35

000000

usym

.usect“xy”,2036

000006

0007

.word7,8

000007

0008

1.定义段的伪指令

;继续汇编文本段

;初始化值为5,6

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

;仍然在.text段中

;初始化值为7,82023/2/2821第4章汇编语言程序开发工具【例】

段伪指令的使用。

.text初始化值为1,2,3,4,5,6,7,8的字;

.data初始化值为9,10,11,12,13,14,15,16的字;

var_defs初始化值为17,18的字;

.bss保留19个字的空间;

.usect保留20个字的空间。1.定义段的伪指令

.bss和.usect伪指令既不结束当前的段也不开始新段,它们保留指定数量的空间,然后汇编器开始将代码或数据汇编进当前的段。

2023/2/2822第4章汇编语言程序开发工具【例】段命令应用举例。

汇编语言源程序:

.datacoeff.word044h,055h,066h.bssbuffer,8prt.word0456h.textadd:LD0Dh,Aaloop:SUB#1,A

BCaloop,AGEQ.dataivals.word0CCh,0DDh,0EEh

;初始化数据段

;3组数据放入.data段

;在.bss段保留8个单元

;0456h放入.data段

;初始化文本段

;1字指令

;2字指令

;2字指令共计5个字

;初始化数据段

;3组数据放入.data段2023/2/2823第4章汇编语言程序开发工具汇编语言源程序:var2.usect“newvars”,2inbuf.usect“newvars”,8

.text

mpy:LD0Ah,B

mloop:MPY#0Ah,BBCmloop,BNOV.sect“vectors”.word044h,088h

;建立newvars命名段,保留2个单元

;在newvars段保留8个单元

;初始化文本段

;1字指令

;2字指令

;2字指令共计5个字;建立vectors命名段

;2组数据放入vectors命名段2023/2/2824第4章汇编语言程序开发工具经汇编后,得列表文件(部分):2**********************************3

**汇编一个初始化表到.data段**4

**********************************5

0000.data6

0000

0044coeff.word044h,055h,066h

0001

0055

0002

00667**********************************8**在.bss段中为变量保留空间**9**********************************10

0000.bssbuffer,811**********************************12**仍然在.data段中**13**********************************14

0003

0456prt.word0456h2023/2/2825第4章汇编语言程序开发工具15**********************************16**汇编代码到.text段**17**********************************18

0000.text19

0000

100dadd:LD0Dh,A20

0001

f010aloop:SUB#1,A

0002

0001

21

0003

f842

BCaloop,AGEQ

0004

0001’

22

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

**汇编另一个初始化表到.data段**

24**********************************25

0004

.data

26

0004

00ccivals.word0CCh,0DDh,0EEh

0005

00dd

0006

00ee27**********************************28

**为更多的变量定义另一个段**29**********************************30

0000var2.usect“newvars”,231

0001

inbuf.usect“newvars”,8

2023/2/2826第4章汇编语言程序开发工具32

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

**汇编更多代码到.text段**34****************************************35

0005

.text

36

0005

110a

mpy:LD0Ah,B

37

0006

f166mloopMPY#0Ah,B

0007

000a

38

0008

f868BCmloop,BNOV

0009

0006’

39****************************************40

**为中断向量.vectors定义一个自定义段**41****************************************42

0000

.sect“vectors”43

0000

0044

.word044h,088h

0001

0088

源程序的行号

段程序计数器目标代码汇编语言源程序2023/2/2827第4章汇编语言程序开发工具

汇编语言源程序经过汇编后,共建立了5个段:

●

.text段——文本段,段内有10个字可执行

的程序代码。

●

.data段——已初始化的数据段,段内有7

个字的数据。

●

vectors段——用.sect命令生成的命名段,

段内有2个字的初始化数据。

●

.bss段——未初始化的数据段,在存储器中

为变量保留8个存储单元。

●

newvars段——用.usect命令建立的命名段,为变量保留10个存储单元。

2023/2/2828第4章汇编语言程序开发工具经汇编后,得列表文件(部分):2*******************************3

**汇编一个初始化表到.data段**4

*******************************5

0000.data6

0000

0044coeff.word044h,055h,066h

00010055

000200667*******************************8**在.bss段中为变量保留空间**9*******************************10

0000.bssbuffer,811*******************************12**仍然在.data段中**13*******************************14

00030456prt.word0456h行号目标代码段名100df0100001f8420001110af166000aF8680006004400550066045600cc00dd00ee00440088

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

6

00446

00556

006610

.bss

没有数据保留8个字14

04562023/2/2829第4章汇编语言程序开发工具15********************************16**汇编代码到.text段**17********************************18

0000.text19

0000

100dadd:LD0Dh,A20

0001

f010aloop:SUB#1,A

0002

0001

21

0003

f842

BCaloop,AGEQ

0004

0001’

22

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

**汇编另一个初始化表到.data段**

24**********************************25

0004

.data

26

0004

00ccivals.word0CCh,0DDh,0EEh

0005

00dd

0006

00ee27********************************28

**为更多的变量定义另一个段**29********************************30

0000var2.usect“newvars”,231

0001

inbuf.usect“newvars”,8

行号目标代码段名100df0100001f8420001110af166000aF868000666614004400550066045600cc00dd00ee.data00440088

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

180000.text190000100dadd:LD0Dh,A19

100d200001f010aloop:SUB#1,A20

f01020

0001210003f842BCaloop,AGEQ21

f84221

0001250004.data26000400ccivals.word0CCh,0DDh,0EEh.data

26

00cc26

00dd26

00ee300000var2.usect“newvars”,2newvars

30

保留2个字310001inbuf.usect“newvars”,831

保留8个字2023/2/2830第4章汇编语言程序开发工具32

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

**汇编更多代码到.text段**34*********************************35

0005

.text

36

0005

110a

mpy:LD0Ah,B

370006

f166mloopMPY#0Ah,B

0007

000a

38

0008

f868BCmloop,BNOV

0009

0006’

39****************************************40

**为中断向量.vectors定义一个自定义段**41****************************************42

0000

.sect“vectors”430000

0044

.word044h,088h0001

0088

行号目标代码段名1920202121100df0100001f8420001110af166000aF8680006.text66614262626004400550066045600cc00dd00ee.data00440088

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

360005110ampy:LD0Ah,B36

110a370006f166mloopMPY#0Ah,B37

f16837

000a380008f868BCmloop,BNOV38

f86838

0006420000.sect“vectors”vectors

4300000044.word044h,088h43

004443

00882023/2/2831第4章汇编语言程序开发工具汇编伪指令5.引用其他文件的伪指令该指令主要为引用其他文件提供信息。助记符及语法格式

说明

.copy[”]filename[”]通知汇编器开始从其他文件读取源程序语句。.include[”]filename[”]通知汇编器开始从其他文件读取源程序语句。.defsymbil[,…,symbil]识别定义在当前模块中,但可被其他模块使用的符号。.globalsymbil

[,…,symbil]声明当前符号为全局符号。对定义了的符号,其作用相当于.def;对没有定义的符号,其作用相当于.ref。.refsymbil[,…,symbil]识别在当前模块中使用的,但在其他模块中定义的符号。2023/2/2832第4章汇编语言程序开发工具链接器的主要任务是根据链接命令文件(d),将一个或多个COFF目标文件链接起来,生成存储器映像文件(.map)和可执行的输出文件(.out)。

在链接过程中,链接器将各个目标文件合并,并完成以下工作:●

将各个段配置到目标系统的存储器。

●

对各个符号和段进行重新定位,并给它们指定一个最终的地址。

●

解决输入文件之间未定义的外部引用。链接器2023/2/2833第4章汇编语言程序开发工具链接器

链接器有2条伪指令支持上述任务:

●

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

●

SECTIONS伪指令——用来指定链接器将输入段组合成输出段方式,以及输出段在存储器中的位置,也可用于指定子段。

若未使用伪指令,则链接器将使用目标处理器默认的方法将段放入存储空间。

2023/2/2834第4章汇编语言程序开发工具链接器1.默认的存储器分配

链接器可对多个目标文件进行链接。若链接文件中不使用MEMORY和SECTIONS命令,则为默认方式。

每个目标文件都有.text,.data、.bss段和命名段。若采用默认链接,链接器将对多个目标文件中的各个段进行组合,形成各自的对应段,并将各个段配置到所指定的存储器中,形成可执行的目标模块。

在默认的方式下,链接器将从存储器的0080h开始,对组合后的各段进行存储器配置。2023/2/2835第4章汇编语言程序开发工具默认的存储器分配:

①将所有.text段组合在一起,形成一个.text段,并分配到程序存储器中;

②将多个目标文件中的.data段组合在一起,分配到紧接着.text段的程序存储空间中;

③将.bss段组合,配置到数据存储器中;

④组合命名段。初始化的命名段按顺序分配到紧随.data段的程序存储器,而未初始化命名段将被配置到紧随.bss段的数据存储器中。

1.默认的存储器分配2023/2/2836第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没有使用没有配置没有配置没有使用2023/2/2837第4章汇编语言程序开发工具链接器2.段放入存储器空间若不希望链接器将所有的.text段结合在一起形成单个的.text段,就不能采用默认的方式。由于DSP硬件系统中可能配置多种类型的存储器,若要把某一段分配到特定类型的存储器中,或将命名段配置特定的地址,则需采用MEMORY和SECTIONS伪指令来配置。

若不采用默认的方式,通常需要建立一个链接命令文件,在命令文件中用MEMORY和SECTIONS伪指令定义存储器和配置段地址。

2023/2/2838第4章汇编语言程序开发工具链接器命令文件的编写与使用链接命令文件用来为链接器提供链接信息,可将链接操作所需的信息放在一个文件中,这在多次使用同样的链接信息时,可以方便地调用。

在链接命令文件中,可使用MEMORY和SECTIONS伪指令,为实际应用指定存储器结构和地址的映射。

MEMORY——用来指定目标存储器结构。

SECTIONS——用来控制段的构成与地址分配。

2023/2/2839第4章汇编语言程序开发工具链接器命令文件的编写与使用链接命令文件为ASCⅡ文件,可包含以下内容:

(1)

输入文件名,用来指定目标文件、存档库或其他命令文件。

(2)

链接器选项,它们在命令文件中的使用方法与在命令行中相同。

(3)

MEMORY和SECTIONS链接伪指令,用来指定目标存储器结构和地址分配。

(4)

赋值说明,用于给全局符号定义和赋值。2023/2/2840第4章汇编语言程序开发工具例如:可根据给出链接命令,编写完成该命令操作的链接器命令文件linkd。

lnk500-m-o该命令是将两个目标文件a.obj和进行链接,生成一个映像文件和一个可执行的输出文件。链接命令文件的内容如下:

/*第一个输入文件名*/

/*第二个输入文件名*/-mprog.map/*指定map文件的选项*/-o/*指定输出文件的选项*/2023/2/2841第4章汇编语言程序开发工具

【例】链接器命令文件举例。

a.obj/*输入文件名*/

-o/*指定输出文件的选项*/-m/*指定map文件的选项*/

MEMORY/*MEMORY伪指令*/

{PAGE0:ROM:origin=1000h,length=0100hPAGE1:RAM:origin=0100h,length=0100h}SECTIONS/*SECTIONS伪指令*/

{.text:>ROM.data:>ROM.bss:>RAM}

2023/2/2842第4章汇编语言程序开发工具MEMORY指令

MEMORY指令用来规定目标存储器的结构。在实际的应用中,目标系统所配置的存储器是各不相同的,通过MEMORY指令,可以进行各种各样的存储器配置。MEMORY指令的句法:

MEMORY{PAGE0:name1[(attr)]:origin=constant,length=constant;PAGEn:namen[(attr)]:origin=constant,length=constant;}

指令字存储区间说明语句书写方式:①由大写MEMORY指令字开始;

②由大括号括起来的存储器区间说明。存储区间:存储页面区间名称区间属性起始地址区间长度2023/2/2843第4章汇编语言程序开发工具MEMORY指令存储区间说明语句:

PAGE:

指定存储器空间页面,最多为255页,取决于目标存储器的配置。

每一个PAGE代表一个完全独立的地址空间。

通常,PAGE0用于程序存储器;

PAGE1用于数据存储器。

若没有规定PAGE,则链接器默认为PAGE0。2023/2/2844第4章汇编语言程序开发工具MEMORY指令存储区间说明语句:

name:

存储器区间名称。可由用字母、$、.、_等组成。

存储器区间为内部记号,因此不需要保留在输出文件或者符号表中。

不同PAGE上的存储器区间可以取相同的名字,但在同一PAGE内的名字不能相同,且不许重叠配置。

2023/2/2845第4章汇编语言程序开发工具MEMORY指令存储区间说明语句:

attr:

为任选项,用来为命名的存储器区间规

定1~4个属性。

当对输出段定位时,可利用属性限制输出段分配到一定的存储区间。

属性选项共有4项:

R

规定可以对存储器执行读操作。

W规定可以对存储器执行写操作。

X

规定存储器可以装入可执行的程序代码。I规定可以对存储器进行初始化。若未选属性,可将输出段不受限制地定位到任何一个存储器的位置。任何一个没有规定属性的存储器(包括所有默认方式的存储器)都有全部4项属性。

2023/2/2846第4章汇编语言程序开发工具MEMORY指令存储区间说明语句:

origin:用来指定存储区间的起始地址,可简写为org或o。其值以字为单位,可以用十进制、八进制或十六进制数表示。

Length:

用来指定存储器空间的长度,可简写为len或l,其值以字为单位,可以用十进制、八进制或十六进制数表示。2023/2/2847第4章汇编语言程序开发工具MEMORY指令存储区间说明语句:

fill:

为任选项。用来为没有定位输出段的存储器空单元充填一个数,键入fill或f均可。该值是2个字节的整型常数,可以是十进制数、八进制数或十六制数。2023/2/2848第4章汇编语言程序开发工具【例】用MEMORY伪指令编写连接命令文件。要求:

程序存储器:4K字ROM,起始地址为C00h,取名为ROM。

数据存储器:32字RAM,起始地址为60h,取名为SCR。

512字RAM,起始地址为80h,取名为CHIP。file1.objfiel2.obj-oProg.outMEMORY{

PAGE0:

ROM:origin=C00h,length=1000h

PAGE1:

SCR:origin=60h,length=20h

CHIP:origin=80h,length=200h}

两个输入文件链接命令选项指令字页面名称区间名称起始地址区间长度2023/2/2849第4章汇编语言程序开发工具【例】用MEMORY伪指令编写连接命令文件。file1.objfiel2.obj-oProg.outMEMORY{ PAGE0:

ROM:org=C00h,len=1000hPAGE1:

SCR:org=60h,len=20h

CHIP:org=80h,len=200h}

PAGE0:ROM:org=C00h,len=1000h程序存储器00000h0FFFFh00C00h1000h01C00hROMPAGE1:

SCR:org=60h,len=20h数据存储器00000h0FFFFh00060h0007Fh20hSCR

CHIP:org=80h,len=200h00080h200h0027FhCHIP2023/2/2850第4章汇编语言程序开发工具SECTIONS指令用来控制段的构成与地址分配。指令功能:

①说明如何将输入段组合成输出段;

②

在可执行程序中定义输出段;③

规定输出段在存储器中的存放位置;④

允许重新命名输出段。1.

SECTIONS指令语法

2023/2/2851第4章汇编语言程序开发工具SECTIONS指令的句法:

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

指令字输出段说明语句

段名:定义输出段的名称。

属性:定义该段的内容和存储器的分配。段名1.

SECTIONS指令语法属性属性属性2023/2/2852第4章汇编语言程序开发工具1.

SECTIONS指令语法段属性用来定义输出段的内容和存储地址的分配。包括的内容如下:①装入存储器分配

②运行存储器分配③输入段④

段的类型⑤充填值2023/2/2853第4章汇编语言程序开发工具1.

SECTIONS指令语法①装入存储器分配

用于定义段装入时的存储器地址。语法格式:load=allocation

或allocation

或>allocation

allocation:关于段地址的说明,即给段分配存储单元。

2023/2/2854第4章汇编语言程序开发工具1.

SECTIONS指令语法①装入存储器分配例如:

.text:load=0x1000

.text:load>ROM.bss:load>(RW).text:align=0x80.text:PAGE0.bss:load=block(0x80)

将.text段定位到一个特定的地址。

将.text段定位到命名为ROM的存储区。

将.bss段定位到属性为R、W的存储区。

将.t

温馨提示

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

评论

0/150

提交评论