gas 手册 chapter1.docx

上传人:b****7 文档编号:10983554 上传时间:2023-02-24 格式:DOCX 页数:16 大小:23.95KB
下载 相关 举报
gas 手册 chapter1.docx_第1页
第1页 / 共16页
gas 手册 chapter1.docx_第2页
第2页 / 共16页
gas 手册 chapter1.docx_第3页
第3页 / 共16页
gas 手册 chapter1.docx_第4页
第4页 / 共16页
gas 手册 chapter1.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

gas 手册 chapter1.docx

《gas 手册 chapter1.docx》由会员分享,可在线阅读,更多相关《gas 手册 chapter1.docx(16页珍藏版)》请在冰豆网上搜索。

gas 手册 chapter1.docx

gas手册chapter1

 

Usingas

========================================

ThegnuAssembler

Version2.11.90

 

TheFreeSoftwareFoundationInc.thanksTheNiceComputerCompanyofAustraliaforloaningDeanElsnertowritethefirst(Vax)versionofasforProjectgnu.Theproprietors,managementandstaffofTNCCAthankFSFfordistractingthebosswhiletheygotsomeworkdone.

 

DeanElsner,JayFenlason&friends

 

Usingas

EditedbyCygnusSupport

 

Copyright©1991,92,93,94,95,96,97,98,99,2000,2001FreeSoftwareFoundation,Inc.Permissionisgrantedtocopy,distributeand/ormodifythisdocumentunderthetermsoftheGNUFreeDocumentationLicense,Version1.1oranylaterversionpublishedbytheFreeSoftwareFoundation;withnoInvariantSections,withnoFront-CoverTexts,andwithnoBack-CoverTexts.Acopyofthelicenseisincludedinthesectionentitled"GNUFreeDocumentationLicense".

本章约定语

高地址结尾:

big-endian

低地址结尾:

little-endian

ARM过程调用标准:

APCS,ARM过程调用标准(ARMProcedureCallStandard),提供了紧凑的编写例程的一种机制,定义的例程可以与其他例程交织在一起。

最显著的一点是对这些例程来自哪里没有明确的限制。

它们可以编译自C、Pascal、也可以是用汇编语言写成的。

有多个版本的APCS(实际上是16个)。

陷阱异常:

与故障异常不同,CPU不会重新执行引发异常的那条指令。

MIPS指令集架构:

MIPSInstructionSetArchitecture

1概述

本文档是GNU汇编器as的用户手册。

以下是调用as的命令概要,详细内容参见第2章[命令行选项],11页。

‘binutils’和‘ld’请查看gcc

(1),ld

(1)和Info相关条目

as[-a[cdhlns][=file]][-D][--defsymsym=val]

[-f][--gstabs][--gdwarf2][--help][-Idir]

[-J][-K][-L]

[--listing--lhs-width=NUM][--listing-lhs-width2=NUM]

[--listing-rhs-width=NUM][--listing-cont-lines=NUM]

[--keep-locals][-oobjfile][-R][--statistics][-v]

[-version][--version][-W][--warn][--fatal-warnings]

[-w][-x][-Z][--target-help]

[-marc[5|6|7|8]]

[-EB|-EL]

[-m[arm]1|-m[arm]2|-m[arm]250|-m[arm]3|

-m[arm]6|-m[arm]60|-m[arm]600|-m[arm]610|

-m[arm]620|-m[arm]7[t][[d]m[i]][fe]|-m[arm]70|

-m[arm]700|-m[arm]710[c]|-m[arm]7100|

-m[arm]7500|-m[arm]8|-m[arm]810|-m[arm]9|

-m[arm]920|-m[arm]920t|-m[arm]9tdmi|

-mstrongarm|-mstrongarm110|-mstrongarm1100]

[-m[arm]v2|-m[arm]v2a|-m[arm]v3|-m[arm]v3m|

-m[arm]v4|-m[arm]v4t|-m[arm]v5|-[arm]v5t|

-[arm]v5te]

