s汇编器命令

上传人:新** 文档编号:469621471 上传时间:2022-09-27 格式:DOCX 页数:16 大小:72KB
返回 下载 相关 举报
s汇编器命令_第1页
第1页 / 共16页
s汇编器命令_第2页
第2页 / 共16页
s汇编器命令_第3页
第3页 / 共16页
s汇编器命令_第4页
第4页 / 共16页
s汇编器命令_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《s汇编器命令》由会员分享,可在线阅读,更多相关《s汇编器命令(16页珍藏版)》请在金锄头文库上搜索。

1、7 汇编器命令所有的汇编器命令名都由句号(.)开头。命令名的其余是字母,通常使用小写。本章讨论可用命令,不理会gun汇编器针对目标机器配置。某些机器的配置提供附加的命令。7.1 .abort本命令立即终止汇编过程。这是为了兼容其它的汇编器。早期的想法是汇编语言的源码会被输送进汇编器。如果发送源码的程序要退出,它可以使用本命令通知as退出。将来可能不再支持使用.abort7.2 .ABORT当生成COFF输出时,汇编器把这条命令作为.abort接受。当产成b.out输出时,汇编器允许使用这条命令,但忽略它。7.3 .align abs-expr, abs-expr, abs-expr增加位置计数

2、器(在当前的子段)使它指向规定的存储边界。第一个表达式参数(结果必须是纯粹的数字)是必需参数:边界基准,见后面的描述。第二个表达式参数(结果必须是纯粹的数字)给出填充字节的值,用这个值填充位置计数器越过的地方。这个参数(和逗点)可以省略,如果省略它,填充字节的值通常是0。但在某些系统上,如果本段标识为包含代码,而填充值被省略,则使用no-op指令填充这个空间。第3个参数表达式的结果也必须是纯粹的数字,这个参数是可选的。如果存在第3个参数,它代表本对齐命令允许越过字节数的最大值。如果完成这个对齐需要跳过的字节比指定的最大值还多,则根本无法完成对齐。您可以在边界基准后简单地使用两个逗号,以省略填充

3、值参数(第二参数);如果您想在适当的时候,对齐操作自动使用no-op指令填充,这个方法将非常奏效。边界基准的定义因系统而有差异。a29k,hppa,m68k,m88k,w65,sparc,Hitachi SH, 和使用ELF格式的i386,第一个表达式是边界基准,单位是字节。例如.align 8向后移动位置计数器至8的倍数。如果地址已经是8的倍数,则无需移动。有些其它系统,包括使用a.out格式的i386,ARM和strongarm,这代表位置计数器移动后,计数器中连续为0的低序位数量。例如.align 3向后移动位置计数器直至8的倍数(计数器的最低的3位为0)。如果地址已经是8倍数,则无需移

4、动。之所以存在这样的区别,是因为GAS需要模仿各种汇编器的不同动作。GAS还提供.balign和.p2align命令,在以后详细讲述,这两条命令在所有的机型上使用相同的动作 (但需要向GAS明确说明机型)。7.4 .ascii string.ascii可不带参数或者带多个由逗点分开的字符串(见3.6.1.1节Strings,第19页)。它把汇编好的每个字符串(在字符串末不自动追加零字节)存入连续的地址。7.5 .asciz string.asciz类似与.ascii,但在每个字符串末自动追加一个零字节。.asciz中的z代表“zero”。7.6.balignwl abs-expr, abs-e

5、xpr, abs-expr增加位置计数器(在当前子段)使它指向规定的存储边界。第一个表达式参数(结果必须是纯粹的数字)是必需参数:边界基准,单位为字节。例如,.balign 8向后移动位置计数器直至计数器的值等于8的倍数。如果位置计数器已经是8的倍数,则无需移动。第2个表达式参数(结果必须是纯粹的数字)给出填充字节的值,用这个值填充位置计数器越过的地方。第2个参数(和逗点)可以省略。如果省略它,填充字节的值通常是0。但在某些系统上,如果本段标识为包含代码,而填充值被省略,则使用no-op指令填充空白区。第3个参数的结果也必须是纯粹的数字,这个参数是可选的。如果存在第3个参数,它代表本对齐命令允

6、许跳过字节数的最大值。如果完成这个对齐需要跳过的字节数比规定的最大值还多,则根本无法完成对齐。您可以在边界基准参数后简单地使用两个逗号,以省略填充值参数(第二参数);如果您在想在适当的时候,对齐操作自动使用no-op指令填充,本方法将非常奏效。.balignw和.balignl是.balign命令的变化形式。.balignw使用2个字节来填充空白区。.balignl使用4字节来填充。例如,.balignw 4,0x368d将地址对齐到4的倍数,如果它跳过2个字节,GAS将使用0x368d填充这2个字节(字节的确切存放位置视处理器的存储方式而定)。如果它跳过1或3个字节,则填充值不明确。7.7.

7、byte expressions.byte可不带参数或者带多个表达式参数,表达式之间由逗点分隔。每个表达式参数都被汇编成下一个字节。7.8 .comm symbol , m声明一个符号名为symbol的通用符号(common symbol)。当连接时,目标文件中的通用符号可能被并入其它目标文件中已定义的符号,或者被并入其他目标文件中同名通用符号。如果ld无法找到该符号的定义只有一个或多个通用符号则分配length个字节的未初始化内存。Length必须是一个纯粹的表达式。如果ld发现多个同名的通用符号,并且它们的长度不同,ld将按照它们之中最大的length值为符号分配内存。当使用ELF格式时,

