gas汇编器命令文档格式.docx

上传人:b****4 文档编号:7664144 上传时间:2023-05-08 格式:DOCX 页数:34 大小:45.02KB
下载 相关 举报
gas汇编器命令文档格式.docx_第1页
第1页 / 共34页
gas汇编器命令文档格式.docx_第2页
第2页 / 共34页
gas汇编器命令文档格式.docx_第3页
第3页 / 共34页
gas汇编器命令文档格式.docx_第4页
第4页 / 共34页
gas汇编器命令文档格式.docx_第5页
第5页 / 共34页
gas汇编器命令文档格式.docx_第6页
第6页 / 共34页
gas汇编器命令文档格式.docx_第7页
第7页 / 共34页
gas汇编器命令文档格式.docx_第8页
第8页 / 共34页
gas汇编器命令文档格式.docx_第9页
第9页 / 共34页
gas汇编器命令文档格式.docx_第10页
第10页 / 共34页
gas汇编器命令文档格式.docx_第11页
第11页 / 共34页
gas汇编器命令文档格式.docx_第12页
第12页 / 共34页
gas汇编器命令文档格式.docx_第13页
第13页 / 共34页
gas汇编器命令文档格式.docx_第14页
第14页 / 共34页
gas汇编器命令文档格式.docx_第15页
第15页 / 共34页
gas汇编器命令文档格式.docx_第16页
第16页 / 共34页
gas汇编器命令文档格式.docx_第17页
第17页 / 共34页
gas汇编器命令文档格式.docx_第18页
第18页 / 共34页
gas汇编器命令文档格式.docx_第19页
第19页 / 共34页
gas汇编器命令文档格式.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

gas汇编器命令文档格式.docx

《gas汇编器命令文档格式.docx》由会员分享,可在线阅读,更多相关《gas汇编器命令文档格式.docx(34页珍藏版)》请在冰点文库上搜索。

gas汇编器命令文档格式.docx

之所以存在这样的区别,是因为GAS需要模仿各种汇编器的不同动作。

GAS还提供.balign和.p2align命令,在以后详细讲述,这两条命令在所有的机型上使用相同的动作(但需要向GAS明确说明机型)。

7.4.ascii"

string"

... 

.ascii可不带参数或者带多个由逗点分开的字符串(见3.6.1.1节[Strings],第19页)。

它把汇编好的每个字符串(在字符串末不自动追加零字节)存入连续的地址。

7.5.asciz"

.asciz类似与.ascii,但在每个字符串末自动追加一个零字节。

‘.asciz’中的‘z’代表“zero”。

7.6 

.balign[wl]abs-expr,abs-expr,abs-expr 

增加位置计数器(在当前子段)使它指向规定的存储边界。

边界基准,单位为字节。

例如,‘.balign8’向后移动位置计数器直至计数器的值等于8的倍数。

如果位置计数器已经是8的倍数,则无需移动。

第2个表达式参数(结果必须是纯粹的数字)给出填充字节的值,用这个值填充位置计数器越过的地方。

第2个参数(和逗点)可以省略。

如果省略它,填充字节的值通常是0。

但在某些系统上,如果本段标识为包含代码,而填充值被省略,则使用no-op指令填充空白区。

第3个参数的结果也必须是纯粹的数字,这个参数是可选的。

如果存在第3个参数,它代表本对齐命令允许跳过字节数的最大值。

如果完成这个对齐需要跳过的字节数比规定的最大值还多,则根本无法完成对齐。

您可以在边界基准参数后简单地使用两个逗号,以省略填充值参数(第二参数);

如果您在想在适当的时候,对齐操作自动使用no-op指令填充,本方法将非常奏效。

.balignw和.balignl是.balign命令的变化形式。

.balignw使用2个字节来填充空白区。

.balignl使用4字节来填充。

例如,.balignw4,0x368d将地址对齐到4的倍数,如果它跳过2个字节,GAS将使用0x368d填充这2个字节(字节的确切存放位置视处理器的存储方式而定)。

如果它跳过1或3个字节,则填充值不明确。

7.7.byteexpressions 

.byte可不带参数或者带多个表达式参数,表达式之间由逗点分隔。

每个表达式参数都被汇编成下一个字节。

7.8.commsymbol,length 

.comm声明一个符号名为symbol的通用符号(commonsymbol)。

当连接时,目标文件中的通用符号可能被并入其它目标文件中已定义的符号,或者被并入其他目标文件中同名通用符号。

如果ld无法找到该符号的定义——只有一个或多个通用符号——则分配length个字节的未初始化内存。

Length必须是一个纯粹的表达式。

如果ld发现多个同名的通用符号,并且它们的长度不同,ld将按照它们之中最大的length值为符号分配内存。

当使用ELF格式时,.comm可以使用第3个参数。