[-mthumb|-mall]

[-mfpa10|-mfpa11|-mfpe-old|-mno-fpu]

[-EB|-EL]

[-mapcs-32|-mapcs-26|-mapcs-float|

-mapcs-reentrant]

[-mthumb-interwork][-moabi][-k]

[-O]

[-O|-n|-N]

[-mb|-me]

[-Av6|-Av7|-Av8|-Asparclet|-Asparclite

-Av8plus|-Av8plusa|-Av9|-Av9a]

[-xarch=v8plus|-xarch=v8plusa][-bump]

[-32|-64]

[-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB|

-AKC|-AMC]

[-b][-no-relax]

[--m32rx|--[no-]warn-explicit-parallel-conflicts|

--W[n]p]

[-l][-m68000|-m68010|-m68020|...]

[-jsri2bsr][-sifilter][-relax]

[-mcpu=[210|340]]

[-m68hc11|-m68hc12]

[--force-long-branchs][--short-branchs]

[--strict-direct-mode][--print-insn-syntax]

[--print-opcodes][--generate-example]

[-nocpp][-EL][-EB][-Gnum][-mcpu=CPU]

[-mips1][-mips2][-mips3][-mips4][-mips5]

[-mips32][-mips64]

[-m4650][-no-m4650]

[--trap][--break][-n]

[--emulation=name]

[--|files...]

-a[cdhlmns]

打开清单输出选项,可以任意使用以下各种方法:

-ac忽略假条件

-ad忽略调试指示

-ah包含高级(语言)源代码

-al包含汇编代码

-am包含宏扩展

-an忽略表格处理

-as包含符号表

=file设置清单文件名

你可以组合使用这些选项;例如,不经过表格处理的汇编代码清单使用‘-aln’,如果要使用‘=file’选项,它必须是最后一个选项。

选项‘-a’单独使用时,缺省含义是‘-ahls’。

-D忽略。

为了兼容使用其它汇编器的脚本而保留。

--defsymsym=value

汇编输入文件前,定义符号sym的值为value。

value必须是一个整型常量。

同在C语言中一样,前导字符‘0x’表示这是一个十六进制值,前导字符‘0’表示这是一个八进制值。

-f“加速处理”---对空白和注释不进行预处理(假定输入源是编译器的输出)。

--gstabs逐行生成stabs格式调试信息,如果调试器可以处理这些信息将有助于汇编代码调试。

--gdwarf2

逐行生成DWARF2格式调试信息,如果调试器可以处理这些信息将有助于汇编代码调试。

注意这个选项只能被某些目标格式支持,不是全部格式都能使用。

--help打印命令行选项概要后退出。

--target-help

打印全部目标格式相应的命令行选项概要后退出

-Idir在.include命令的搜索表中增加一个目录dir。

-J发生符号溢出时不发出警告信息。

-K长跳转使用不同的跳转表时发出警告。

-L

--keep-locals

保留(符号表中的)局部符号。

在传统的a.out系统中这些符号由字母‘L’开始,但是不同系统中的局部标签前缀不同。

--listing-lhs-width=number

设置汇编器清单的输出数据列最大宽度为number,单位为字。

--listing-lhs-width2=number

设置汇编器清单连续行的输出数据列最大宽度为number,单位为字。

--listing-rhs-width=number

设置在清单中的输入源文件每行最大宽度为number个字节。

--listing-cont-lines=number

设置一个输入行在清单中最多可以被分成number+1行打印。

-oobjfile

将as输出的目标文件命名为objfile。

-R将数据段并入代码段。

--statistics

打印汇编过程使用的最大空间(以字节为单位)和总时间(以秒为单位)。

--strip-local-absolute

从输出符号表中删除局部绝对符号。

-v

-version

打印as的版本。

--version

打印as的版本后退出。

-W

--no-warn

禁止产生警告信息。

--fatal-warnings

将警告作为错误处理。

--warn不要禁止产生警告信息或将警告信息作为错误处理。

-w忽略。

