| Current File : //usr/man/zh_CN.UTF-8/man1/as.1 |
'\" te
.\" Copyright (c) 2012, 2015, Oracle and/or its affiliates.All rights reserved
.TH as 1 "2015 年 4 月 7 日" "SunOS 5.11" "用户命令"
.SH 名称
as \- 汇编程序
.SH 用法概要
.LP
.nf
SPARC
.fi
.LP
.nf
\fBas\fR [ \fB-hwcap\fR={1|0} ] [ \fB-L\fR ] [ \fB-m\fR ] [ \fB-m32\fR ] [ \fB-m64\fR ]
[ \fB-n\fR ] [ \fB-o\fR \fIoutfile\fR ] [ \fB-ul\fR ] [ \fB-P\fR ]
[ \fB-D\fR\fIname\fR ] [ \fB-D\fR\fIname\fR=\fIdef\fR ] [ \fB-I\fR\fIpath\fR ]
[ \fB-U\fR\fIname\fR.... ] [ \fB-Q\fR[y|n] ] [ \fB-s\fR ]
[ \fB-S\fR[a|b|c|l|A|B|C|L]] [ \fB-V\fR ] [ \fB-x\fRarch=\fIv\fR ]
[ \fB-xF\fR ] [ \fB-Y\fR[m|c],\fIpath\fR ] [ \fB-YI\fR,\fIpath\fR ] \fIfilename\fR...
.fi
.LP
.nf
x86
.fi
.LP
.nf
\fBas\fR [ \fB-a32\fR ] [ \fB-m\fR ] [ \fB-m32\fR ] [ \fB-m64\fR ] [ \fB-n\fR ]
[ \fB-H\fR ] [ \fB-nH\fR ] [ \fB-o\fR \fIoutfile\fR ]
[ \fB-P\fR ] [ \fB-D\fR\fIname\fR ] [ \fB-D\fR\fIname\fR=\fIdef\fR ] [ \fB-I\fR\fIpath\fR ]
[ \fB-U\fR\fIname\fR.... ]
[ \fB-KPIC\fR ] [ \fB-Q\fR[y|n] ] [ \fB-s\fR ] [ \fB-S\fR[a|b|c|l|A|B|C|L]] [ \fB-V\fR ]
[ \fB-xchip\fR=\fIv\fR ] [ \fB-xmodel\fR=[\fIa\fR] ]
[ \fB-Y\fR[m|d],\fIpath\fR ] [ \fB-YI\fR,\fIpath\fR ] \fIfilename\fR...
.fi
.SH 描述
.sp
.LP
\fBas\fR 命令基于汇编语言源文件创建目标文件。
.SH 选项
.sp
.LP
本节分为三部分:
.RS +4
.TP
.ie t \(bu
.el o
通用选项(SPARC 和 x86 通用的选项)
.RE
.RS +4
.TP
.ie t \(bu
.el o
SPARC 选项
.RE
.RS +4
.TP
.ie t \(bu
.el o
x86 选项
.RE
.SS "通用选项"
.sp
.ne 2
.mk
.na
\fB\fB-D\fR\fIname\fR\fR
.ad
.br
.na
\fB\fB-D\fR\fIname\fR=\fIdef\fR\fR
.ad
.sp .6
.RS 4n
当 \fB-P\fR 选项生效时,这些选项传递给 \fBcpp\fR(1) 预处理程序,而不用 \fBas\fR 命令进行解释;否则,它们将遭到忽略。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-I\fR \fIpath\fR\fR
.ad
.sp .6
.RS 4n
当 \fB-P\fR 选项生效时,此选项传递给 \fBcpp\fR(1) 预处理程序,而不用 \fBas\fR 命令进行解释;否则,它将遭到忽略。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-i\fR\fR
.ad
.sp .6
.RS 4n
指示 \fBas\fR 忽略预处理程序中的行编号信息。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-m\fR\fR
.ad
.sp .6
.RS 4n
对汇编程序的输入运行 \fBm4\fR(1) 宏处理程序。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-m32\fR|\fB-m64\fR\fR
.ad
.sp .6
.RS 4n
生成 32 位或 64 位 ELF 格式目标文件代码。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-n\fR\fR
.ad
.sp .6
.RS 4n
汇编时禁止显示所有警告。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-o\fR \fIoutfile\fR\fR
.ad
.sp .6
.RS 4n
将汇编的输出放入 \fIoutfile\fR。缺省情况下,输出文件名通过删除输入文件名的 \fB\&.s\fR 后缀(如果有),然后附加 \fB\&.o\fR 后缀生成。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-P\fR\fR
.ad
.sp .6
.RS 4n
对汇编的文件运行 \fBcpp\fR(1)(即 C 预处理程序)。预处理程序单独针对每个输入文件(而非它们的组合)运行。预处理程序的输出传递给汇编程序。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-Q\fR[\fBy\fR|\fBn\fR] \fR
.ad
.sp .6
.RS 4n
如果指定了 \fBy\fR 选项,则它在输出目标文件的注释部分生成“汇编程序版本”信息。如果指定了 \fBn\fR 选项,则禁止生成该信息。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-S\fR[\fBa\fR|\fBb\fR|\fB c\fR|\fBl\fR|\fBA\fR|\fBB\fR|\fB C\fR|\fBL\fR]\fR
.ad
.sp .6
.RS 4n
将发出代码的反汇编生成到标准输出。将以下每个字符添加到 \fB-S\fR 选项会导致:
.sp
.ne 2
.mk
.na
\fB\fBa\fR\fR
.ad
.RS 5n
.rt
通过地址反汇编
.RE
.sp
.ne 2
.mk
.na
\fB\fBb\fR\fR
.ad
.RS 5n
.rt
通过 \fB\&.bof\fR 反汇编
.RE
.sp
.ne 2
.mk
.na
\fB\fBc\fR\fR
.ad
.RS 5n
.rt
通过注释反汇编
.RE
.sp
.ne 2
.mk
.na
\fB\fBl\fR\fR
.ad
.RS 5n
.rt
通过行编号反汇编。
.RE
大写字母关闭相应的选项。缺省值为 \fB-Sc\fR。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-s\fR\fR
.ad
.sp .6
.RS 4n
将所有的 stab 放在 \fB\&.stabs\fR 部分。缺省情况下,stab 放在 \fBstabs.excl\fR 部分中,该部分在最终执行过程中由静态链接程序 \fBld\fR(1) 删除。当使用 \fB-s\fR 选项时,stab 保留在最终的可执行文件中,因为 \fB\&.stab\fR 部分不会由静态链接程序删除。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-U\fR\fIname\fR\fR
.ad
.sp .6
.RS 4n
当 \fB-P\fR 选项生效时,此选项传递给 \fBcpp\fR(1) 预处理程序,而不用 \fBas\fR 命令进行解释;否则,它将遭到忽略。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-Ym\fR,\fIpath\fR\fR
.ad
.sp .6
.RS 4n
指定要使用的 \fBm4\fR 版本的路径。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-YI\fR,\fIpath\fR\fR
.ad
.sp .6
.RS 4n
指定搜索 \fB#include\fR 头文件的路径。
.RE
.SS "SPARC 选项"
.sp
.ne 2
.mk
.na
\fB\fB-hwcap\fR={\fB1|0\fR}\fR
.ad
.sp .6
.RS 4n
允许 (\fB1\fR) 或禁止 (\fB0\fR) 生成硬件功能部分。缺省情况下生成该部分。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-L\fR\fR
.ad
.sp .6
.RS 4n
将所有符号(包括通常会丢弃以节省空间的临时标签)保存在 ELF 符号表中。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-ul\fR\fR
.ad
.sp .6
.RS 4n
将所有未定义的符号视为本地符号。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-Yc\fR,\fIpath\fR\fR
.ad
.sp .6
.RS 4n
指定要使用的 \fBcpp\fR 版本的路径。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-xarch\fR=\fBsparc\fR\fR
.ad
.sp .6
.RS 4n
允许汇编程序接受 SPARC-V9 体系结构中定义的指令。使用 \fB-m32\fR 汇编时生成的目标文件代码采用 ELF32 格式,使用 \fB-m64\fR 汇编时则采用 ELF64 格式。它不会在 Oracle Solaris V8 系统(具有 V8 处理器的计算机)中执行。它将在 Oracle Solaris V8+ 系统中执行。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-xarch\fR=\fBsparcvis\fR\fR
.ad
.sp .6
.RS 4n
允许汇编程序接受 SPARC-V9 体系结构中定义的指令,以及 Visual Instruction Set (VIS) 版本 1.0 中的指令。使用 \fB-m32\fR 汇编时生成的目标文件代码采用 V8+ ELF32 格式,使用 \fB-m64\fR 汇编时则采用 ELF64 格式。它不会在具有 V8 处理器的 Oracle Solaris 系统中执行。它将在具有 V8+ 处理器的 Oracle Solaris 系统中执行。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-xarch\fR=\fBsparcvis2\fR\fR
.ad
.sp .6
.RS 4n
允许汇编程序接受 SPARC-V9 体系结构中定义的指令,以及 Visual Instruction Set (VIS) 版本 2.0(带有 UltraSPARC-III 扩展)中的指令。使用 \fB-m32\fR 汇编时生成的目标文件代码采用 V8+ ELF32 格式,使用 \fB-m64\fR 汇编时则采用 ELF64 格式。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-xarch\fR=\fBsparcvis3\fR\fR
.ad
.sp .6
.RS 4n
接受为 SPARC-V9 ISA 的 SPARC VIS 版本 3 定义的指令,这些是来自 SPARC-V9 指令集中的指令,还有 UltraSPARC 扩展(包括 Visual Instruction Set (VIS) 版本 1.0)、UltraSPARC-III 扩展(包括 Visual Instruction Set (VIS) 版本 2.0)、积和熔加指令以及 Visual Instruction Set (VIS) 版本 3.0。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-xarch\fR=\fBsparcfmaf\fR\fR
.ad
.sp .6
.RS 4n
接受为 SPARC-V9 ISA 的 \fBsparcfmaf\fR 版本定义的指令,还有 UltraSPARC 扩展(包括 Visual Instruction Set (VIS) 版本 1.0)、UltraSPARC-III 扩展(包括 Visual Instruction Set (VIS) 版本 2.0)以及浮点积和的 SPARC64 VI 扩展。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-xarch\fR=\fBsparcima\fR\fR
.ad
.sp .6
.RS 4n
接受为 SPARC-V9 ISA 的 \fBsparcima\fR 版本定义的指令,这些是来自 SPARC-V9 指令集的指令,还有 UltraSPARC 扩展(包括 Visual Instruction Set (VIS) 版本 1.0)、UltraSPARC-III 扩展(包括 Visual Instruction Set (VIS) 版本 2.0)、浮点积和的 SPARC64 VI 扩展以及整数积和的 SPARC64 VII 扩展。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-xarch\fR=\fBsparc4\fR\fR
.ad
.sp .6
.RS 4n
接受为 SPARC-V9 ISA 的 sparc4 版本定义的指令,这些指令来自 SPARC-V9 指令集,还有扩展(包括 VIS 1.0)、UltraSPARC-III 扩展(包括 VIS 2.0)、浮点积和熔加指令、VIS 3.0 以及 SPARC4 指令。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-xarch\fR=\fBsparcace\fR\fR
.ad
.sp .6
.RS 4n
接受为 SPARC-V9 ISA 的 sparcace 版本定义的指令,这些是来自 SPARC-V9 指令集的指令,还有 UltraSPARC 扩展(包括 Visual Instruction Set (VIS) 版本 1.0)、UltraSPARC-III 扩展(包括 Visual Instruction Set (VIS) 版本 2.0)、浮点积和的 SPARC64 VI 扩展、整数积和的 SPARC64 VII 扩展以及 SPARCACE 指令。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-xarch\fR=\fBsparcaceplus\fR\fR
.ad
.sp .6
.RS 4n
接受为 SPARC-V9 ISA 的 sparcaceplus 版本定义的指令,这些是来自 SPARC-V9 指令集的指令,还有 UltraSPARC 扩展(包括 Visual Instruction Set (VIS) 版本 1.0)、UltraSPARC-III 扩展(包括 Visual Instruction Set (VIS) 版本 2.0)、浮点积和的 SPARC64 VI 扩展、整数积和的 SPARC64 VII 扩展、SPARCACE 以及 SPARCACEPLUS 指令。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-xarch\fR=\fBv9\fR\fR
.ad
.sp .6
.RS 4n
相当于:\fB-m64\fR \fB-xarch\fR=\fBsparc\fR
.RE
.sp
.ne 2
.mk
.na
\fB\fB-xarch\fR=\fBv9a\fR\fR
.ad
.sp .6
.RS 4n
相当于:\fB-m64\fR \fB-xarch\fR=\fBsparcvis\fR
.RE
.sp
.ne 2
.mk
.na
\fB\fB-xarch\fR=\fBv9b\fR\fR
.ad
.sp .6
.RS 4n
相当于:\fB-m64\fR \fB-xarch\fR=\fBsparcvis2\fR
.RE
.sp
.ne 2
.mk
.na
\fB\fB-xF\fR\fR
.ad
.sp .6
.RS 4n
生成其他信息以供 Oracle Solaris Studio 性能分析器使用。如果输入文件不包含任何 stab(调试指令),则汇编程序将生成 Oracle Solaris Studio 分析器所需的缺省 stab。另请参见 \fBdbx(1)\fR Oracle Sun Studio 手册页。
.RE
.SS "x86 选项"
.sp
.ne 2
.mk
.na
\fB\fB-a32\fR\fR
.ad
.sp .6
.RS 4n
允在在 64 位模式下使用 32 位地址。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-H\fR\fR
.ad
.sp .6
.RS 4n
生成硬件功能部分。(这是缺省值。)
.RE
.sp
.ne 2
.mk
.na
\fB\fB-nH\fR\fR
.ad
.sp .6
.RS 4n
禁止生成硬件功能部分。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-KPIC\fR\fR
.ad
.sp .6
.RS 4n
通过绝对重定位和问题警告检查地址引用。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-xchip\fR=\fIv\fR\fR
.ad
.sp .6
.RS 4n
当有多种可能的编码可供选择时,请选择适用于所述芯片的编码。特别是,使用适当的 no-op 字节序列来填充代码对齐填充,并在使用未针对所述芯片定义的指令时发出警告。
.sp
汇编程序接受以下可识别 \fB-xchip\fR 值的指令集:
.sp
.ne 2
.mk
.na
\fB\fBgeneric\fR\fR
.ad
.RS 15n
.rt
通用 x86 指令集。
.RE
.sp
.ne 2
.mk
.na
\fB\fBnative\fR\fR
.ad
.RS 15n
.rt
此主机处理器。
.RE
.sp
.ne 2
.mk
.na
\fB\fBcore2\fR\fR
.ad
.RS 15n
.rt
Intel Core2 处理器。
.RE
.sp
.ne 2
.mk
.na
\fB\fBnehalem\fR\fR
.ad
.RS 15n
.rt
Intel Nehalem 处理器。
.RE
.sp
.ne 2
.mk
.na
\fB\fBopteron\fR\fR
.ad
.RS 15n
.rt
AMD Opteron 处理器。
.RE
.sp
.ne 2
.mk
.na
\fB\fBpenryn\fR\fR
.ad
.RS 15n
.rt
Intel Penryn 处理器。
.RE
.sp
.ne 2
.mk
.na
\fB\fBpentium\fR\fR
.ad
.RS 15n
.rt
Intel Pentium 体系结构。
.RE
.sp
.ne 2
.mk
.na
\fB\fBpentium_pro\fR\fR
.ad
.RS 15n
.rt
Intel Pentium Pro 体系结构。
.RE
.sp
.ne 2
.mk
.na
\fB\fBpentium3\fR\fR
.ad
.RS 15n
.rt
Intel Pentium 3 样式处理器。
.RE
.sp
.ne 2
.mk
.na
\fB\fBpentium4\fR\fR
.ad
.RS 15n
.rt
Intel Pentium 4 样式处理器。
.RE
.sp
.ne 2
.mk
.na
\fB\fBsandybridge\fR\fR
.ad
.RS 15n
.rt
Intel Sandy Bridge 处理器。
.RE
.sp
.ne 2
.mk
.na
\fB\fBwestmere\fR\fR
.ad
.RS 15n
.rt
Intel Westmere 处理器。
.RE
.sp
.ne 2
.mk
.na
\fB\fBamdfam10\fR\fR
.ad
.RS 15n
.rt
AMD FAM10 处理器。
.RE
.sp
.ne 2
.mk
.na
\fB\fBivybridge\fR\fR
.ad
.RS 15n
.rt
Intel Ivy Bridge 处理器。
.RE
.sp
.ne 2
.mk
.na
\fB\fBhaswell\fR\fR
.ad
.RS 15n
.rt
Intel Haswell 处理器。
.RE
.sp
.ne 2
.mk
.na
\fB\fBbroadwell\fR\fR
.ad
.RS 15n
.rt
Intel Broadwell
.RE
.RE
.sp
.ne 2
.mk
.na
\fB\fB-xmodel\fR=[\fBsmall\fR | \fB medium\fR | \fBkernel\fR]\fR
.ad
.sp .6
.RS 4n
仅限 \fB-m64\fR,在 \fBkernel\fR 下生成 \fBR_X86_64_32S\fR 可重定位类型以用于数据访问。否则,在 \fBsmall\fR 下生成 \fBR_X86_64_32\fR。\fBSHN_AMD64_LCOMMON\fR 和 \fB\&.lbcomm\fR 支持在 \fBmedium\fR 下添加。\fBsmall\fR 为缺省值。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-Yd\fR,\fIpath\fR\fR
.ad
.sp .6
.RS 4n
指定要使用的 \fBcm4defs\fR 版本的路径。
.RE
.SH 环境变量
.sp
.ne 2
.mk
.na
\fB\fBTMPDIR\fR\fR
.ad
.sp .6
.RS 4n
\fBas\fR 通常在 \fB/tmp\fR 目录中创建临时文件。您可以通过将环境变量 \fBTMPDIR\fR 设置为选择的目录来指定其他目录。(如果 \fBTMPDIR\fR 不是有效的目录,则 \fBas\fR 将使用 \fB/tmp\fR)。
.RE
.SH 文件
.sp
.LP
缺省情况下,\fBas\fR 在 \fB/tmp\fR 中创建其临时文件。
.SH 属性
.sp
.LP
有关下列属性的说明,请参见 \fBattributes\fR(5):
.sp
.sp
.TS
tab() box;
cw(2.75i) |cw(2.75i)
lw(2.75i) |lw(2.75i)
.
属性类型属性值
_
可用性system/
_
接口稳定性Committed(已确定)
.TE
.SH 另请参见
.sp
.LP
\fBcpp\fR(1)、\fBld\fR(1)、\fBm4\fR(1)、\fBnm\fR(1)、\fBstrip\fR(1)、\fBtmpnam\fR(3C)、\fBa.out\fR(4)、\fBattributes\fR(5)
.SH 附注
.sp
.LP
在 SPARC 平台中,\fBcpp\fR 符号 \fB__sparc\fR 在显示 \fB-P\fR 标志时设置、\fB__sparcv8\fR 在显示 \fB-m32\fR 标志时设置,而 \fB__sparcv9\fR 则在显示 \fB-m64\fR 标志时设置。
.sp
.LP
在 x86/x64 中,符号 \fB__i386\fR 在显示 \fB-P\fR 标志时设置,而 \fB__amd64\fR 则在显示 \fB-m64\fR 标志时设置。
.sp
.LP
如果使用了 \fB-m\fR(调用 \fBm4\fR(1) 宏处理程序)选项,则 \fBm4\fR 的关键字无法用作输入文件中的符号(变量、函数、标签),因为 \fBm4\fR 无法确定哪些关键字是汇编程序符号,哪些关键字是实际的 \fBm4\fR 宏。
.sp
.LP
如果可以,您应该通过编译系统接口程序(例如 Oracle Solaris Studio C 编译器 \fBcc\fR)访问汇编程序以确保库链接正确。请参见 \fBcc(1)\fR Oracle Solaris Studio 手册页。