它代表符号需要对齐的边界基准(例如,边界基准为16时意味着符号存放地址的最低4位应该是零)。

第3个参数表达式结果必须是纯粹的数字,而且一定是2的幂。

当ld为通用符号分配未初始化内存时,在存放符号时要使用到这个参数。

如果没有规定边界基准,as将把边界基准设置成以2为底的该符号长度的对数,并向下取整。

最大值为16。

.comm的语法在HPPA上稍微有些不同。

语法是‘symbol.comm,length’;

其中参数symbol是可选的。

7.9.datasubsection 

.data通知as汇编后续语句,将它们追加在编号为subsection(subsection必须是纯粹的表达式)数据段末。

如果参数subsection省略,则默认是0。

7.10.defname 

开始定义符号'

name'

的调试信息;

定义区延伸至遇到.endef命令。

本命令只在as被配置成COFF格式输出时才使用;

当输出为b.out格式时,可以使用‘.def’命令,但被忽略。

7.11.descsymbol,abs-expression 

本命令用一个纯粹表达式的低16位的值设置符号symbol的描述符(见5.5[符号属性],第30页)。

当as被配置成COFF输出时,‘.desc’命令无效;

它只适用于a.out或b.out目标格式。

为兼容起见,当配置为COFF时,as接受此命令,但不产生输出。

7.12.dim 

这条命令由编译器生成的,以便在符号表中加入辅助调试信息。

只可以在.def/.endef对之间使用此命令。

'

.dim'

仅仅在生成COFF格式输出时是有意义的;

当生成b.out时,as接受这条命令,但忽略它

7.13.doubleflonums 

.double后跟着零个或由逗点分开多个的浮点数。

本指令汇编出浮点数字。

生成的浮点数的确切类型视as的配置而定。

7.14.eject 

当生成汇编清单时,强制清单页在此点中断。

7.15.else 

.else是支持as进行的条件汇编指令之一;

见7.35[.if],第43页。

如果前面.if命令的条件不成立,则表示需要汇编.else后的一段代码。

7.16.elseif 

.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节[.if],第43页。

7.21.equsymbol,expression 

本命令把符号symbol值设置为expression。

它等同与'

.set'

命令。

见7.68[.set],第53页。

在HPPA上的equ语法是‘symbol.equexpression’。

7.22.equivsymbol,expression 

.equiv类似与.equ&

.set命令,不同之处在于,如果符号已经定义过,as会发出错误信号。

除了错误信息的内容之外,它大体上等价与:

.ifdefSYM 

.err 

.endif 

.equSYM,VAL 

7.23.err 

如果as汇编一条.err命令,将打印一条错误信息,除非使用了-Z选项,as不会生成目标文件。

可以在条件编译代码中使用它来发出错误信息。

7.24.exitm 

从当前宏定义体中提前退出。

见7.50[Macro],第47页。

7.25.extern 

.extern可以在源程序中使用--以便兼容其他的汇编器—但会被忽略。

as将所有未定义的符号都当作外部符号处理。

7.26.failexpression 

生成一个错误(error)或警告(warning)。

如果expression的值大于或等于500,as会打印一条“警告”消息。

如果expression的值小于500,as会打印一条“错误”消息。

消息中包含了expression的值。

这在复杂的宏嵌套或条件汇编时偶尔用到。

7.27.filestring 

.file通告as我们准备开启一个新的逻辑文件。

string是新文件名。

总的来说,文件名是否使用引号‘"

’都可以;

但如果您希望规定一个空文件名时,必须使用引号-"

"

本语句将来可能不再使用—允许使用它只是为了与旧版本的as程序兼容。

在as的一些配置中,已经删除了.file以避免与其它的汇编器冲突。

见第8章[MachineDependencies],第61页。

7.28.fillrepeat,size,value 

repeat,size和value都必须是纯粹的表达式。

本命令生成size个字节的repeat个副本。

Repeat可以是0或更大的值。

Size可以是0或更大的值,但即使size大于8,也被视作8,以兼容其它的汇编器。

各个副本中的内容取自一个8字节长的数。

最高4个字节为零,最低的4个字节是value,它以as正在汇编的目标计算机的整数字节顺序排列。

每个副本中的size个字节都取值于这个数最低的size个字节。

再次说明,这个古怪的动作只是为了兼容其他的汇编器。

size参数和value参数是可选的。

如果不存在第2个逗号和value参数,则假定value为零。

如果不存在第1个逗号和其后的参数,则假定size为1。

7.29.floatflonums 

本命令汇编0个或多个浮点数,浮点数之间由逗号分隔。

它和.single的汇编效果相同。

见第8章[MachineDependencies],61页。

7.30.funcname[,label] 

.func发出一个调试信息用以指示函数name,这个信息将被忽略,除非文件使用debuggingenabled方式的汇编。

