linux汇编语言GUN ASchapter2.docx

上传人:b****5 文档编号:6274330 上传时间:2023-01-05 格式:DOCX 页数:6 大小:20.08KB
下载 相关 举报
linux汇编语言GUN ASchapter2.docx_第1页
第1页 / 共6页
linux汇编语言GUN ASchapter2.docx_第2页
第2页 / 共6页
linux汇编语言GUN ASchapter2.docx_第3页
第3页 / 共6页
linux汇编语言GUN ASchapter2.docx_第4页
第4页 / 共6页
linux汇编语言GUN ASchapter2.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

linux汇编语言GUN ASchapter2.docx

《linux汇编语言GUN ASchapter2.docx》由会员分享,可在线阅读,更多相关《linux汇编语言GUN ASchapter2.docx(6页珍藏版)》请在冰豆网上搜索。

linux汇编语言GUN ASchapter2.docx

linux汇编语言GUNASchapter2

2命令行选项

这一章讲述所有版本的GNU汇编器中可用的命令行选项,如果想了解特定机器体系结构的相关选项,参见第8章[机器相关性],61页。

如果你是通过GNU编译器(版本2)调用as,你可以使用‘-Wa’选项,把参数传给汇编器,这些参数(包括选项-Wa)必须使用逗号分隔。

例如:

gcc-c-g-O-Wa,-alh,-Lfile.c

这个例子传递了两个参数给汇编器:

‘-alh’(以高级语言和汇编语言的形式生成清单到标准输出)‘-L’(在符号表中保留局部符号)。

通常你没必要使用‘-Wa‘选项,因为编译器把很多命令行选项自动传递给汇编器。

(你可以通过’-v‘选项使用GNU编译器,来确切了解有什么选项被传递给编译过程,包括传递给汇编器的选项)

 

2.1开启清单选项:

-a[cdhlns]

这些选项开启了汇编器的清单输出。

如果只有‘-a’选项,表示需要生成高级语言,汇编语言和符号清单。

你可以用其他字母去选择特定的清单选项:

‘-ah’需要生成一个高级语言清单,‘-al’需要生成一个输出程序的汇编语言清单,‘-as’需要生成符号表的清单。

生成高级语言清单需要使用一个‘-g‘之类的编译调试选项,汇编语言清单(’-al’)也需要上述调试选项。

使用‘-ac’选项删去清单中汇编条件为假(false)的语句。

下列语句行不进行汇编:

一个条件为false的.if语句块(或是.ifdef语句块,或是其他的条件汇编语句块),条件为true的.if后面的那个.else语句块,所有不会被汇编的行都会从清单中删去。

使用选项‘-ad’选项删除清单中的调试命令。

一旦使用了上述某个选项,你就可以使用.nolist,.psize,.title,和.sbttl命令进一步控制清单输出格式。

选项‘-an’关闭所有清单表格的处理。

如果你不需要输出清单,就不必使用一个‘-a’系列的选项,这时的清单控制命令不会生效。

选项‘-a’后的字母可以合成一个选项(例如‘-aln’)。

注意,如果汇编源码来自标准输入(例如源码是由gcc创建,并且使用了‘-pipe’命令行开关),则清单中不含有注释和预处理命令。

这是因为只有在源代码行被汇编器预处理后,清单代码缓冲区才从标准输入中读取源代码行。

这样减少了内存的使用,并且使生成的代码更有效率。

 

2.2-D

这个选项没什么作用,但as接受这个选项,使那些写给其他汇编器的脚本文件也能被as使用。

 

2.3快速汇编:

-f

只有在被汇编程序的源码是由可信任的编译器产生的情况下,才能使用‘-f’选项。

使用选项‘-f’时,如果汇编器在汇编输入文件前要对它们进行空格和注释的预处理,则会终止汇编器的汇编。

参见3.1[预处理],17页。

警告:

如果文件事实上需要预处理时(如果它们包含有注释),而你使用了‘-f’,as将不能正常工作。

 

2.4.include命令搜索路径:

-Ipath

使用这个选项给目录清单加一个路径path,这个目录清单是.Include命令在搜索指定文件使用的,(参见7.37[.include],44页)。

你可以视需要多次使用‘-I’来加入不同的路径。

第一个搜索的总是当前工作目录;然后,as安照命令行中的顺序(从左到右)搜索‘-I’选项指定的目录。

2.5不同的跳转表:

-K

