linux汇编语言-GUN AS-chapter2.doc_第1页
linux汇编语言-GUN AS-chapter2.doc_第2页
linux汇编语言-GUN AS-chapter2.doc_第3页
linux汇编语言-GUN AS-chapter2.doc_第4页
linux汇编语言-GUN AS-chapter2.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

2 命令行选项这一章讲述所有版本的GNU汇编器中可用的命令行选项,如果想了解特定机器体系结构的相关选项,参见第8章 机器相关性,61页。如果你是通过GNU 编译器(版本2)调用as,你可以使用-Wa选项,把参数传给汇编器,这些参数(包括选项-Wa)必须使用逗号分隔。例如:gcc -c -g -O -Wa,-alh,-L file.c这个例子传递了两个参数给汇编器:-alh(以高级语言和汇编语言的形式生成清单到标准输出)-L(在符号表中保留局部符号)。通常你没必要使用-Wa选项,因为编译器把很多命令行选项自动传递给汇编器。(你可以通过-v选项使用GNU编译器,来确切了解有什么选项被传递给编译过程,包括传递给汇编器的选项)2.1 开启清单选项:-acdhlns这些选项开启了汇编器的清单输出。如果只有-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时,如果汇编器在汇编输入文件前要对它们进行空格和注释的预处理,则会终止汇编器的汇编。参见.1预处理,17页。警告:如果文件事实上需要预处理时(如果它们包含有注释),而你使用了-f,as将不能正常工作。2.4 .include命令搜索路径: -I path使用这个选项给目录清单加一个路径path,这个目录清单是.Include命令在搜索指定文件使用的,(参见 7.37 .include,44页)。 你可以视需要多次使用-I来加入不同的路径。第一个搜索的总是当前工作目录;然后,as安照命令行中的顺序(从左到右)搜索-I选项指定的目录。2.5 不同的跳转表: -K在as中使用.word sym1-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 的语法和伪操作处理,使它兼容于Microtec Research 的 ASM68K 或者 ASM960 (视配置目标而定)汇编器。这里没有给出 MRI 语法具体形式,您可以查看 MRI 的手册。需要特别注意的是宏和宏参数的处理有一些不同。这个选项的目的是允许使用 as 汇编现存的MRI汇编器代码。as并不完全与MRI兼容。MRI 汇编器的具体操作依赖于目标文件格式,使用其他目标文件格式不支持这些操作。要想支持这些需要分别增强各种目标文件的格式。它们是: 公共段中的全局符号M68K的MRI汇编器允许使用通用段(common sections),而通用段将被连接器合并。其它目标文件格式并不支持使用通用段。 as处理通用段时把整个通用段当作一个单独的通用符号。它允许在通用段中定义局部符号,但是它不支持通用段中使用全局符号,因为没法描述它们。 复杂重定向MRI汇编器允许错误段址的重定向,重定向连接了两个或多个段的起始地址。其它目标文件格式都不支持这些。 END伪操作指定的启始地址MRI中的END伪操作允许指定一个开始地址。其它目标文件格式不允许这么做。你也可以对连接程序使用选项 -e来指定起始地址,也可以在连接脚本中指定。 IDNT, .ident 和 NAME伪操作MRI 中的IDNT, .ident 和 NAME 伪操作给输出文件分配一个模块名。其它目标文件格式不支持。 ORG 伪操作m68k的MRI中ORG伪操作在一个给定的地址开辟一个具有独立地址的段。这和通常的as的 .ORG 伪操作不同,它在当前的段中改变定位。别的目标文件格式不支持独立段。因为一个段的地址可能在连接脚本中分配。 还有一些MRI汇编器的功能as不支持,大体上,它们都难于实现,而且似乎无关紧要。其中的一些特性可能在今后的版本中将会支持。EBCDIC strings不支持EBCDIC 字符串。压缩BCD 码不支持压缩BCD 码。这表示不支持 DC.P 和 DCB.P 伪操作。FEQU 伪操作不支持m68k 的 FEQU 伪操作。NOOBJ 伪操作不支持m68k 的 NOOBJ 伪操作。优化分支控制选项(OPT branch control options)忽略 m68k 的优化分支控制选项B, BRS, BRB, BRL, 还有BRW。as自动的放松所有的分支(不管是向前还是向后)到一个合适的大小,所以这些选项不起作用。优化清单控制选项(OPT list control options)以下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 伪操作的各种选项。 .optimize pseudo-op不支持 i960 的 .optimize 伪操作。.output pseudo-op不支持 i960 的 .output 伪操作。.setreal pseudo-op不支持 i960 的 .setreal 伪操作。2.9 相关性跟踪:-MDas能为它创造的文件产生一个从属文件。这个文件包括一个规则,用来为make描述主要源文件的依赖性。规则写进文件,文件名规则的参数中指定。自动更新 makefiles 使用了这个功能。2.10 命名目标文件:-o当你运行as时,总是产生一个目标文件。在默认的情况下,它的名字是 a.out(或者是b.out仅对 Intel 960 )。你用这个选项(选项后跟一个文件名)给目标文件指定一个不同的文件名。不管目标文件叫什么,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如何汇编你的文件。而错误,将会终止汇编过程,仍会被报告。

温馨提示

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

评论

0/150

提交评论