目前只支持‘--gstabs’。

label是函数的入口点,如果name被省略则使用预定的‘引导符’。

‘引导符’通常可以是_或者什么也没有,视目标机型而定。

所有函数现时被定义为void返回类型,函数体必须使用.endfunc来结束 

7.31.globalsymbol,.globlsymbol 

.global使符号symbol对连接器ld可见。

如果您在局部过程中定义符号symbol,其它和此的局部过程都可以访问它的值。

另外,symbol从连接到本过程的另一个文件中的同名符号获取自己的属性。

两种写法都可以(‘.globl’和‘.global’),以便兼容多种汇编器。

7.32.hiddennames 

这是一条关于ELF可见度的命令。

其它两条是.internal(见7.39[.internal],44页)和.protected(见7.58[.protected],50页)。

本命令取消指定符号的缺省可见度(可见度由其他命令捆绑设定:

local,global,weak)。

本命令把可见度设置为hidden,这意味着本符号对其他部分不可见。

这最好是一些需要长期保护的符号。

7.33.hwordexpressions 

本命令后可以不带或带多个expressions,并且为每个参数生成一个16位数。

本命令等同与'

.short'

在某些架构上,也可能等同与'

.word'

7.34.ident 

本命令被某些汇编器用来在目标文件中加入标饰。

为了使汇编源码文件兼容上述的汇编器,as简单地接受本命令,但实际上不产生东西。

7.35.ifabsoluteexpression 

.if标志着一段代码的开始,这段代码只有在参数absoluteexperession(必须是一个独立的表达式)不为0时才进行汇编。

这段条件汇编代码必须使用.endif标志结束。

(见7.20[.endif],40页);

另外,可以使用.esle来标记一个代码块(见7.15[.else],40页),这个代码块与前面那段代码只有一个会进行汇编。

如果您需要检查数个汇编条件,可以在使用.elseif命令,以避免在.else代码块中进行if/else语句块的嵌套。

同样可以使用下面.if的变体:

.ifdefsymbol 

如果指定的符号symbol已经定义过,汇编下面那段代码。

.ifcstring1,string2 

如果两个字符串相同的话,汇编下面那段代码。

字符串可以可选地使用单引号。

如果不使用引号则第1个字符串在逗号处结束。

第2个字符串在本行末结束。

包含空白的字符串应该使用引号标注。

字符串比较时是区分大小写的。

.ifeqabsoluteexpression 

如果参数的值为0,汇编下面那段代码。

.ifeqsstring1,string2 

这是.ifc的另一种形式,字符串必须使用双引号标注。

.ifgeabsoluteexpression 

如果参数的值大于等于0,汇编下面那段代码。

.ifgtabsoluteexpression 

如果参数的值大于0,汇编下面那段代码。

.ifleabsoluteexpression 

如果参数的值小于等于0,汇编下面那段代码。

.ifltabsoluteexpression 

如果参数的值小于0,汇编下面那段代码。

.ifncstring1,string2. 

类似与.ifc,不过使用反向的测试:

如果两个字符串不相等的话,汇编下面那段代码。

.ifndefsymbol 

.ifnotdefsymbol 

如果指定的符号symbol不曾被定义过,汇编下面那段代码。

上面两种写法是等效的。

.ifneabsoluteexpression 

如果参数的值为不等于0,汇编下面那段代码。

(换句话说,这是.if的另一种写法). 

.ifnesstring1,string2 

类似与.ifeqs,不过使用反向的测试:

7.36.incbin"

file"

[,skip[,count]] 

这条incbin命令在当前位置逐字地引入file文件的内容。

您可以使用命令行选项参数“-I”来控制搜索路径。

(见第2章[Command-LineOptions],11页)。

文件名必须使用引号。

参数skip表示需要从文件头跳过的字节数目。

参数count表示读入的最大字节数目。

注意,数据没有进行任何方式的对齐操作,所以用户需要在.incbin命令的前后进行必要的边界对齐。

7.37.include"

本命令提供在源程序中指定点引入支撑文件的手段。

file中的代码如同紧跟.include后一样被汇编。

当引入文件汇编结束,继续汇编原来的文件。

您可以使用命令行选项参数“-I”来控制搜索路径(见第2章[Command-LineOptions],11页)。

文件名必须使用引号来标注。

7.38.intexpressions 

可以不带参数或带多个expressions,参数之间由逗号分隔。

每个expressions都生成一个数字,这个数字等于表达式在目标机器运行时的值。

字节顺序和数字的位数视汇编的目标机器而定。

7.39.internalnames 

这是一条与ELF可见度相关的命令。

另外的两条是.hidden(见7.32[.hidden],42页)和.protected(见7.58[.protected],50页)。