在as中使用‘.wordsym1-sym2’形式的命令有时会改变生成的代码(参考7.92[.word],59页)。

如果在遇到上述情况时您希望as会发出一个警告您可以使用选项‘-K’。

2.6包含局部标签:

-L

以‘L’(必须大写)字母开头的标签叫做局部标签(参见5.3[符号名],29页)。

通常调试时你看不见它们,因为它们是供生成汇编源程序的程序(如编译器)使用的,而不是为了引起你的注意。

一般来讲as和ld丢弃这些标签,所以你不能用它们来调试。

这个选项让as在目标文件中保留那些‘L…’符号。

一般如果你这样做了,你也应该让连接器ld保留那些以符号名‘L’开头的符号。

默认情况下,以‘L’开始的标签是一个局部标签,不过每一个目标允许重新定义一个局部标签的前缀。

在HPPA上,局部标签以‘L$’开始。

2.7配置清单输出:

--listing

通过命令行开关‘-a‘可以开启汇编程序的清单功能(参见2.1[-a],11页)。

这个功能使输入源文件和输出目标文件的16进制映象组合起来,并且以清单文件的形式显示它们。

清单的格式可以通过汇编源代码中的伪操作来控制(参见7.48[List],47页;7.83[Title],57页;7.64[Sbttl],51页;7.59[Psize],50页;7.14[Eject],40页)也可以通过以下开关:

--listing-lhs-width=‘number’

设置16进制字节映象第一行的最大宽度,宽度单位为字(16位)。

这个映象显示在清单输出的左边。

--listing-lhs-width2=‘number’

由给定的源代码行生成的16进制字节映象,设置这个映象的除第1行外的所有行的最大宽度,宽度单位为字。

如果没有指定宽度值,那它默认等于‘--listing-lhs-width’的设定值。

如果两个开关都没指定,那么默认值是1。

--listing-rhs-width=‘number’

设置源代码行的最大宽度,宽度单位为字符,源代码显示在16进制映象旁边。

默认宽度值是100。

源代码行显示在输出清单的右边。

--listing-cont-lines=‘number’

对于给定的一行源代码输入,设置16进制映象连续行数的最大值。

默认值是4。

 

2.8以MRI兼容模式汇编:

-M

选项–M或–-mri选择MRI兼容模式。

它改变了as的语法和伪操作处理,使它兼容于MicrotecResearch的ASM68K或者ASM960(视配置目标而定)汇编器。

这里没有给出MRI语法具体形式,您可以查看MRI的手册。

需要特别注意的是宏和宏参数的处理有一些不同。

这个选项的目的是允许使用as汇编现存的MRI汇编器代码。

as并不完全与MRI兼容。

MRI汇编器的具体操作依赖于目标文件格式,使用其他目标文件格式不支持这些操作。

要想支持这些需要分别增强各种目标文件的格式。

它们是:

•公共段中的全局符号

M68K的MRI汇编器允许使用通用段(commonsections),而通用段将被连接器合并。

其它目标文件格式并不支持使用通用段。

as处理通用段时把整个通用段当作一个单独的通用符号。

它允许在通用段中定义局部符号,但是它不支持通用段中使用全局符号,因为没法描述它们。

•复杂重定向

MRI汇编器允许错误段址的重定向,重定向连接了两个或多个段的起始地址。

其它目标文件格式都不支持这些。

•END伪操作指定的启始地址

MRI中的END伪操作允许指定一个开始地址。

其它目标文件格式不允许这么做。

你也可以对连接程序使用选项‘-e’来指定起始地址,也可以在连接脚本中指定。

•IDNT,.ident和NAME伪操作

MRI中的IDNT,.ident和NAME伪操作给输出文件分配一个模块名。

其它目标文件格式不支持。

•ORG伪操作

m68k的MRI中ORG伪操作在一个给定的地址开辟一个具有独立地址的段。

这和通常的as的.ORG伪操作不同,它在当前的段中改变定位。

别的目标文件格式不支持独立段。

因为一个段的地址可能在连接脚本中分配。

还有一些MRI汇编器的功能as不支持,大体上,它们都难于实现,而且似乎无关紧要。

其中的一些特性可能在今后的版本中将会支持。

•EBCDICstrings

不支持EBCDIC字符串。

•压缩BCD码

不支持压缩BCD码。

这表示不支持DC.P和DCB.P伪操作。

•FEQU伪操作