-x忽略。

-Z即使产生错误信息也生成目标文件。

--|files...

标准输入或要汇编源文件。

使用ARC处理器配置的as可以使用以下选项:

-marc[5|6|7|8]

这个选项从几种变形的处理器核心选定核心。

-EB|-EL

选择“高地址结尾”(-EB)或者是“低地址结尾”(-EL)的输出。

使用ARM处理器系列配置的as可以使用以下选项:

-m[arm][1|2|3|6|7|8|9][...]

指定目标(处理器)为哪种ARM处理器变体。

-m[arm]v[2|2a|3|3m|4|4t|5|5t]

指定目标(处理器)使用哪种ARM架构变体

-mthumb|-mall

激活或禁止只用Thumb指令集译码的功能。

-mfpa10|-mfpa11|-mfpe-old|-mno-fpu

选择目标(处理器)为哪种浮点架构。

-mapcs-32|-mapcs-26|-mapcs-float|-mapcs-reentrant|-moabi

选择使用哪种ARM过程调用标准。

-EB|-EL

选择“高地址结尾”(-EB)或者是“低地址结尾”(-EL)的输出。

-mthumb-interwork

专门指定生成的代码要交互使用Thumb和ARM指令集来编码。

-k指定要使用位置无关代码编码。

使用D10V处理器系列配置的as可以使用以下选项:

-O使用并行指令优化输出。

使用D30V处理器系列配置的as可以使用以下选项:

-O使用并行指令优化输出。

-n生成nops指令时发出警告信息。

-N当32-位乘法指令后有一个nop指令时发出警告。

使用80960处理器系列配置的as可以使用以下选项:

-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB|-AKC|-AMC

指出目标(处理器)是哪种960架构变体。

-b加入分支统计代码。

-no-relax

长跳转不改变比较和分支指令;如果必须改变就发出错误指示。

使用Motorola68000系列配置的as可以使用以下选项:

-l缩短对未定义符号的访问,用单字长访问替换双字节访问。

-m68000|-m68008|-m68010|-m68020|-m68030

|-m68040|-m68060|-m68302|-m68331|-m68332

|-m68333|-m68340|-mcpu32|-m5200

指定目标(处理器)是68000族架构中哪种处理器,缺省是普通的68020,可在配置时更改。

-m68881|-m68882|-mno-68881|-mno-68882

目标机器有(或没有)浮点协处理器。

缺省时假定68020,68030和cpu32有一个协处理器。

虽然单纯的68000不兼容68881,但是却可以同时指定这两个选项,因为可以使用主处理器执行模仿协处理器的指令。

-m68851|-mno-68851

目标机有(或没有)内存管理单元协处理器(MMU)。

缺省值假定有68020或以上使用的MMU。

如想了解PDP-11的机器相关性功能选项的细节,参见8.18.1[PDP-11-选项],122页。

-mpic|-mno-pic

生成位置-无关(或位置-相关)代码。

缺省值为-mpic.

-mall

-mall-extensions

使用所有指令集的扩展集。

这是缺省值。

-mno-extensions

禁止所有指令集的扩展集。

-mextension|-mno-extension

使用(或禁止)指定指令集的扩展集。

-mcpu使用指定CPU所支持的指令集扩展,禁止其它的指令集扩展。

-mmachine

使用指定机器型号所支持的指令集扩展,禁止其它的指令集扩展。

使用picoJava处理器配置的as可以使用以下选项:

-mb生成“高地址结尾”格式的输出。

-ml生成“低地址结尾”格式的输出。

使用Motorola68HC11或68HC12系列配置的as可以使用以下选项:

-m68hc11|-m68hc12

指定目标(处理器)为何种处理器。

缺省值在编译汇编器时由配置选项定义。

--force-long-branchs

相对分支被转换绝对分支。

这涉及到条件分支,无条件分支和分支的子分支。

-S|--short-branchs

当偏移量超出范围时不把相对分支转换为绝对分支。

--strict-direct-mode

