'\" 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 手册页。