不支持m68k的FEQU伪操作。

•NOOBJ伪操作

不支持m68k的NOOBJ伪操作。

•优化分支控制选项(OPTbranchcontroloptions)

忽略m68k的优化分支控制选项—B,BRS,BRB,BRL,还有BRW。

as自动的放松所有的分支(不管是向前还是向后)到一个合适的大小,所以这些选项不起作用。

•优化清单控制选项(OPTlistcontroloptions)

以下m68k的优化清单控制选项被忽略:

C,CEX,CL,CRE,E,G,I,M,MEX,MC,MD,X.

•其它优化选项

以下的m68k的OPT选项被忽略:

NEST,O,OLD,OP,P,PCO,PCR,PCS,R.

•优化D选项为默认值

不象MRI汇编程序,m68k优化D选项是默认的。

可以用选项NOD关闭它。

•XREF伪操作

忽略m68k的XREF。

•.debug伪操作

不支持i960的.debug伪操作。

•.extended伪操作

不支持i960的.extended伪操作。

•.list伪操作

不支持i960的.list伪操作的各种选项。

•.optimizepseudo-op

不支持i960的.optimize伪操作。

•.outputpseudo-op

不支持i960的.output伪操作。

•.setrealpseudo-op

不支持i960的.setreal伪操作。

 

2.9相关性跟踪:

--MD

as能为它创造的文件产生一个从属文件。

这个文件包括一个规则,用来为make描述主要源文件的依赖性。

规则写进文件,文件名规则的参数中指定。

自动更新makefiles使用了这个功能。

 

2.10命名目标文件:

-o

当你运行as时,总是产生一个目标文件。

在默认的情况下,它的名字是‘a.out’(或者是‘b.out’仅对Intel960)。

你用这个选项(选项后跟一个文件名)给目标文件指定一个不同的文件名。

不管目标文件叫什么,as覆盖现存的同名文件。

 

2.11合并数据段和正文段:

-R

选项-R让as输出目标文件,在目标文件中数据段中的数据保存在正文段。

这一步只在最后做:

你得到的二进制数据一样,可是数据段部分的重定向不同。

你的目标文件的数据段部分只有零字节长度,因为所有的字节都被追加到代码段后面(参见第4章[段和重定向],23页)

当你指定了选项–R,它可能会产生更短的地址移动(因为我们不必在数据段和代码段之间转移)。

为了兼容老版本的as我们应尽量避免使用这个选项。

以后,可以使用–R这样做。

as配置成输出COFF的文件格式,只有你使用名字为‘.text’和‘.data’的段时,这个选项才有用。

任何HPPA处理器的目标格式都不支持选项–R。

如果使用了,as会产生一个警告。

 

2.12显示汇编的统计资料:

--statistics

使用‘--statistics’来显示as使用资源的两个统计数据:

汇编时分配的最大空间(字节)和汇编过程的花费的时间(占用cpu的秒数)。

 

2.13兼容输出:

--traditional-format

对一些目标格式来讲,as的输出和一些现存的汇编器有点不同。

这个开关要求as使用传统的格式。

例如,它关闭了异常结构优化,而在默认情况下,as对gcc的输出都进行异常结构优化。

 

2.14显示版本:

-v

通过在命令行中加上选项‘-v’(也可写成‘-version’),你能找出当前运行as的版本号。

 

2.15警告控制:

-W,--warn,--no-warn,

--fatal-warnings

当as汇编编译器的输出时,从不发出警告或错误信息。

但人们写的程序经常引发as产生警告,警告指出已触发了一个特定的条件。

这些警告都被定向到标准的错误文件。

如果你使用了选项–W和--no-warn,就不会产生警告。

这只影响到警告的信息:

它不会影响到as如何汇编你的文件。

而错误,将会终止汇编过程,仍会被报告。

如果使用选项--fatal-warnings,as将认为那些产生警告的文件含有错误。

你可以通过指定选项–-warn来关掉这些选项,使那些警告正常输出。

 

2.16不故错误生成目标文件:

-Z

当出现了一个错误信息,as通常不产生输出。

如果as对你的程序给出错误信息后,你对目标文件感兴趣的话,可以使用选项‘-Z’。

即使发生任何错误,as会继续进行汇编,最后发出一条警告信息‘nerrors,mwarnings,generatingbadobjectfile.’,然后生成一个(坏的)目标文件。

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

当前位置:首页 > 成人教育 > 成考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1