当指令不支持直接寻址模式时不将直接寻址模式转换为扩展模式。

--print-insn-syntax

当发生错误时打印指令的语法

--print-opcodes

打印包含语法的指令清单之后退出。

--generate-example

打印各种可能存在的指令范例之后退出。

这个选项只是在测试as时有用。

使用SPARC架构配置的as可以使用以下选项:

-Av6|-Av7|-Av8|-Asparclet|-Asparclite

-Av8plus|-Av8plusa|-Av9|-Av9a

明确选择一种具体的SPARC架构。

‘-Av8plus’和‘-Av8plusa’选择32位环境。

‘-Av9’和‘-Av9a’选择64位环境。

‘-Av8plusa’和‘-Av9a’选用包含UltraSPARC扩展集的SPARCV9指令集。

-xarch=v8plus|-xarch=v8plusa

用以兼容SolarisV9汇编器。

这些选项分别等于-Av8plus和-Av8plusa。

-bump

当汇编器切换到其他架构时发出警告。

使用MIPS处理器配置的as可以使用以下选项:

-Gnum

本选项设置使用gp寄存器隐含访问对象的最大字长。

只有当目标代码格式为ECOFF时才可以使用本选项,例如运行Ultrix的DEC工作站。

缺省值是8。

-EB生成“高地址结尾”格式的输出。

-EL生成“低地址结尾”格式的输出。

-mips1

-mips2

-mips3

-mips4

-mips32生成特定MIPS指令集架构级别(ISAlevel)的代码。

'-mips1'相当于R2000和R3000处理器,'-mips2'相当于R6000处理器,'-mips3'相当于R4000处理器。

‘-mips5’,‘-mips32’,和‘-mips64’分别相当于MIPSV,MIPS32,和MIPS64指令集架构之类的处理器。

-m4650

-no-m4650

生成MIPSR4650芯片代码,这通知汇编器接受‘mad’和‘madu’指令,并在访问‘HI’和‘LO’寄存器的时候不插入‘nop’指令,‘-no-m4650’关闭这个选项。

-mcpu=CPU

生成特定MIPScpu的代码。

这完全等价于‘-mcpu’,但有更多可以使用的cpu值供选择。

--emulation=name

本选项使模拟as使用其他目标配置,包括各个方面的配置,如输出文件格式(只能选择ELF或ECOFF之一),产生调试信息的伪操作的处理,或是存储的符号表信息伪操作的处理,以及缺省的内存存取格式。

有效的配置名name有:

‘mipsecoff’,‘mipself’,‘mipslecoff’,‘mipsbecoff’,‘mipslelf’,‘mipsbelf’。

前两个不改变相应目标的缺省的内存存取格式。

其它的分别依据其配置名中包含的字符'b'或'l'改变缺省的内存存取格式为‘高地址结尾’或‘低地址结尾’。

在任何情况下使用‘-EB’或‘-EL’将会取代选取的内存存取格式。

这个选项当前只支持配置的基本目标是MIPSELF或ECOFF的情况。

另外,如果希望两个基本目标都可以使用,一种基本目标或配置时通过‘--enable-targets=...’指定的其他选项必须包含对另一种基本目标格式的支持。

例如Irix5的配置包含对二种基本目标的支持。

最终这个选项将会支持更多的配置,对汇编器行为进行更细微的控制,而且会支持更多的处理器。

-nocpp

as忽略这个选项。

为了兼容本地工具而接受这个选项。

--trap

--no-trap

--break

--no-break

控制如何处理乘法溢出和除零异常。

使用‘—trap’或‘--no-break’(二者意义相同)将使用陷阱异常(只能在指令集架构级别2或更高级别下工作)进行异常处理;‘-break’或‘--no-trap’(二者意义相同,并且是缺省选项)使用异常结束。

-n当使用本选项时,每次在宏体中产生nop指令时as都会发出一条警告。

使用MCore处理器配置的as可以使用以下选项:

-jsri2bsr

-nojsri2bsr