本命令把指定符号可见度设置为internal,这意味着此符号需要被隐藏(即对其他部分不可见),另外,符号还必须经过处理器的特别的处理。

7.40.irpsymbol,values... 

加工一个需要用values替代symbol的语句序列。

语句序列从.irp命令开始,在.endr命令前结束。

对于每个value都进行如下加工:

用value替代Symbol,并对此语句序列进行汇编。

如果没有给出value,则用空字符串(nullsting)替代symbol,并将此语句序列汇编一次。

使用\symbol,把参数symbol提交给语句序列。

例如下列代码 

.irpparam,1,2,3 

moved\param,sp@- 

.endr 

等同与 

moved1,sp@- 

moved2,sp@- 

moved3,sp@- 

7.41.irpcsymbol,values... 

语句序列从.irpc命令开始,在.endr命令前结束。

对于value中的每个字符,都进行如下加工;

用此字符替代symbol,并对此语句序列进行汇编。

如果没有给出value参数,则用空字符串(nullsting)替代symbol,并将此语句序列汇编一次。

.irpcparam,123 

7.42.lcommsymbol,length 

为一个本地通用符号symbol预留length个字节的内存。

symbol的段(属性)和值(属性)被设置为一个新的本地通用符号应有的属性:

内存是在bss段中分配的,所以在运行时,这些字节开始都是零。

因为symbol没有被声明为全局性的符号,所以symbol对ld通常不可见。

某些目标格式允许在.lcomm命令中使用第3个参数。

这个参数指出这个bss段中的符号对齐操作所需要的边界基准。

.lcomm的语法在HPPA上稍有不同。

表示为‘symbol.lcomm,length’;

symbol是可选的。

7.43.lflags 

as接受本命令,以兼容其他的汇编器,但忽略之。

7.44.lineline-number 

更改逻辑行号,参数line-number必须是个纯粹的表达式。

本命令后的下一行将被赋予此逻辑行号。

因此在当前行之前任何其他的语句(在语句分隔符后)的逻辑行号将被视作line-number-1。

以后as将不在支持这条命令:

只是为了兼容现存的汇编器而接受本命令。

Warning:

在为AMD29K目标机器配置的as中,不能使用本指令。

在这种场合可以使用.ln命令。

尽管这是与a.out或b.out目标代码格式相关的命令,在生成COFF输出时as仍然接受它,并且如果‘.line’出现在.def/endef之外的话,就把它视为‘.ln’命令。

如果‘.line’在.def语句块中的话,.line命令则是一条编译器使用的命令,用来为调式生成辅助符号信息。

7.45.linkonce[type] 

给当前段做一个标志,以便连接器只包含它的一个拷贝。

这个命令可以用于几个不同的目标文件中包含同样的段,但需要连接器在最终的输出文件中只包含一个这样的段。

.linkouce伪操作必须在每个段的实例都中使用。

对重复段的探测基于段名来进行,因此这个段将是唯一的。

本命令只在少数目标格式文件中有效,到写本文为止,只有基于WindowsNT的PE(PortableExecutable)格式的目标文件支持本命令, 

参数type是可选的,如果指定了此参数,它必须是下列字符串之一。

例如 

.Linkoncesame_size 

不是在所有的格式目标文件都可以使用所有类型的参数。

discard静静地舍弃重复的段,这也是默认值。

one_only如果存在重复的段则发出警告,但只保存一个拷贝。

same_size如果重复的段有不同的大小则发出警告。

same_contents如果重复段的内容不是精确的相符则发出警告。

7.46.lnline-number 

‘.ln’命令等同与‘.line’. 

7.47.mrival 

如果参数val是非零值,这将通知as进入MRI模式。

如果参数val的值是零,这通知as退出MRI模式。

这个变化会影响汇编的结果,直到下个.mri命令,或者直到文件尾。

见2.8[MRImode],13页。

7.48.list 

控制(和.nolist命令配合)是否生成汇编清单。

这两个命令维护一个内部的计数器(计数器初始值为0).list命令增加计数器的值,.nolist减少计数器的值。

当计数器的值大与0时将汇编列表。

缺省状态汇编列表的生成是关闭的。

当您打开它的时候(使用带-a选项的命令行)第2章[Command-LineOptions],11页),内部计数器的初始值为1。

7.49.longexpressions 

.long是.int的等价命令,见7.38[.int],44页. 

7.50.macro 

本命令.macro和.endm命令允许您定义宏来生成汇编输出。

例如,下面的语句定义了一个宏sum,这个宏把一个数字序列放入内存。

.macrosumfrom=0,to=5 

.long\from 

.if\to-\from 

sum"

(\from+1)"

\to 

.endm 

使用上述定义,'

SUM0,5'

语句就等于输入下面的汇编语句:

.long0 

.long1 

.long2 

.long3 

.long4 

.long5 

.macromacname 

.macroma

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2