8、.comm可以使用第3个参数。它代表符号需要对齐的边界基准(例如,边界基准为16时意味着符号存放地址的最低4位应该是零)。第3个参数表达式结果必须是纯粹的数字,而且一定是2的幂。当ld为通用符号分配未初始化内存时,在存放符号时要使用到这个参数。如果没有规定边界基准,as将把边界基准设置成以2为底的该符号长度的对数,并向下取整。最大值为16。.comm的语法在HPPA上稍微有些不同。语法是symbol .comm, length;其中参数symbol是可选的。7.9 .data subsection.data通知as汇编后续语句,将它们追加在编号为subsection(subsection必须是

9、纯粹的表达式)数据段末。如果参数subsection省略,则默认是0。7.10 .def name开始定义符号name的调试信息;定义区延伸至遇到.endef命令。本命令只在as被配置成COFF格式输出时才使用;当输出为b.out格式时,可以使用.def命令,但被忽略。7.11 .desc symbol, abs-expression本命令用一个纯粹表达式的低16位的值设置符号symbol的描述符(见5.5符号属性,第30页)。当as被配置成COFF输出时,.desc命令无效;它只适用于a.out或b.out目标格式。为兼容起见,当配置为COFF时,as接受此命令,但不产生输出。7.12 .d

10、im这条命令由编译器生成的,以便在符号表中加入辅助调试信息。只可以在.def/.endef对之间使用此命令。.dim仅仅在生成COFF格式输出时是有意义的;当生成b.out时,as接受这条命令,但忽略它7.13 .double flonums.double后跟着零个或由逗点分开多个的浮点数。本指令汇编出浮点数字。生成的浮点数的确切类型视as的配置而定。7.14 .eject当生成汇编清单时,强制清单页在此点中断。7.15 .else.else 是支持as进行的条件汇编指令之一;见7.35.if,第43页。如果前面.if命令的条件不成立,则表示需要汇编.else后的一段代码。7.16 .else

11、if.elseif 是支持as进行的条件汇编指令之一。见7.35节 .if,第43页。它可以在.esle段中快速产生一个新的.if块。7.17 .end.end标记着汇编文件的结束。as不处理.end命令后的任何语句。7.18 .endef这条命令标志着从.def开始的符号定义结束。.endef命令仅仅在生成COFF格式的输出有意义;如果as被配置为生成b.out输出,虽然as接受这条命令,但忽略它。7.19 .endfunc.endfunc标志着一个由.func命令定义的函数的结束。7.20 .endif.endif是支持as进行的条件汇编的指令之一.它标志着条件汇编代码块的结束。见7.35

12、节.if,第43页。7.21 .equ symbol, expression本命令把符号symbol值设置为expression。它等同与.set命令。见7.68.set,第53页。在HPPA上的equ语法是symbol .equ expression。7.22 .equiv symbol, expression.equiv 类似与.equ & .set命令, 不同之处在于,如果符号已经定义过,as会发出错误信号。除了错误信息的内容之外,它大体上等价与:.ifdef SYM.err.endif.equ SYM,VAL7.23 .err如果as汇编一条.err命令, 将打印一条错误信息,除非使用

13、了-Z 选项, as不会生成目标文件。 可以在条件编译代码中使用它来发出错误信息。7.24 .exitm从当前宏定义体中提前退出。见7.50 Macro,第47页。7.25 .extern.extern可以在源程序中使用-以便兼容其他的汇编器但会被忽略。as将所有未定义的符号都当作外部符号处理。7.26 .fail expression生成一个错误(error)或警告(warning)。如果expression的值大于或等于500,as会打印一条“警告”消息。如果expression的值小于500,as会打印一条“错误”消息。消息中包含了expression的值。这在复杂的宏嵌套或条件汇编时偶

14、尔用到。7.27 .file string.file 通告as我们准备开启一个新的逻辑文件。 string 是新文件名。总的来说,文件名是否使用引号都可以;但如果您希望规定一个空文件名时,必须使用引号-。本语句将来可能不再使用允许使用它只是为了与旧版本的as程序兼容。在as的一些配置中,已经删除了.file以避免与其它的汇编器冲突。见第8章 Machine Dependencies, 第61页。7.28 .fill repeat , size , valuerepeat, size 和value都必须是纯粹的表达式。本命令生成size个字节的repeat个副本。Repeat可以是0或更大的值。

15、Size 可以是0或更大的值, 但即使size大于8,也被视作8,以兼容其它的汇编器。各个副本中的内容取自一个8字节长的数。最高4个字节为零,最低的4个字节是value,它以as正在汇编的目标计算机的整数字节顺序排列。每个副本中的size个字节都取值于这个数最低的size个字节。再次说明,这个古怪的动作只是为了兼容其他的汇编器。size参数和value参数是可选的。如果不存在第2个逗号和value参数,则假定value为零。如果不存在第1个逗号和其后的参数,则假定size为1。7.29 .float flonums本命令汇编0个或多个浮点数,浮点数之间由逗号分隔。它和.single的汇编效果相同。生成的浮点数的确切类型视as的配置而定。见第8章 Machine Dependencies, 61页。7.30 .func name,label.func发出一个调试信息用以指示函数name,这个信息将被忽略,除非文件使用debugging enabled方式的汇编。目前只支持-gstabs。label是函数的入口点,如果name被省略则

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号