激活或禁止JSRI到BSR的转换。

缺省值为激活。

命令行选项用来禁止转换。

-sifilter

-nosifilter

激活或禁止硅过滤动作(//siliconfilter?

)。

缺省值为禁止。

可以使用‘-sifilter’命令行选项取代缺省值。

-relax改变长跳转指令。

-mcpu=[210|340]

选择目标硬件上的cpu类型。

这控制着哪些指令能够被汇编。

-EB进行高地址结尾目标的汇编。

-EL进行低地址结尾目标的汇编。

 

1.1本手册的结构

本手册的目的是介绍GNUas的使用知识。

包括源文件所要求的的语法,包括符号,常量和表达式的表示;as能够处理的命令;当然还有如何调用as。

手册也介绍本汇编器各种机器相关的特点。

但是,手册并不介绍汇编语言编程——至于普通的编程更不会涉及!

同样我们也不准备介绍特定机器的架构;不介绍某个特定架构指令集,标准的内存存取方式(standardmnemonics),寄存器或者寻址方式。

这方面信息您可以参考生产商的机器架构的手册。

 

1.2GNU汇编器

GNUas实际上是一个汇编器族。

如果你在一种架构上使用(或已经使用过)GNU汇编器,当您其它架构上再使用as时,会找到一个熟悉的环境。

每一个版本和其他版本有很多共同之处,包括目标文件格式,大部分的汇编命令(通常叫伪操作)和汇编语法。

as的主要用于汇编gcc(GNUC编译器)的输出,供连接器ld加工。

但是,只要可以在某种机型的其他汇编器上能够汇编,我们都尽量使as汇编同样能够汇编。

明确需要授权的情况例外(参见第8章[机器相关性],61页)。

但是这并不是意味着在某架构上as总是使用和其它汇编器相同的语法;例如,我们知道有几种不兼容的680x0汇编语言语法形式。

和其他老汇编器不同,as被设计成对源文件只进行一次性汇编。

这对使用.org命令产生一定的要求(参见7.53[.org],48页)。

 

1.3目标文件格式

GNU汇编器可以被配置成生成某种目标文件格式。

大部分情况下,并不影响你如何使用汇编语言编程;但是,调试符号的命令在不同文件格式中有明显区别。

参见5.5[符号属性],30页。

 

1.4命令行

在命令行中,程序名as之后可以包含选项和文件名。

选项可以以任何顺序使用,可以使用在文件名之前、后、甚至中间,但是文件名出现的先后顺序是有含义的。

当as有一个文件汇编时,‘—’(双链字符)明确代表标准输入文件。

除了‘—’以外,任何以链字符‘-’打头的命令行参数都是一个选项。

每个选项都会改变as的处理方式。

没有选项能够改变其他选项的效果。

每个选项都是以链字符‘-’开始,跟一个或多个字符;这些字符大小写的含义是有区别的。

所有选项都是可选的。

有些选项必须使用正确的文件名跟随。

文件名可能是紧跟在选项字符后(以兼容旧汇编器),也可能不紧跟着前面的选项而成为下一个命令参数(GNU标准)。

以下两个命令行是等价的:

as-omy-object-file.omumble.s

as-omy-object-file.omumble.s

 

1.5输入文件

我们使用短语源程序(sourceprogram)或使用更简洁的源(source)来代表输入as的程序。

程序可以放在一个或多个文件中,这并不改变源程序的内在含义。

源程序在这些有顺序的文件中是一个连续的文本。

您每次运行as时,它仅仅汇编一个源程序,这个源程序由一个或多个文件组成。

(标准输入也是一个文件。

你可以在as的命令行中不指定输入文件名或指定多个输入文件名。

输入文件名会被(从左到右)依次读取。

某个命令行参数(任何位置)如果没有特别的定义就被当作一个输入文件名。

如果你没有给出文件名,as就尝试从as的标准输入读取一个输入文件,通常这个标准输

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

当前位置:首页 > 考试认证 > 财会金融考试

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

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