命令行手册

Man » as 手册在线 - as 手册页的详细在线文档

🌍
AS - 便携式 GNU 汇编器。

语法

as [-a[cdghilns][=file]]
[--alternate]
[--compress-debug-sections] [--nocompress-debug-sections]
[-D]
[--dump-config]
[--debug-prefix-map old=new]
[--defsym sym=val]
[--elf-stt-common=[no|yes]]
[--emulation=name]
[-f]
[-g] [--gstabs] [--gstabs+]
[--gdwarf-<N>] [--gdwarf-sections]
[--gdwarf-cie-version=VERSION]
[--generate-missing-build-notes=[no|yes]]
[--gsframe] [--gsframe=[no|yes]]
[--hash-size=N]
[--help] [--target-help]
[--info] [--no-info]
[-I dir]
[-J]
[-K]
[--keep-locals]
[-L]
[--listing-lhs-width=NUM]
[--listing-lhs-width2=NUM]
[--listing-rhs-width=NUM]
[--listing-cont-lines=NUM]
[--multibyte-handling=[allow|warn|warn-sym-only]]
[--no-pad-sections]
[-o objfile] [-R]
[--scfi=experimental]
[--sectname-subst]
[--size-check=[error|warning]]
[--statistics]
[-v] [--verbose]
[-version] [--version]
[-W] [--no-warn] [--warn] [--fatal-warnings]
[-w] [-x]
[-Z] [@FILE]
[target-options]
[--|files ...]

目标

AArch64 目标选项: [-EB|-EL] [-mabi=ABI]

Alpha 目标选项: [-mcpu] [-mdebug | -no-mdebug] [-replace | -noreplace] [-relax] [-g] [-Gsize] [-F] [-32addr]

ARC 目标选项: [-mcpu=cpu] [-mA6|-mARC600|-mARC601|-mA7|-mARC700|-mEM|-mHS] [-mcode-density] [-mrelax] [-EB|-EL]

ARM 目标选项: [-mcpu=processor[+extension...]] [-march=architecture[+extension...]] [-mfpu=floating-point-format] [-mfloat-abi=abi] [-meabi=ver] [-mthumb] [-EB|-EL] [-mapcs-32|-mapcs-26|-mapcs-float| -mapcs-reentrant] [-mthumb-interwork] [-k]

Blackfin 目标选项: [-mcpu=processor[-sirevision]] [-mfdpic] [-mno-fdpic] [-mnopic]

BPF 目标选项: [-EL] [-EB]

CRIS 目标选项: [--underscore | --no-underscore] [--pic] [-N] [--emulation=criself | --emulation=crisaout] [--march=v0_v10 | --march=v10 | --march=v32 | --march=common_v10_v32]

C-SKY 目标选项: [-march=arch] [-mcpu=cpu] [-EL] [-mlittle-endian] [-EB] [-mbig-endian] [-fpic] [-pic] [-mljump] [-mno-ljump] [-force2bsr] [-mforce2bsr] [-no-force2bsr] [-mno-force2bsr] [-jsri2bsr] [-mjsri2bsr] [-no-jsri2bsr ] [-mno-jsri2bsr] [-mnolrw ] [-mno-lrw] [-melrw] [-mno-elrw] [-mlaf ] [-mliterals-after-func] [-mno-laf] [-mno-literals-after-func] [-mlabr] [-mliterals-after-br] [-mno-labr] [-mnoliterals-after-br] [-mistack] [-mno-istack] [-mhard-float] [-mmp] [-mcp] [-mcache] [-msecurity] [-mtrust] [-mdsp] [-medsp] [-mvdsp]

D10V 目标选项: [-O]

D30V 目标选项: [-O|-n|-N]

EPIPHANY 目标选项: [-mepiphany|-mepiphany16]

H8/300 目标选项: [-h-tick-hex]

目标 i386 选项: [--32|--x32|--64] [-n] [-march=CPU[+EXTENSION...]] [-mtune=CPU]

目标 IA-64 选项: [-mconstant-gp|-mauto-pic] [-milp32|-milp64|-mlp64|-mp64] [-mle|mbe] [-mtune=itanium1|-mtune=itanium2] [-munwind-check=warning|-munwind-check=error] [-mhint.b=ok|-mhint.b=warning|-mhint.b=error] [-x|-xexplicit] [-xauto] [-xdebug]

目标 IP2K 选项: [-mip2022|-mip2022ext]

目标 M32C 选项: [-m32c|-m16c] [-relax] [-h-tick-hex]

目标 M32R 选项: [--m32rx|--[no-]warn-explicit-parallel-conflicts| --W[n]p]

目标 M680X0 选项: [-l] [-m68000|-m68010|-m68020|...]

目标 M68HC11 选项: [-m68hc11|-m68hc12|-m68hcs12|-mm9s12x|-mm9s12xg] [-mshort|-mlong] [-mshort-double|-mlong-double] [--force-long-branches] [--short-branches] [--strict-direct-mode] [--print-insn-syntax] [--print-opcodes] [--generate-example]

目标 MCORE 选项: [-jsri2bsr] [-sifilter] [-relax] [-mcpu=[210|340]]

目标 Meta 选项: [-mcpu=cpu] [-mfpu=cpu] [-mdsp=cpu] 目标 MICROBLAZE 选项: [-mlittle-endian] [-mbig-endian]

目标 MIPS 选项: [-nocpp] [-EL] [-EB] [-O[优化级别]] [-g[调试级别]] [-G 数字] [-KPIC] [-call_shared] [-non_shared] [-xgot [-mvxworks-pic] [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32] [-mfp64] [-mgp64] [-mfpxx] [-modd-spreg] [-mno-odd-spreg] [-march=CPU] [-mtune=CPU] [-mips1] [-mips2] [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2] [-mips32r3] [-mips32r5] [-mips32r6] [-mips64] [-mips64r2] [-mips64r3] [-mips64r5] [-mips64r6] [-construct-floats] [-no-construct-floats] [-mignore-branch-isa] [-mno-ignore-branch-isa] [-mnan=编码] [-trap] [-no-break] [-break] [-no-trap] [-mips16] [-no-mips16] [-mmicromips] [-mno-micromips] [-msmartmips] [-mno-smartmips] [-mips3d] [-no-mips3d] [-mdmx] [-no-mdmx] [-mdsp] [-mno-dsp] [-mdspr2] [-mno-dspr2] [-mdspr3] [-mno-dspr3] [-mmsa] [-mno-msa] [-mxpa] [-mno-xpa] [-mmt] [-mno-mt] [-mmcu] [-mno-mcu] [-mcrc] [-mno-crc] [-mginv] [-mno-ginv] [-mloongson-mmi] [-mno-loongson-mmi] [-mloongson-cam] [-mno-loongson-cam] [-mloongson-ext] [-mno-loongson-ext] [-mloongson-ext2] [-mno-loongson-ext2] [-minsn32] [-mno-insn32] [-mfix7000] [-mno-fix7000] [-mfix-rm7000] [-mno-fix-rm7000] [-mfix-vr4120] [-mno-fix-vr4120] [-mfix-vr4130] [-mno-fix-vr4130] [-mfix-r5900] [-mno-fix-r5900] [-mdebug] [-no-mdebug] [-mpdr] [-mno-pdr]

目标 MMIX 选项: [--fixed-special-register-names] [--globalize-symbols] [--gnu-syntax] [--relax] [--no-predefined-symbols] [--no-expand] [--no-merge-gregs] [-x] [--linker-allocated-gregs]

目标 NDS32 选项: [-EL] [-EB] [-O] [-Os] [-mcpu=cpu] [-misa=isa] [-mabi=abi] [-mall-ext] [-m[no-]16-bit] [-m[no-]perf-ext] [-m[no-]perf2-ext] [-m[no-]string-ext] [-m[no-]dsp-ext] [-m[no-]mac] [-m[no-]div] [-m[no-]audio-isa-ext] [-m[no-]fpu-sp-ext] [-m[no-]fpu-dp-ext] [-m[no-]fpu-fma] [-mfpu-freg=FREG] [-mreduced-regs] [-mfull-regs] [-m[no-]dx-regs] [-mpic] [-mno-relax] [-mb2bb]

目标 PDP11 选项: [-mpic|-mno-pic] [-mall] [-mno-extensions] [-mextension|-mno-extension] [-mcpu] [-mmachine]

目标 picoJava 选项: [-mb|-me]

目标 PowerPC 选项: [-a32|-a64] [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604| -m403|-m405| -m440|-m464|-m476|-m7400|-m7410|-m7450|-m7455|-m750cl|-mgekko| -mbroadway|-mppc64|-m620|-me500|-e500x2|-me500mc|-me500mc64|-me5500| -me6500|-mppc64bridge|-mbooke|-mpower4|-mpwr4|-mpower5|-mpwr5|-mpwr5x| -mpower6|-mpwr6|-mpower7|-mpwr7|-mpower8|-mpwr8|-mpower9|-mpwr9-ma2| -mcell|-mspe|-mspe2|-mtitan|-me300|-mcom] [-many] [-maltivec|-mvsx|-mhtm|-mvle] [-mregnames|-mno-regnames] [-mrelocatable|-mrelocatable-lib|-K PIC] [-memb] [-mlittle|-mlittle-endian|-le|-mbig|-mbig-endian|-be] [-nops=count]

目标 PRU 选项: [-link-relax] [-mnolink-relax] [-mno-warn-regname-label]

目标 RISC-V 选项: [-fpic|-fPIC|-fno-pic] [-march=ISA|Profiles|Profiles_ISA] [-mabi=ABI] [-mlittle-endian|-mbig-endian]

目标 RL78 选项: [-mg10] [-m32bit-doubles|-m64bit-doubles]

目标 RX 选项: [-mlittle-endian|-mbig-endian] [-m32bit-doubles|-m64bit-doubles] [-muse-conventional-section-names] [-msmall-data-limit] [-mpid] [-mrelax] [-mint-register=number] [-mgcc-abi|-mrx-abi]

目标 s390 选项: [-m31|-m64] [-mesa|-mzarch] [-march=CPU] [-mregnames|-mno-regnames] [-mwarn-areg-zero] [-mwarn-regtype-mismatch=strict -mwarn-regtype-mismatch=relaxed -mwarn-regtype-mismatch=no -mno-warn-regtype-mismatch]

目标 SCORE 选项: [-EB][-EL][-FIXDD][-NWARN] [-SCORE5][-SCORE5U][-SCORE7][-SCORE3] [-march=score7][-march=score3] [-USE_R1][-KPIC][-O0][-G num][-V]

目标 SPARC 选项: [-Av6|-Av7|-Av8|-Aleon|-Asparclet|-Asparclite -Av8plus|-Av8plusa|-Av8plusb|-Av8plusc|-Av8plusd -Av8plusv|-Av8plusm|-Av9|-Av9a|-Av9b|-Av9c -Av9d|-Av9e|-Av9v|-Av9m|-Asparc|-Asparcvis -Asparcvis2|-Asparcfmaf|-Asparcima|-Asparcvis3 -Asparcvisr|-Asparc5] [-xarch=v8plus|-xarch=v8plusa]|-xarch=v8plusb|-xarch=v8plusc -xarch=v8plusd|-xarch=v8plusv|-xarch=v8plusm|-xarch=v9 -xarch=v9a|-xarch=v9b|-xarch=v9c|-xarch=v9d|-xarch=v9e -xarch=v9v|-xarch=v9m|-xarch=sparc|-xarch=sparcvis -xarch=sparcvis2|-xarch=sparcfmaf|-xarch=sparcima -xarch=sparcvis3|-xarch=sparcvisr|-xarch=sparc5 -bump] [-32|-64] [--enforce-aligned-data][--dcti-couples-detect]

目标 TIC54X 选项: [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf] [-merrors-to-file |-me ]

目标 TIC6X 选项: [-march=arch] [-mbig-endian|-mlittle-endian] [-mdsbt|-mno-dsbt] [-mpid=no|-mpid=near|-mpid=far] [-mpic|-mno-pic]

目标 TILE-Gx 选项: [-m32|-m64][-EB][-EL]

目标 Visium 选项: [-mtune=arch]

目标 Xtensa 选项: [--[no-]text-section-literals] [--[no-]auto-litpools] [--[no-]absolute-literals] [--[no-]target-align] [--[no-]longcalls] [--[no-]transform] [--rename-section oldname=newname] [--[no-]trampolines] [--abi-windowed|--abi-call0]

目标 Z80 选项: [-march=CPU[-EXT][+EXT]] [-local-prefix=PREFIX] [-colonless] [-sdcc] [-fp-s=FORMAT] [-fp-d=FORMAT]


描述

GNU as 实际上是一系列汇编器的集合。 如果您使用(或曾经使用过)GNU 汇编器来处理某种架构,那么在使用它处理另一种架构时,您应该会发现它具有相当相似的环境。 每个版本都与其他版本有很多共同之处,包括目标文件格式、大多数汇编器指令(通常称为伪指令)和汇编器语法。

as 主要用于汇编 GNU C 编译器“gcc”的输出,供链接器“ld”使用。 然而,我们已经尽力使 as 能够正确汇编其他相同机器的汇编器所能汇编的所有内容。 任何例外情况都将明确记录。 这并不意味着 as 总是使用与另一种汇编器在相同架构上相同的语法; 例如,我们知道存在几种不兼容的 680x0 汇编语言语法。

每次您运行 as 时,它都会汇编一个源程序。 源程序由一个或多个文件组成。(标准输入也是一个文件。)

您为 as 提供一个命令行,其中包含零个或多个输入文件名。 输入文件按从左到右的顺序读取。 命令行参数(位于任何位置),如果它没有特殊含义,将被视为一个输入文件名。

如果您没有为 as 提供任何文件名,它将尝试从 as 的标准输入读取一个输入文件,而标准输入通常是您的终端。 您可能需要键入 ctl-D 来告诉 as 不再有要汇编的程序。

如果您需要显式命名标准输入文件,请使用 --。

如果源文件为空,as 将生成一个小的空目标文件。

as 可能会将警告和错误消息写入标准错误文件(通常是您的终端)。 这不应该发生在编译器自动运行 as 时。 警告报告了一个假设,以便 as 可以继续汇编一个有缺陷的程序; 错误报告了一个严重问题,导致汇编停止。

如果您通过 GNU C 编译器调用 as,可以使用 -Wa 选项将参数传递给汇编器。 汇编器参数必须用逗号分隔(并且与 -Wa 也分隔)。 例如:

gcc -c -g -O -Wa,-alh,-L file.c

这会将两个选项传递给汇编器:-alh(将列表输出到标准输出,包含高级语言和汇编代码)和 -L(在符号表中保留局部符号)。

通常,您不需要使用此 -Wa 机制,因为许多命令行选项会自动由编译器传递给汇编器。 (您可以使用 -v 选项调用 GNU 编译器驱动程序,以查看它传递给每个编译阶段(包括汇编器)的确切选项。)

选项

@file
从文件中读取命令行选项。 读取的选项将插入到原始 @file 选项的位置。 如果文件不存在或无法读取,则该选项将被视为文字,并且不会被删除。

文件中的选项由空格分隔。 可以通过将整个选项用单引号或双引号括起来,来包含空格字符。 任何字符(包括反斜杠)都可以通过在要包含的字符前加上反斜杠来包含。 该文件本身可以包含其他 @file 选项; 任何此类选项都将被递归处理。

-a[cdghilmns]

启用各种方式的列表显示:

-ac 忽略虚假条件语句

-ad 忽略调试指令

-ag 包含常规信息,如版本和传递的选项

-ah 包含高级源代码

-al 包含汇编代码

-ali
包含带有 ginsn 的汇编代码

-am 包含宏展开

-an 忽略表单处理

-as 包含符号

=file
设置列表文件的名称

您可以组合这些选项;例如,使用 -aln 以在没有表单处理的情况下生成汇编列表。如果使用,则 =file 选项必须是最后一个。单独使用 -a 时,默认值为 -ahls。

--alternate
从备用宏模式开始。

--compress-debug-sections

使用 zlib 和 ELF ABI 中的 SHF_COMPRESSED 压缩 DWARF 调试节。生成的对象文件可能与旧的链接器和对象文件工具不兼容。请注意,如果压缩实际上会使某个节变大,则该节将不会被压缩。

--compress-debug-sections=none
--compress-debug-sections=zlib
--compress-debug-sections=zlib-gnu
--compress-debug-sections=zlib-gabi
--compress-debug-sections=zstd

这些选项控制如何压缩 DWARF 调试节。 --compress-debug-sections=none 等效于 --nocompress-debug-sections。 --compress-debug-sections=zlib 和 --compress-debug-sections=zlib-gabi 等效于 --compress-debug-sections。 --compress-debug-sections=zlib-gnu 使用过时的 zlib-gnu 格式压缩 DWARF 调试节。调试节将被重命名,使其以 .zdebug 开头。--compress-debug-sections=zstd 使用 zstd 压缩 DWARF 调试节。请注意,如果压缩实际上会使某个节变大,则该节将不会被压缩或重命名。

--nocompress-debug-sections

不压缩 DWARF 调试节。这通常是所有目标平台的默认设置,但可以使用配置时选项来覆盖此设置。

-D 在支持的情况下,启用目标特定后端中的调试。否则,将被忽略。即使被忽略,此选项也会被接受,以用于与调用其他汇编器的脚本的兼容性。

--debug-prefix-map old=new

在汇编目录 old 中的文件时,记录描述它们的调试信息,并将其记录为位于 new 中。

--defsym sym=value

在汇编输入文件之前,将符号 sym 定义为 value。value 必须是一个整数常量。与 C 语言类似,前导 0x 表示十六进制值,前导 0 表示八进制值。可以在源文件中使用“.set”伪指令来覆盖符号的值。

--dump-config

显示汇编器的配置方式,然后退出。

--elf-stt-common=no
--elf-stt-common=yes

这些选项控制 ELF 汇编器是否应生成带有“STT_COMMON”类型的公共符号。默认值可以通过配置选项 --enable-elf-stt-common 进行控制。


--emit-local-absolute
将预定义的(本地)绝对符号也输出到传出的符号表中。请注意,这并不是 `--strip-local-absolute` 的确切反义词。

--emulation=name
如果汇编器配置为支持多种不同的目标配置,则可以使用此选项来选择所需的形式。

-f "fast"---跳过空白和注释预处理(假定源代码是编译器输出)。

-g
--gen-debug
为每个汇编源代码行生成调试信息,使用目标所首选的调试格式。当前,这意味着 STABS、ECOFF 或 DWARF2。当调试格式为 DWARF 时,只有在汇编文件本身不生成时,才会输出“.debug_info”和“.debug_line”节。

--gstabs
为每个汇编源代码行生成 stabs 调试信息。如果调试器可以处理,这可能会帮助调试汇编代码。

--gstabs+
为每个汇编源代码行生成 stabs 调试信息,并带有 GNU 扩展,可能只有 gdb 可以处理,并且可能会导致其他调试器崩溃或拒绝读取您的程序。这可能会帮助调试汇编代码。当前唯一的 GNU 扩展是在汇编时记录当前工作目录的位置。

--gdwarf-2
为每个汇编源代码行生成 DWARF2 调试信息。如果调试器可以处理,这可能会帮助调试汇编代码。请注意,此选项并非所有目标都支持。

--gdwarf-3
此选项与 `--gdwarf-2` 选项相同,只是它允许生成符合 DWARF 规范版本 3 的额外调试信息。请注意,启用此选项并不能保证生成任何额外的信息,是否生成取决于目标。

--gdwarf-4
此选项与 `--gdwarf-2` 选项相同,只是它允许生成符合 DWARF 规范版本 4 的额外调试信息。请注意,启用此选项并不能保证生成任何额外的信息,是否生成取决于目标。

--gdwarf-5
此选项与 `--gdwarf-2` 选项相同,只是它允许生成符合 DWARF 规范版本 5 的额外调试信息。请注意,启用此选项并不能保证生成任何额外的信息,是否生成取决于目标。

--gdwarf-sections
与其创建一个“.debug_line”节,不如创建一个“.debug_line.foo”节的序列,其中“foo”是相应代码节的名称。例如,如果代码节被称为“.text.func”,则其 dwarf 行号信息将放置在一个名为“.debug_line.text.func”的节中。如果代码节只是被称为“.text”,则调试行节仍然被称为“.debug_line”,没有后缀。

--gdwarf-cie-version=version
控制要生成的 DWARF Common Information Entries (CIE) 的版本。如果未指定此标志,则默认版本为 1,但某些目标可能会修改此默认值。
其他可能的版本值为 3 或 4。

--generate-missing-build-notes=yes
--generate-missing-build-notes=no
这些选项控制 ELF 汇编器是否应生成 GNU Build 属性注释,如果输入源中不存在注释,则生成注释。默认值可以通过 `--enable-generate-build-notes` 配置选项来控制。

--gsframe
--gsframe
--gsframe=no
--gsframe=yes
从 CFI 指令创建 .sframe 部分。显式 `--gsframe=yes` 选项的行为与 `--gsframe` 相同。可以使用 `--gsframe=no` 禁用生成。默认值可以通过 `--enable-default-sframe` 配置选项来控制。

--hash-size N
被忽略。为了与其它汇编器的命令行兼容,此选项仍然存在。

--help
打印命令行选项摘要并退出。

--target-help
打印所有目标特定选项的摘要并退出。

--info
不要抑制信息性消息。

--no-info
抑制信息性消息。

-I dir
将目录 dir 添加到用于“.include”指令的搜索列表中。

-J  不要发出有关有符号溢出的警告。

-K  当为长距离调整差分表时,发出警告。

-L
--keep-locals
在符号表中保留局部符号。这些符号以特定于系统的局部标签前缀开头,通常对于 ELF 系统是 .L,对于传统的 a.out 系统是 L。

--listing-lhs-width=number
将汇编程序列表输出中数据列的最大宽度(以字为单位)设置为 number。

--listing-lhs-width2=number
将汇编程序列表输出中连续行的数据列的最大宽度(以字为单位)设置为 number。

--listing-rhs-width=number
将汇编程序列表输出中输入源行的最大宽度设置为 number 字节。

--listing-cont-lines=number
将汇编程序列表输出中针对单个输入行打印的最大行数设置为 number +

--multibyte-handling=allow
--multibyte-handling=warn
--multibyte-handling=warn-sym-only
--multibyte-handling=warn_sym_only
控制汇编器处理输入中多字节字符的方式。默认值(可以通过使用 allow 参数恢复)是允许这些字符,而不发出任何警告。使用 warn 参数将使汇编器在遇到任何多字节字符时生成警告消息。使用 warn-sym-only 参数只会导致在定义包含多字节字符的名称的符号时才生成警告。(对未定义符号的引用不会生成警告)。

--no-pad-sections
阻止汇编器填充输出节的末尾,使其与该节的对齐方式一致。
默认情况下会填充节,但这可能会浪费空间,对于内存资源有限的目标系统,这可能会成为问题。

-o objfile
将汇编输出的对象文件命名为 objfile。

-R
将数据节合并到文本节中。

--reduce-memory-overheads
忽略。为了与将相同的选项传递给汇编器和链接器的工具兼容而支持。

--scfi=experimental
此选项控制汇编器是否应该为手动编写的输入生成 CFI(控制流信息)。如果输入已经包含一些可合成的 CFI 指令,汇编器将忽略它们并发出警告。请注意,"--scfi=experimental" 不应用于编译器生成的代码,包括内联汇编。此实验性支持仍在进行中。
仅支持 System V AMD64 ABI。

汇编中的每个输入函数都必须以“.type”指令开始,并且理想情况下,应该使用“.size”指令结束。在使用 SCFI 时,每个“.type”指令都会提示 GAS 开始一个新的 FDE(函数描述符条目)。这意味着对于每个“.type”指令,先前的一段指令(如果有)将被最终确定为一个单独的 FDE。

--sectname-subst
在节名称中保留替换序列。

--size-check=error
--size-check=warning
对无效的 ELF .size 指令发出错误或警告。

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

--strip-local-absolute
从输出的符号表中删除本地绝对符号。

-v
--verbose
打印 as 的版本。

--version
-version
打印 as 的版本并退出。

-W
--no-warn
抑制警告消息。

--warn
不抑制警告消息或将其视为错误。

--fatal-warnings
将警告视为错误。

-w 忽略。

-x 忽略。

-Z
即使在出现错误后也生成一个对象文件。

-- | files ...
标准输入,或要汇编的源文件。

以下选项在配置为 ARM 架构 64 位模式时可用(AArch64)。

-EB
此选项指定汇编器生成的输出应标记为针对大端处理器编码。

-EL
此选项指定汇编器生成的输出应标记为针对小端处理器编码。

-mabi=abi
指定源代码使用哪种 ABI。可识别的参数是:“ilp32”和“lp64”,这决定了生成的 ELF32 和 ELF64 格式的对象文件。默认值为“lp64”。

-mcpu=processor[+extension...]
此选项指定目标处理器。如果尝试汇编在目标处理器上无法执行的指令,汇编器将发出错误消息。
以下处理器名称被识别:“cortex-a34”、“cortex-a35”、“cortex-a53”、“cortex-a55”、“cortex-a57”、“cortex-a65”、“cortex-a65ae”、“cortex-a72”、“cortex-a73”、“cortex-a75”、“cortex-a76”、“cortex-a76ae”、“cortex-a77”、“cortex-a78”、“cortex-a78ae”、“cortex-a78c”、“cortex-a510”、“cortex-a520”、“cortex-a710”、“cortex-a720”、“ares”、“exynos-m1”、“falkor”、“neoverse-n1”、“neoverse-n2”、“neoverse-e1”、“neoverse-v1”、“qdf24xx”、“saphira”、“thunderx”、“vulcan”、“xgene1”、“xgene2”、“cortex-r82”、“cortex-x1”、“cortex-x2”、“cortex-x3”和“cortex-x4”。可以使用特殊名称“all”来允许汇编器接受对于任何受支持的处理器(包括所有可选扩展)有效的指令。

除了基本的指令集之外,还可以告知汇编器接受或限制各种扩展助记符,从而扩展处理器。

如果特定处理器的某些实现可以具有扩展功能,则这些扩展功能将自动启用。因此,通常无需指定任何其他扩展。

-march=架构[+扩展...]

此选项指定目标架构。如果尝试汇编在目标架构上无法执行的指令,汇编器将发出错误消息。以下架构名称将被识别:“armv8-a”、“armv8.1-a”、“armv8.2-a”、“armv8.3-a”、“armv8.4-a”、“armv8.5-a”、“armv8.6-a”、“armv8.7-a”、“armv8.8-a”、“armv8.9-a”、“armv8-r”、“armv9-a”、“armv9.1-a”、“armv9.2-a”、“armv9.3-a”、“armv9.4-a”和“armv9.5-a”。

如果同时指定了 -mcpu 和 -march,汇编器将使用 -mcpu 的设置。如果两者都没有指定,汇编器将默认使用 -mcpu=all。

架构选项可以与 -mcpu 选项相同的指令集扩展选项一起使用。与 -mcpu 不同,扩展并非始终默认启用。

-mverbose-error

此选项为 AArch64 gas 启用详细的错误消息。默认情况下,此选项已启用。

-mno-verbose-error

此选项禁用 AArch64 gas 中的详细错误消息。

-menable-sysreg-checking

此选项启用错误消息,如果尝试汇编系统寄存器访问指令,而该指令在目标架构上无法执行,则会发出错误消息。

以下选项在配置为 Alpha 处理器时可用。

-mcpu

此选项指定目标处理器。如果尝试汇编在目标处理器上无法执行的指令,汇编器可能会将该指令扩展为宏,或者发出错误消息。此选项等效于“.arch”指令。

以下处理器名称将被识别:21064、“21064a”、21066、21068、21164、“21164a”、“21164pc”、21264、“21264a”、“21264b”、“ev4”、“ev5”、“lca45”、“ev5”、“ev56”、“pca56”、“ev6”、“ev67”、“ev68”。可以使用特殊名称“all”,以允许汇编器接受对任何 Alpha 处理器都有效的指令。


为了支持 OSF/1 中现有的“.arch”实践,以及 MILO(Linux ARC 引导加载程序)中的现有实践,带有编号的处理器名称(例如 21064)启用特定于处理器的 PALcode 指令,而“电弧矢量”名称(例如“ev4”)则不启用。

-mdebug
-no-mdebug

启用或禁用针对 stabs 指令和过程描述符生成“.mdebug”封装。默认情况下,当检测到第一个 stabs 指令时,自动启用“.mdebug”。

-relax

此选项强制将所有重定位放入目标文件中,而不是节省空间并在汇编时解析一些重定位。请注意,此选项不会将所有符号算术都放入目标文件,因为并非所有符号算术都可以表示。但是,此选项仍然可以在特定应用程序中很有用。

-replace
-noreplace

启用或禁用过程调用的优化,无论是在汇编时还是在链接时。这些选项仅适用于 VMS 目标,并且“-replace”是默认值。请参阅 OpenVMS 链接器实用程序手册的第 4.1 节。

-g

当编译器生成调试信息时,使用此选项。当 gcc 使用 mipstfile 为 ECOFF 生成调试信息时,必须将本地标签传递到目标文件。否则,此选项无效。

-Gsize

大于 size 的本地公共符号被放置在“.bss”中,而较小的符号则被放置在“.sbss”中。

-F
-32addr

这些选项为了向后兼容而被忽略。

以下选项在 as 配置为 ARC 处理器时可用。

-mcpu=cpu

此选项选择核心处理器变体。

-EB | -EL

选择大端序 (-EB) 或小端序 (-EL) 输出。

-mcode-density

启用代码密度扩展指令。

以下选项在 as 配置为 ARM 处理器系列时可用。

-mcpu=processor[+extension...]

指定目标 ARM 处理器变体。

-march=architecture[+extension...]

指定目标 ARM 架构变体。

-mfpu=floating-point-format

选择目标浮点架构。

-mfloat-abi=abi

选择使用的浮点 ABI。

-mthumb

启用仅 Thumb 指令解码。

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

选择使用的过程调用约定。

-EB | -EL

选择大端序 (-EB) 或小端序 (-EL) 输出。

-mthumb-interwork

指定代码已生成,并且考虑了 Thumb 和 ARM 代码之间的互操作。

-mccs

启用 CodeComposer Studio 汇编语法兼容模式。

-k

指定已生成 PIC 代码。

以下选项在 as 配置为 Blackfin 处理器系列时可用。

-mcpu=processor[-sirevision]

此选项指定目标处理器。可选的 sirevision 在汇编程序中未使用。此处是为了方便 GCC 传递其“-mcpu=”选项。如果尝试汇编在目标处理器上无法执行的指令,汇编程序将发出错误消息。以下处理器名称将被识别:“bf504”、“bf506”、“bf512”、“bf514”、“bf516”、“bf518”、“bf522”、“bf523”、“bf524”、“bf525”、“bf526”、“bf527”、“bf531”、“bf532”、“bf533”、“bf534”、“bf535”(尚未实现)、“bf536”、“bf537”、“bf538”、“bf539”、“bf542”、“bf542m”、“bf544”、“bf544m”、“bf547”、“bf547m”、“bf548”、“bf548m”、“bf549”、“bf549m”、“bf561”和“bf592”。


-mfdpic

为 FDPIC ABI 进行汇编。

-mno-fdpic
-mnopic

禁用 -mfdpic。

以下选项在配置为 Linux 内核 BPF 处理器族时可用。

@chapter BPF 依赖功能

BPF 选项

-EB 此选项指定汇编器应发出大端 eBPF。

-EL 此选项指定汇编器应发出小端 eBPF。

-mdialect=dialect

此选项指定汇编时要识别的汇编语言方言。汇编器支持 normal 和 pseudoc。

-misa-spec=spec

此选项指定汇编时要使用的 BPF 指令集版本。支持的 BPF ISA 版本为 v1、v2、v3 和 v4。

可以指定 xbpf 值以识别 GCC 用于测试的附加指令。但请注意,这并非有效的 BPF。

-mno-relax

此选项告诉汇编器不要放松指令。

请注意,如果在命令行中未指定任何端序选项,则使用主机端序。请参阅 info 页面以获取 CRIS 特定选项的文档。

以下选项在配置为 C-SKY 处理器族时可用。

-march=archname

为架构 archname 进行汇编。--help 选项列出了 archname 的有效值。

-mcpu=cpuname

为架构 cpuname 进行汇编。--help 选项列出了 cpuname 的有效值。

-EL
-mlittle-endian

生成小端输出。

-EB
-mbig-endian

生成大端输出。

-fpic
-pic

生成位置无关代码。

-mljump
-mno-ljump

启用/禁用短跳转指令“jbf”、“jbt”和“jbr”到“jmpi”的转换。此选项仅适用于 V2 处理器。它在 CK801 和 CK802 目标上被忽略,因为它们不支持“jmpi”指令,并且对于其他处理器默认启用。

-mbranch-stub
-mno-branch-stub

将“bsr”指令的“R_CKCORE_PCREL_IMM26BY2”重定位传递给链接器。

此选项仅适用于裸机 C-SKY V2 ELF 目标,并且默认启用。它不能用于将代码动态链接到共享库中。

-force2bsr
-mforce2bsr
-no-force2bsr
-mno-force2bsr

启用/禁用“jbsr”指令到“bsr”的转换。此选项始终为 CK801/CK802 目标启用(并且 -mno-force2bsr 被忽略)。当 -mbranch-stub 生效时,它也始终启用。


-jsri2bsr
-mjsri2bsr
-no-jsri2bsr
-mno-jsri2bsr

启用/禁用将“jsri”指令转换为“bsr”指令。此选项默认启用。

-mnolrw
-mno-lrw

启用/禁用将“lrw”指令转换为“movih”/“ori”指令对。

-melrw
-mno-elrw

启用/禁用扩展“lrw”指令。此选项默认针对 CK800 系列处理器启用。

-mlaf
-mliterals-after-func
-mno-laf
-mno-literals-after-func

启用/禁用在每个函数之后放置文字池。

-mlabr
-mliterals-after-br
-mno-labr
-mnoliterals-after-br

启用/禁用在无条件分支之后放置文字池。此选项默认启用。

-mistack
-mno-istack

启用/禁用中断堆栈指令。此选项默认在 CK801、CK802 和 CK802 处理器上启用。

以下选项显式启用某些可选指令。通过使用“-mcpu=”指定支持这些指令的处理器,也可以隐式启用这些功能。

-mhard-float

启用硬件浮点指令。

-mmp

启用多处理器指令。

-mcp

启用协处理器指令。

-mcache

启用缓存预取指令。

-msecurity

启用 C-SKY 安全指令。

-mtrust

启用 C-SKY 可信指令。

-mdsp

启用 DSP 指令。

-medsp

启用增强 DSP 指令。

-mvdsp

启用向量 DSP 指令。

当 as 配置为 Epiphany 处理器时,以下选项可用。

-mepiphany

指定允许使用 32 位和 16 位指令。这是默认行为。

-mepiphany16

将允许的指令限制为仅 16 位指令集。

当 as 配置为 H8/300 处理器时,以下选项可用。@chapter H8/300 依赖功能

选项

Renesas H8/300 版本的“as”具有一个机器相关选项:

-h-tick-hex

支持 H'00 风格的十六进制常量,以及 0x00 风格。

-mach=name

设置 H8300 机器变体。以下机器名称被识别:“h8300h”、“h8300hn”、“h8300s”、“h8300sn”、“h8300sx”和“h8300sxn”。

当 as 配置为 i386 处理器时,以下选项可用。

--32 | --x32 | --64

选择字大小,可以是 32 位或 64 位。--32 意味着 Intel i386 架构,而 --x32 和 --64 意味着 AMD x86-64 架构,字大小分别为 32 位或 64 位。

这些选项仅在 ELF 对象文件格式下可用,并且需要包含必要的 BFD 支持(在 32 位平台上,您需要添加 --enable-64-bit-bfd 以启用 64 位用法,并使用 x86-64 作为目标平台)。

-n 默认情况下,x86 GAS 会用多字节 nop 指令(例如 leal 0(%esi,1),%esi)替换代码部分中用于对齐的多个 nop 指令。如果明确指定单个字节的 nop(0x90)作为对齐的填充字节,则此开关会禁用优化。

--divide

在 SVR4 派生平台上,字符 / 被视为注释字符,这意味着它不能用于表达式中。--divide 选项将 / 变成一个普通字符。 这不会禁用以 / 开头的行作为注释,也不会影响使用 # 作为注释的开头。

-march=CPU[+EXTENSION...]

此选项指定目标处理器。如果尝试汇编在目标处理器上无法执行的指令,汇编器将发出错误消息。 以下处理器名称被识别:"i8086"、"i186"、"i286"、"i386"、"i486"、"i586"、"i686"、"pentium"、"pentiumpro"、"pentiumii"、"pentiumiii"、"pentium4"、"prescott"、 "nocona"、"core"、"core2"、"corei7"、"iamcu"、"k6"、"k6_2"、"athlon"、"opteron"、"k8"、 "amdfam10"、"bdver1"、"bdver2"、"bdver3"、"bdver4"、"znver1"、"znver2"、"znver3"、"znver4"、 "znver5"、"znver6"、"btver1"、"btver2"、"generic32" 和 "generic64"。

除了基本的指令集之外,还可以告知汇编器接受各种扩展助记符。例如,"-march=i686+sse4+vmx" 将 i686 扩展为 sse4 和 vmx。 当前支持以下扩展:8087、287、387、687、“cmov”、“fxsr”、“mmx”、 “sse”、“sse2”、“sse3”、“sse4a”、“ssse3”、“sse4.1”、“sse4.2”、“sse4”、“avx”、“avx2”、 “lahf_sahf”、“monitor”、“adx”、“rdseed”、“prfchw”、“smap”、“mpx”、“sha”、“rdpid”、“ptwrite”、 “cet”、“gfni”、“vaes”、“vpclmulqdq”、“prefetchwt1”、“clflushopt”、“se1”、“clwb”、“movdiri”、 “movdir64b”、“enqcmd”、“serialize”、“tsxldtrk”、“kl”、“widekl”、“hreset”、“avx512f”、 “avx512cd”、“avx512er”、“avx512pf”、“avx512vl”、“avx512bw”、“avx512dq”、“avx512ifma”、 “avx512vbmi”、“avx512_4fmaps”、“avx512_4vnniw”、“avx512_vpopcntdq”、“avx512_vbmi2”、 “avx512_vnni”、“avx512_bitalg”、“avx512_vp2intersect”、“tdx”、“avx512_bf16”、“avx_vnni”、 “avx512_fp16”、“avx512_bmm”、“prefetchi”、“avx_ifma”、“avx_vnni_int8”、“cmpccxadd”、 “wrmsrns”、“msrlist”、“avx_ne_convert”、“rao_int”、“fred”、“lkgs”、“avx_vnni_int16”、 “sha512”、“sm3”、“sm4”、“pbndkb”、“avx10.1”、“avx10.1/512”、“avx10.1/256”、“avx10.1/128”、“user_msr”、“msr_imm”、“apx_f”、“apx_nci”、“apx_ndd”、“apx_nf”、“apx_nci_ndd_nf”、“avx10.2”、 “avx10.2/512”、“avx10.2/256”、“avx10.2/128”、“movrs”、“amx_int8”、“amx_bf16”、“amx_fp16”、 “amx_complex”、“amx_transpose”、“amx_tf32”、“amx_fp8”、“amx_movrs”、“amx_avx512”、“amx_tile”、 “vmx”、“vmfunc”、“smx”、“xsave”、“xsaveopt”、“xsavec”、“xsaves”、“aes”、“pclmul”、“fsgsbase”、 “rdrnd”、“f16c”、“bmi2”、“fma”、“movbe”、“ept”、“lzcnt”、“popcnt”、“hle”、“rtm”、“tsx”、 “invpcid”、“clflush”、“mwaitx”、“clzero”、“wbnoinvd”、“pconfig”、“waitpkg”、“uintr”、 “cldemote”、“rdpru”、“mcommit”、“sev_es”、“lwp”、“fma4”、“xop”、“cx16”、“syscall”、“rdtscp”、 “3dnow”、“3dnowa”、“sse4a”、“sse5”、“snp”、“invlpgb”、“tlbsync”、“rmpquery”、“rmpread”、 “svme”、“gmism2”、“gmiccs”、“padlockrng2”、“padlockphe2”、“padlockxmodx” 和 “padlock”。请注意, 这些扩展助记符可以以 "no" 作为前缀,以撤销相应的(以及任何依赖的)功能。另外请注意,"-march=avx10." 上的后缀 强制执行矢量长度限制,即,尽管这些操作符否则是“启用”选项, 但使用这些后缀将禁用所有具有更宽向量或掩码寄存器操作数的指令。

当使用 -march 时,.arch 指令的优先级更高。

-mtune=CPU

此选项指定要优化的处理器。当与 -march 选项一起使用时,将只生成由 -march 选项指定的处理器支持的指令。

有效的 CPU 值与 -march=CPU 的处理器列表相同。

-moperand-check=none
-moperand-check=warning
-moperand-check=error

这些选项控制汇编器是否应该检查某些指令的操作数或操作数组合。一个例子是,某些指令的操作数大小无法从其操作数中推断,并且也没有通过指令后缀指定。 -moperand-check=none 将使汇编器不执行这些检查。 -moperand-check=warning 将使汇编器在相应的检查失败时发出警告,这是默认设置。-moperand-check=error 将使汇编器在相应的检查失败时发出错误。

-msse2avx

此选项指定汇编器应该使用 VEX 前缀编码 SSE 指令,这需要 AVX 可用。使用扩展 GPR 的 SSE 指令将使用 EVEX 前缀编码,这需要 AVX512 或 AVX10 可用。

-muse-unaligned-vector-move

此选项指定汇编器应该将对齐的向量移动编码为未对齐的向量移动。

-msse-check=none
-msse-check=warning
-msse-check=error

这些选项控制汇编器是否应该检查 SSE 指令。-msse-check=none 将使汇编器不检查 SSE 指令,这是默认设置。-msse-check=warning 将使汇编器对任何 SSE 指令发出警告。-msse-check=error 将使汇编器对任何 SSE 指令发出错误。

-mavxscalar=128
-mavxscalar=256

这些选项控制汇编器应该如何编码标量 AVX 指令。 -mavxscalar=128 将使用 128 位向量长度编码标量 AVX 指令,这是默认设置。-mavxscalar=256 将使用 256 位向量长度编码标量 AVX 指令。

警告:请勿在生产代码中使用此选项,因为由于 CPU 错误,生成的代码可能无法在某些型号上工作。

-mvexwig=0
-mvexwig=1

这些选项控制汇编器应该如何编码 VEX.W-ignored (WIG) VEX 指令。 -mvexwig=0 将使用 vex.w = 0 编码 WIG VEX 指令,这是默认设置。-mvexwig=1 将使用 vex.w = 1 编码 WIG EVEX 指令。


警告:请勿在生产代码中使用此选项,因为由于 CPU 错误,生成的代码可能无法在某些型号上正常工作。

-mevexlig=128
-mevexlig=256
-mevexlig=512
这些选项控制汇编器应如何编码长度忽略(LIG)EVEX 指令。
-mevexlig=128 将使用 128 位向量长度编码 LIG EVEX 指令,这是默认设置。-mevexlig=256 和 -mevexlig=512 将分别使用 256 位和 512 位向量长度编码 LIG EVEX 指令。

-mevexwig=0
-mevexwig=1
这些选项控制汇编器应如何编码 w 忽略(WIG)EVEX 指令。
-mevexwig=0 将使用 evex.w = 0 编码 WIG EVEX 指令,这是默认设置。-mevexwig=1 将使用 evex.w = 1 编码 WIG EVEX 指令。

-mmnemonic=att
-mmnemonic=intel
此选项指定用于匹配指令的指令助记符。".att\_mnemonic" 和 ".intel\_mnemonic" 指令优先。

-msyntax=att
-msyntax=intel
此选项指定处理指令时的指令语法。".att\_syntax" 和 ".intel\_syntax" 指令优先。

-mnaked-reg
此选项指定寄存器不需要使用 "%" 前缀。".att\_syntax" 和 ".intel\_syntax" 指令优先。

-madd-bnd-prefix
此选项强制汇编器为所有分支添加 BND 前缀,即使源代码中未明确指定该前缀。

-mno-shared
在 ELF 目标上,汇编器通常会优化掉针对已定义非弱全局分支目标的非 PLT 重定位,且默认可见性。-mshared 选项指示汇编器生成可以放入共享库中的代码,在该库中,所有非弱全局分支目标(默认可见性)都可能被覆盖。生成的代码会稍微大一些。此选项仅影响分支指令的处理。

-mbig-obj
在 PE/COFF 目标上,此选项强制使用大对象文件格式,该格式允许使用超过 32768 个节。

-momit-lock-prefix=no
-momit-lock-prefix=yes
这些选项控制汇编器应如何编码 lock 前缀。此选项旨在作为对某些处理器(在 lock 前缀时失败)的解决方法。此选项只能在单核、单线程计算机上安全使用。-momit-lock-prefix=yes 将省略所有 lock 前缀。-momit-lock-prefix=no 将按通常方式编码 lock 前缀,这是默认设置。

-mfence-as-lock-add=no
-mfence-as-lock-add=yes
这些选项控制汇编器应如何编码 lfence、mfence 和 sfence。
-mfence-as-lock-add=yes 将在 64 位模式下将 lfence、mfence 和 sfence 编码为 lock addl $0x0, (%rsp),并在 32 位模式下编码为 lock addl $0x0, (%esp)。-mfence-as-lock-add=no 将按通常方式编码 lfence、mfence 和 sfence,这是默认设置。


-mrelax-relocations=no
-mrelax-relocations=yes
    这些选项控制汇编器是否生成“宽松重定位”,即 32 位模式下的 R_386_GOT32X,或 64 位模式下的 R_X86_64_GOTPCRELX 和 R_X86_64_REX_GOTPCRELX。
-mrelax-relocations=yes 会生成宽松重定位。-mrelax-relocations=no 不会生成宽松重定位。

-mtls-check=no
-mtls-check=yes
这些选项控制汇编器是否检查 TLS 重定位。-mtls-check=yes 会检查 TLS 重定位。-mtls-check=no 不会检查 TLS 重定位。默认行为由配置选项 --enable-x86-tls-check 控制。

-malign-branch-boundary=NUM
此选项控制汇编器如何使用段前缀或 NOP 对分支进行对齐。NUM 必须是 2 的幂。它应该是 0 或不小于 16。分支将在 NUM 字节的边界内对齐。-malign-branch-boundary=0,这是默认设置,不会对齐分支。

-malign-branch=TYPE[+TYPE...]
此选项指定要对齐的分支类型。TYPE 是 jcc(对齐条件跳转)、fused(对齐融合条件跳转)、jmp(对齐无条件跳转)、call(对齐调用)、ret(对齐返回)、indirect(对齐间接跳转和调用)的组合。默认值为 -malign-branch=jcc+fused+jmp。

-malign-branch-prefix-size=NUM
此选项指定对齐分支的指令上的最大前缀数。NUM 应该在 0 到 5 之间。默认 NUM 为 5。

-mlbranches-within-32B-boundaries
此选项将条件跳转、融合条件跳转和无条件跳转在 32 字节的边界内对齐,指令最多使用 5 个段前缀。它等效于 -malign-branch-boundary=32 -malign-branch=jcc+fused+jmp -malign-branch-prefix-size=5。默认情况下,不进行分支对齐。

-mlfence-after-load=no
-mlfence-after-load=yes
这些选项控制汇编器是否在加载指令后生成 lfence。-mlfence-after-load=yes 会生成 lfence。-mlfence-after-load=no 不会生成 lfence,这是默认设置。

-mlfence-before-indirect-branch=none
-mlfence-before-indirect-branch=all
-mlfence-before-indirect-branch=register
-mlfence-before-indirect-branch=memory
这些选项控制汇编器是否在间接近距离分支指令之前生成 lfence。-mlfence-before-indirect-branch=all 会在通过寄存器进行间接近距离分支之前生成 lfence,并在通过内存进行间接近距离分支之前发出警告。它还会隐式设置 -mlfence-before-ret=shl(如果没有显式设置 -mlfence-before-ret)。-mlfence-before-indirect-branch=register 会在通过寄存器进行间接近距离分支之前生成 lfence。-mlfence-before-indirect-branch=memory 会在通过内存进行间接近距离分支之前发出警告。-mlfence-before-indirect-branch=none 不会生成 lfence 也不发出警告,这是默认设置。请注意,如果设置了 -mlfence-after-load=yes,则不会在通过寄存器进行间接近距离分支之前生成 lfence,因为 lfence 将在加载分支目标寄存器之后生成。

-mlfence-before-ret=none
-mlfence-before-ret=shl
-mlfence-before-ret=or
-mlfence-before-ret=yes
-mlfence-before-ret=not

这些选项控制汇编器是否应在 ret 指令之前生成 lfence 指令。 -mlfence-before-ret=or 将生成带有 lfence 指令的 or 指令。 -mlfence-before-ret=shl/yes 将生成带有 lfence 指令的 shl 指令。 -mlfence-before-ret=not 将生成带有 lfence 指令的 not 指令。-mlfence-before-ret=none 不会生成 lfence 指令,这是默认设置。

-mx86-used-note=no
-mx86-used-note=yes

这些选项控制汇编器是否应生成 GNU_PROPERTY_X86_ISA_1_USEDGNU_PROPERTY_X86_FEATURE_2_USED GNU 属性注释。 默认设置可以通过 --enable-x86-used-note 配置选项进行控制。

-mevexrcig=rne
-mevexrcig=rd
-mevexrcig=ru
-mevexrcig=rz

这些选项控制汇编器应如何编码仅限 SAE 的 EVEX 指令。 -mevexrcig=rne 将编码 EVEX 指令的 RC 位为 00,这是默认设置。 -mevexrcig=rd、-mevexrcig=ru 和 -mevexrcig=rz 将编码 SAE 专用 EVEX 指令,其 RC 位分别为 01、10 和 11。

-mamd64
-mintel64

此选项指定汇编器是否应仅接受 64 位模式下的 AMD64 或 Intel64 ISA。 默认情况下,它接受通用、Intel64 专用和 AMD64 ISA。

-O0 | -O | -O1 | -O2 | -Os

优化指令编码,以使用更小的指令大小。 -O 和 -O1 将 64 位寄存器加载指令编码为 32 位寄存器加载指令,并使用 31 位或 32 位立即数;将 64 位寄存器清除指令编码为 32 位寄存器清除指令;将 256 位/512 位 VEX/EVEX 向量寄存器清除指令编码为 128 位 VEX 向量寄存器清除指令;将 128 位/256 位 EVEX 向量寄存器加载/存储指令编码为 VEX 向量寄存器加载/存储指令;并将 128 位/256 位 EVEX 压缩整数逻辑指令编码为 128 位/256 位 VEX 压缩整数逻辑指令。

-O2 包括 -O1 优化,并编码 256 位/512 位 EVEX 向量寄存器清除指令为 128 位 EVEX 向量寄存器清除指令。 在 64 位模式下,带有交换源操作数的 VEX 编码指令,如果这样做可以使其使用 2 字节 VEX 前缀形式而不是 3 字节形式,则其源操作数将被交换。 某些形式的 AND 以及使用相同的(寄存器)操作数指定的两次的 OR 也会更改为 TEST。

as 配置为 Ubicom IP2K 系列时,以下选项可用。

-Os 包括 -O2 优化,并使用 8 位立即数对 16 位、32 位和 64 位寄存器测试进行编码。-O0 会禁用此优化。

as 配置为 Renesas M32C 和 M16C 处理器时,以下选项可用。

-mip2022ext

指定允许使用扩展的 IP2022 指令。

-mip2022

恢复默认行为,即限制允许的指令为基本的 IP2022 指令。

-m32c

汇编 M32C 指令。

-m16c

汇编 M16C 指令(默认)。

-relax

启用对链接时放松的支持。

-h-tick-hex

支持 H'00 样式的十六进制常量,以及 0x00 样式。

as 配置为 Renesas M32R(以前为 Mitsubishi M32R)系列时,以下选项可用。

--m32rx

指定 M32R 系列中目标处理器。默认情况下通常为 M32R,但此选项将其更改为 M32RX。

--warn-explicit-parallel-conflicts 或 --Wp

当遇到可疑的并行结构时,生成警告消息。

--no-warn-explicit-parallel-conflicts 或 --Wnp

不生成警告消息,即使遇到可疑的并行结构。

as 配置为 Motorola 68000 系列时,以下选项可用。

-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

目标机器具有(或不具有)内存管理单元协处理器。默认情况下,假定 68020 及更高版本具有 MMU。

有关 PDP-11 机器相关功能选项的详细信息,请参阅 PDP-11-Options。

-mpic | -mno-pic

生成与位置无关(或与位置相关)的代码。默认值为 -mpic。

-mall
-mall-extensions

启用所有指令集扩展。这是默认设置。

-mno-extensions

禁用所有指令集扩展。

-mextension | -mno-extension

启用(或禁用)特定的指令集扩展。

-mcpu

启用特定 CPU 支持的指令集扩展,并禁用所有其他扩展。

-mmachine

启用特定机器型号支持的指令集扩展,并禁用所有其他扩展。

as 配置为 picoJava 处理器时,以下选项可用。

-mb 生成“大端”格式输出。

-ml 生成“小端”格式输出。

as 配置为 PRU 处理器时,以下选项可用。

-mlink-relax
假定 `LD` 将优化 `LDI32` 指令,方法是检查表达式的较高 16 位。如果它们都为零,则 `LD` 会将 `LDI32` 指令缩短为单个 `LDI`。在这种情况下,`as` 将为不同的表达式输出 DIFF 重定位。

-mno-link-relax
假定 `LD` 不会优化 `LDI32` 指令。因此,不会发出 DIFF 重定位。

-mno-warn-regname-label
如果标签名称与寄存器名称匹配,则不发出警告。通常,汇编程序程序员会希望发出此警告。C 编译器可能希望将其关闭。

as 配置为 MIPS 处理器时,以下选项可用。

-G num
此选项设置可以隐式引用到“gp”寄存器的对象的最大大小。它仅适用于使用 ECOFF 格式的目标,例如运行 Ultrix 的 DECstation。默认值为 8。

-EB 生成“大端”格式输出。

-EL 生成“小端”格式输出。

-mips1
-mips2
-mips3
-mips4
-mips5
-mips32
-mips32r2
-mips32r3
-mips32r5
-mips32r6
-mips64
-mips64r2
-mips64r3
-mips64r5
-mips64r6
生成特定 MIPS 指令集体系结构级别的代码。`-mips1` 是 `-march=r3000` 的别名,`-mips2` 是 `-march=r6000` 的别名,`-mips3` 是 `-march=r4000` 的别名,`-mips4` 是 `-march=r8000` 的别名。`-mips5`、`-mips32`、`-mips32r2`、`-mips32r3`、`-mips32r5`、`-mips32r6`、`-mips64`、`-mips64r2`、`-mips64r3`、`-mips64r5` 和 `-mips64r6` 分别对应于通用 MIPS V、MIPS32、MIPS32 Release 2、MIPS32 Release 3、MIPS32 Release 5、MIPS32 Release 6、MIPS64、MIPS64 Release 2、MIPS64 Release 3、MIPS64 Release 5 和 MIPS64 Release 6 ISA 处理器。

-march=cpu
为特定的 MIPS CPU 生成代码。

-mtune=cpu
针对特定的 MIPS CPU 进行调度和调整。

-mfix7000
-mno-fix7000
如果 `mfhi` 或 `mflo` 指令的源寄存器的读取发生在接下来的两个指令中,则插入 `nop`。

-mfix-rm7000
-mno-fix-rm7000
如果 `dmult` 或 `dmultu` 指令后跟一个加载指令,则插入 `nop`。

-mfix-r5900
-mno-fix-r5900
不要尝试将前一个指令调度到放置在六个或更少指令的短循环末尾的分支指令的延迟槽中,并且总是调度一个“nop”指令。在某些条件下,短循环错误会导致循环仅执行一次或两次,这是 R5900 芯片中的硬件错误。

-mdebug
-no-mdebug
导致 stabs 样式的调试输出进入 ECOFF 样式的 .mdebug 部分,而不是标准的 ELF .stabs 部分。

-mpdr
-mno-pdr

控制生成“.pdr”节。

-mgp32
-mfp32

通常情况下,寄存器大小会根据 ISA 和 ABI 推断,但这些标志会强制将特定组的寄存器始终视为 32 位宽。-mgp32 控制通用寄存器的尺寸,-mfp32 控制浮点寄存器的尺寸。

-mgp64
-mfp64

通常情况下,寄存器大小会根据 ISA 和 ABI 推断,但这些标志会强制将特定组的寄存器始终视为 64 位宽。-mgp64 控制通用寄存器的尺寸,-mfp64 控制浮点寄存器的尺寸。

-mfpxx

通常情况下,寄存器大小会根据 ISA 和 ABI 推断,但将此标志与 -mabi=32 结合使用可启用一个 ABI 变体,该变体可以正确地处理 32 位或 64 位宽的浮点寄存器。

-modd-spreg
-mno-odd-spreg

启用对奇数编号的单精度寄存器执行浮点运算,如果 ISA 支持,则启用。-mfpxx 隐含 -mno-odd-spreg,否则默认值为 -modd-spreg。

-mips16
-no-mips16

为 MIPS 16 处理器生成代码。 这等同于在汇编文件的开头放置“.module mips16”。-no-mips16 关闭此选项。

-mmips16e2
-mno-mips16e2

在 MIPS16 模式中启用使用 MIPS16e2 指令。 这等同于在汇编文件的开头放置“.module mips16e2”。-mno-mips16e2 关闭此选项。

-mmicromips
-mno-micromips

为 microMIPS 处理器生成代码。 这等同于在汇编文件的开头放置“.module micromips”。-mno-micromips 关闭此选项。 这等同于在汇编文件的开头放置“.module nomicromips”。

-msmartmips
-mno-smartmips

启用 MIPS32 指令集的 SmartMIPS 扩展。 这等同于在汇编文件的开头放置“.module smartmips”。-mno-smartmips 关闭此选项。

-mips3d
-no-mips3d

为 MIPS-3D 应用特定扩展生成代码。 这告诉汇编器接受 MIPS-3D 指令。-no-mips3d 关闭此选项。

-mdmx
-no-mdmx

为 MDMX 应用特定扩展生成代码。 这告诉汇编器接受 MDMX 指令。-no-mdmx 关闭此选项。

-mdsp
-mno-dsp

为 DSP Release 1 应用特定扩展生成代码。 这告诉汇编器接受 DSP Release 1 指令。-mno-dsp 关闭此选项。

-mdspr2
-mno-dspr2

为 DSP Release 2 应用特定扩展生成代码。 此选项隐含 -mdsp。 这告诉汇编器接受 DSP Release 2 指令。-mno-dspr2 关闭此选项。

-mdspr3
-mno-dspr3

为 DSP Release 3 应用特定扩展生成代码。 此选项隐含 -mdsp 和 -mdspr2。 这告诉汇编器接受 DSP Release 3 指令。-mno-dspr3 关闭此选项。


-mmsa
-mno-msa

为 MIPS SIMD 架构扩展生成代码。 这会告诉汇编器接受 MSA 指令。 -mno-msa 会禁用此选项。

-mxpa
-mno-xpa

为 MIPS 扩展物理地址 (XPA) 扩展生成代码。 这会告诉汇编器接受 XPA 指令。 -mno-xpa 会禁用此选项。

-mmt
-mno-mt

为 MT 应用特定扩展生成代码。 这会告诉汇编器接受 MT 指令。 -mno-mt 会禁用此选项。

-mmcu
-mno-mcu

为 MCU 应用特定扩展生成代码。 这会告诉汇编器接受 MCU 指令。 -mno-mcu 会禁用此选项。

-mcrc
-mno-crc

为 MIPS 循环冗余校验 (CRC) 应用特定扩展生成代码。 这会告诉汇编器接受 CRC 指令。 -mno-crc 会禁用此选项。

-mginv
-mno-ginv

为全局无效化 (GINV) 应用特定扩展生成代码。 这会告诉汇编器接受 GINV 指令。 -mno-ginv 会禁用此选项。

-mloongson-mmi
-mno-loongson-mmi

为龙芯多媒体扩展指令 (MMI) 应用特定扩展生成代码。 这会告诉汇编器接受 MMI 指令。 -mno-loongson-mmi 会禁用此选项。

-mloongson-cam
-mno-loongson-cam

为龙芯内容寻址存储器 (CAM) 指令生成代码。 这会告诉汇编器接受龙芯 CAM 指令。 -mno-loongson-cam 会禁用此选项。

-mloongson-ext
-mno-loongson-ext

为龙芯扩展 (EXT) 指令生成代码。 这会告诉汇编器接受龙芯 EXT 指令。 -mno-loongson-ext 会禁用此选项。

-mloongson-ext2
-mno-loongson-ext2

为龙芯扩展 R2 (EXT2) 指令生成代码。 此选项包含 -mloongson-ext。 这会告诉汇编器接受龙芯 EXT2 指令。 -mno-loongson-ext2 会禁用此选项。

-minsn32
-mno-insn32

为 microMIPS 处理器生成代码时,仅使用 32 位指令编码。 此选项会阻止使用任何 16 位指令。 这等效于在汇编文件的开头放置“.set insn32”。 -mno-insn32 会禁用此选项。 这等效于在汇编文件的开头放置“.set noinsn32”。 默认情况下,选择 -mno-insn32,允许使用所有指令。

--construct-floats
--no-construct-floats

--no-construct-floats 选项会禁用通过将值的两个半部分加载到构成双精度浮点寄存器的两个单精度浮点寄存器中来构造双精度浮点常量。 默认情况下,选择 --construct-floats,允许构造这些浮点常量。


--relax-branch
--no-relax-branch

^ -relax-branch 选项启用对超出范围的分支进行放松处理。默认情况下,选择了 --no-relax-branch,这将导致任何超出范围的分支产生错误。

-mignore-branch-isa
-mno-ignore-branch-isa

忽略分支检查,以避免无效的 ISA 模式之间的转换。分支的语义不提供 ISA 模式切换,因此在大多数情况下,分支编码的 ISA 模式必须与分支目标标签的 ISA 模式相同。因此,GAS 实现了在分支汇编中验证这两个 ISA 模式是否匹配的检查。-mignore-branch-isa 禁用了这些检查。默认情况下,选择了 -mno-ignore-branch-isa,这将导致任何需要 ISA 模式之间转换的无效分支产生错误。

-mnan=encoding

在 IEEE 754-2008 (-mnan=2008) 或旧版 (-mnan=legacy) NaN 编码格式之间进行选择。后者是默认设置。

--emulation=name

此选项以前用于在 IRIX 5 等支持 ELF 和 ECOFF 的目标上切换 ELF 和 ECOFF 输出。GAS 2.24 中删除了 MIPS ECOFF 支持,因此该选项现在几乎没有用处。为了向后兼容,该选项仍然存在。

可用的配置名称为:mipself、mipslelf 和 mipsbelf。现在选择 mipself 没有效果,因为输出始终为 ELF。mipslelf 和 mipsbelf 分别选择小端和大端输出,但现在 -EL-EB 是首选选项。

-nocpp
as 忽略此选项。为了与本机工具兼容,它被接受。

--trap
--no-trap
--break
--no-break

控制如何处理乘法溢出和除零。--trap--no-break(两者是同义词)将引发陷阱异常(仅适用于指令集体系结构级别 2 及更高版本);--break--no-trap(两者也是同义词,并且是默认设置)将引发中断异常。

-n

当使用此选项时,as 将在每次从宏生成 nop 指令时发出警告。

以下选项在 as 为 LoongArch 处理器配置时可用。

-fpic
-fPIC

生成位置无关代码

-fno-pic

不生成位置无关代码(默认)

以下选项在 as 为 Meta 处理器配置时可用。

"-mcpu=metac11"

生成 Meta 1.1 代码。

"-mcpu=metac12"

生成 Meta 1.2 代码。

"-mcpu=metac21"

生成 Meta 2.1 代码。

"-mfpu=metac21"

允许代码使用 Meta 2.1 的 FPU 硬件。

请参阅 info 页面以获取 MMIX 特定选项的文档。

以下选项在 as 为 NDS32 处理器配置时可用。

"-O1"

优化性能。

"-Os"

优化空间。

"-EL"

生成小端数据输出。

"-EB"

生成小端数据输出。

"-mpic"

生成 PIC。

"-mno-fp-as-gp-relax"

禁止针对此文件进行 fp-as-gp 松弛处理。

"-mb2bb-relax"

连续分支优化。


"-mno-all-relax"
禁止对此文件的所有优化。

"-march=<arch name>"
为 <arch name> 架构进行编译,架构可以是 v3、v3j、v3m、v3f、v3s、v2、v2j、v2f 或 v2s。

"-mbaseline=<baseline>"
为 <baseline> 基线进行编译,基线可以是 v2、v3 或 v3m。

"-mfpu-freg=FREG"
指定 FPU 配置。

"0      8 SP /  4 DP 寄存器"
"1     16 SP /  8 DP 寄存器"
"2     32 SP / 16 DP 寄存器"
"3     32 SP / 32 DP 寄存器"
"-mabi=abi"
指定 ABI 版本 <abi>,可以是 v1、v2、v2fp 或 v2fpp。

"-m[no-]mac"
启用/禁用乘法指令支持。

"-m[no-]div"
启用/禁用除法指令支持。

"-m[no-]16bit-ext"
启用/禁用 16 位扩展。

"-m[no-]dx-regs"
启用/禁用 d0/d1 寄存器。

"-m[no-]perf-ext"
启用/禁用性能扩展。

"-m[no-]perf2-ext"
启用/禁用性能扩展 2。

"-m[no-]string-ext"
启用/禁用字符串扩展。

"-m[no-]reduced-regs"
启用/禁用减少寄存器配置(GPR16)选项。

"-m[no-]audio-isa-ext"
启用/禁用音频 ISA 扩展。

"-m[no-]fpu-sp-ext"
启用/禁用 FPU 单精度扩展。

"-m[no-]fpu-dp-ext"
启用/禁用 FPU 双精度扩展。

"-m[no-]fpu-fma"
启用/禁用 FPU 融合乘加指令。

"-mall-ext"
启用所有扩展和指令支持。

以下选项在配置为 PowerPC 处理器时可用。

-a32
生成 ELF32 或 XCOFF32。

-a64
生成 ELF64 或 XCOFF64。

-K PIC
在 ELF 标志中设置 EF\_PPC\_RELOCATABLE\_LIB。

-mpwrx | -mpwr2
生成 POWER/2(RIOS2)的代码。

-mpwr
生成 POWER(RIOS1)的代码。

-m601
生成 PowerPC 601 的代码。

-mppc, -mppc32, -m603, -m604
生成 PowerPC 603/604 的代码。

-m403, -m405
生成 PowerPC 403/405 的代码。

-m440
生成 PowerPC 440 的代码。BookE 和一些 405 指令。

-m464
生成 PowerPC 464 的代码。

-m476
生成 PowerPC 476 的代码。

-m7400, -m7410, -m7450, -m7455
生成 PowerPC 7400/7410/7450/7455 的代码。

-m750cl, -mgekko, -mbroadway
生成 PowerPC 750CL/Gekko/Broadway 的代码。

-m821, -m850, -m860
生成 PowerPC 821/850/860 的代码。

-mppc64, -m620
生成 PowerPC 620/625/630 的代码。

-me200z2, -me200z4
生成 e200 变体的代码,e200z2 带有 LSP,e200z4 带有 SPE。

-me300
生成 PowerPC e300 系列的代码。

-me500, -me500x2
生成 Motorola e500 核心复杂体的代码。

-me500mc
生成 Freescale e500mc 核心复杂体的代码。

-me500mc64
生成 Freescale e500mc64 核心复杂体的代码。

-me5500
生成 Freescale e5500 核心复杂体的代码。

-me6500
生成 Freescale e6500 核心复杂体的代码。

-mlsp
启用 LSP 指令。(禁用 SPE 和 SPE2。)

-mspe
生成 Motorola SPE 指令的代码。(禁用 LSP。)

-mspe2
生成 Freescale SPE2 指令的代码。(禁用 LSP。)

-mtitan
生成 AppliedMicro Titan 核心复杂体的代码。

-mppc64bridge
生成 PowerPC 64 的代码,包括桥接指令。

-mbooke
生成 32 位 BookE 的代码。

-ma2
生成 A2 架构的代码。

-maltivec
为具有 AltiVec 指令的处理器生成代码。

-mvle
为具有 Freescale PowerPC VLE 指令的处理器生成代码。

-mvsx
为具有矢量-标量 (VSX) 指令的处理器生成代码。

-mhtm
为具有硬件事务内存指令的处理器生成代码。

-mpower4, -mpwr4
为 Power4 架构生成代码。

-mpower5, -mpwr5, -mpwr5x
为 Power5 架构生成代码。

-mpower6, -mpwr6
为 Power6 架构生成代码。

-mpower7, -mpwr7
为 Power7 架构生成代码。

-mpower8, -mpwr8
为 Power8 架构生成代码。

-mpower9, -mpwr9
为 Power9 架构生成代码。

-mpower10, -mpwr10
为 Power10 架构生成代码。

-mpower11, -mpwr11
为 Power11 架构生成代码。

-mfuture
为“未来”架构生成代码。

-mcell
为 Cell Broadband Engine 架构生成代码。

-mcom
生成 Power/PowerPC 通用指令。

-many
为任何架构(PWR/PWRX/PPC)生成代码。

-mregnames
允许使用符号名称表示寄存器。

-mno-regnames
不允许使用符号名称表示寄存器。

-mrelocatable
支持 GCC 的 -mrelocatable 选项。

-mrelocatable-lib
支持 GCC 的 -mrelocatable-lib 选项。

-memb
在 ELF 标志中设置 PPC\_EMB 位。

-mlittle, -mlittle-endian, -le
为小端机器生成代码。

-mbig, -mbig-endian, -be
为大端机器生成代码。

-nops=count
如果对齐指令插入超过 count 个 NOP 指令,则在开头放置一个分支,以跳过执行这些 NOP 指令。

以下选项在配置为 RISC-V 处理器的汇编器中使用。

-fpic
-fPIC
生成位置无关代码。

-fno-pic
不生成位置无关代码(默认)。

-march=ISA|Profiles|Profiles_ISA
选择基础 ISA,如 ISA 或 Profiles 或 Profiles\_ISA 所指定的。例如:
-march=rv32ima -march=RVI20U64 -march=RVI20U64_d。如果未设置此选项和架构属性,则汇编器将检查默认配置设置 --with-arch=ISA。

-misa-spec=ISAspec
选择默认 ISA 规范版本。如果 ISA 的版本未通过 -march 设置,则汇编器将帮助根据选择的默认规范设置版本。如果未设置此选项,则汇编器将检查默认配置设置 --with-isa-spec=ISAspec。

-mpriv-spec=PRIVspec
选择特权规范版本。我们可以根据选择的规范来确定 CSR 是否有效。如果未设置此选项和特权属性,则汇编器将检查默认配置设置 --with-priv-spec=PRIVspec。

-mabi=ABI
选择 ABI,可以是 "ilp32" 或 "lp64",可选地后跟 "f"、"d" 或 "q",以指示单精度、双精度或四精度浮点调用约定,或者不带任何后缀或带 "e",以指示软浮点调用约定("e" 表示软浮点 RVE ABI)。

-mrelax
利用链接器松弛功能来减少生成符号地址所需的指令数量。(默认)

-mno-relax
不执行链接器松弛。

-march-attr
如果未设置 `.attribute` 指令,则生成默认的 RISC-V ELF 属性节内容。该节用于记录链接器或运行时加载器需要检查兼容性的信息,包括 ISA 字符串、堆栈对齐要求、未对齐的内存访问以及特权规范的主要、次要和修订版本。

-mno-arch-attr
如果未设置 `.attribute` 指令,则不生成默认的 RISC-V ELF 属性节。

-mcsr-check
启用 CSR 检查,用于检查与 ISA 相关的 CSR 以及只读 CSR。与 ISA 相关的 CSR 仅在设置了特定的 ISA 时才有效。只读 CSR 不能通过 CSR 指令进行写入。

-mno-csr-check
不执行 CSR 检查。

-mlittle-endian
生成针对小端机器的代码。

-mbig-endian
生成针对大端机器的代码。

请参阅信息页,以获取 RX 特定选项的文档。

以下选项在配置为 s390 处理器系列的 as 程序时可用。

-m31
-m64
选择字大小,31/32 位或 64 位。

-mesa
-mzarch
选择体系结构模式,企业系统体系结构 (esa) 或 z/Architecture 模式 (zarch)。

-march=processor
指定目标 s390 处理器变体,g5(或 arch3)、g6、z900(或 arch5)、z990(或 arch6)、z9-109、z9-ec(或 arch7)、z10(或 arch8)、z196(或 arch9)、zEC12(或 arch10)、z13(或 arch11)、z14(或 arch12)、z15(或 arch13)、z16(或 arch14)或 z17(或 arch15)。

-mregnames
-mno-regnames
允许或不允许使用符号名称表示寄存器。

-mwarn-areg-zero
每当基寄存器或索引寄存器的操作数被指定但计算结果为零时,发出警告。

-mwarn-regtype-mismatch=strict
-mwarn-regtype-mismatch=relaxed
-mwarn-regtype-mismatch=no
-mno-warn-regtype-mismatch
控制汇编器是否执行寄存器名称类型检查,并在寄存器类型与操作数寄存器类型不匹配时生成警告消息。默认情况下(可以通过使用 `relaxed` 参数恢复),执行宽松的寄存器名称类型检查,允许浮点寄存器(FPR)名称 `%f0` 到 `%f15` 用作向量寄存器(VR)操作数的参数,并且允许向量寄存器(VR)名称 `%v0` 到 `%v15` 用作浮点寄存器(FPR)操作数的参数。这是可以接受的,因为 FPR 嵌入在 VR 的较低一半中。使用 `strict` 参数执行严格的寄存器名称类型检查。`no` 参数等效于 `-mno-warn-regtype-mismatch`,禁用任何寄存器名称类型检查。

以下选项在配置为 TMS320C6000 处理器的 as 程序时可用。

-march=arch
启用(仅)来自架构 `arch` 的指令。 默认情况下,允许所有指令。

以下 `arch` 值是可以接受的:“c62x”、“c64x”、“c64x+”、“c67x”、“c67x+”、“c674x”。

-mdsbt
-mno-dsbt
`-mdsbt` 选项使汇编器生成带有值 1 的“Tag\_ABI\_DSBT”属性,表明代码正在使用 DSBT 寻址。 `-mno-dsbt` 选项,默认情况下,使标签具有值 0,表明代码不使用 DSBT 寻址。 如果链接了不同类型(DSBT 和非 DSBT)的对象,链接器将发出警告。

-mpid=no
-mpid=near
-mpid=far
`-mpid=` 选项使汇编器生成带有值 `n` 的“Tag\_ABI\_PID”属性,该值指示代码使用的数据寻址形式。 `-mpid=no`,默认情况下,表示位置相关数据寻址,`-mpid=near` 表示位置无关寻址,并使用近距离 DP 寻址进行 GOT 访问,`-mpid=far` 表示位置无关寻址,并使用远距离 DP 寻址进行 GOT 访问。 如果链接了使用此选项不同设置构建的对象,链接器将发出警告。

-mpic
-mno-pic
`-mpic` 选项使汇编器生成带有值 1 的“Tag\_ABI\_PIC”属性,表明代码正在使用位置无关代码寻址。 `"-mno-pic"` 选项,默认情况下,使标签具有值 0,表明位置相关代码寻址。 如果链接了不同类型(位置相关和位置无关)的对象,链接器将发出警告。

-mbig-endian
-mlittle-endian
为指定的字节序生成代码。 默认值为小端序。

以下选项在配置为针对 TILE-Gx 处理器时可用。

-m32 | -m64
选择字大小,可以是 32 位或 64 位。

-EB | -EL
选择字节序,可以是大小端序(`-EB`)或小端序(`-EL`)。

以下选项在配置为针对 Visium 处理器时可用。

-mtune=arch
此选项指定目标架构。 如果尝试汇编在目标架构上无法执行的指令,汇编器将发出错误消息。

以下名称将被识别:“mcm24”、“mcm”、“gr5”、“gr6”

以下选项在配置为针对 Xtensa 处理器时可用。

--text-section-literals | --no-text-section-literals
控制字面量池的处理。 默认值为 `--no-text-section-literals`,它将字面量放置在输出文件的单独部分中。 这允许将字面量池放置在数据 RAM/ROM 中。 使用 `--text-section-literals` 时,字面量将穿插在文本部分中,以便尽可能地使它们与其引用靠近。 对于大型汇编文件,这可能是必要的,在这种情况下,字面量将超出文本部分中“L32R”指令的范围。 字面量被分组到池中,这些池位于“.literal_position”指令之后或“ENTRY”指令之前。 这些选项仅影响通过 PC 相对“L32R”指令引用的字面量;绝对模式“L32R”指令的字面量是单独处理的。

--auto-litpools | --no-auto-litpools

控制字面量池的处理方式。默认值为 --no-auto-litpools,在没有使用 --text-section-literals 时,字面量将放置在输出文件的单独部分中。 这允许将字面量池放置在数据 RAM/ROM 中。使用 --auto-litpools 时,字面量将穿插在文本部分中,以便尽可能地靠近它们的引用,无需使用显式的“.literal_position”指令。 这对于非常大的函数可能是有必要的,因为单个字面量池位于函数开头,而函数末尾的“L32R”指令可能无法访问它。这些选项仅影响通过 PC 相对“L32R”指令引用的字面量;用于绝对模式“L32R”指令的字面量是单独处理的。当与 --text-section-literals 结合使用时,--auto-litpools 优先。

--absolute-literals | --no-absolute-literals

指示汇编器“L32R”指令是否使用绝对寻址或 PC 相对寻址。如果处理器包含绝对寻址选项,则默认使用绝对“L32R”重定位。否则,只能使用 PC 相对“L32R”重定位。

--target-align | --no-target-align

启用或禁用自动对齐,以减少分支惩罚,但会增加代码大小。默认情况下启用此优化。请注意,汇编器始终会对齐“LOOP”等具有固定对齐要求的指令。

--longcalls | --no-longcalls

启用或禁用调用指令的转换,以允许调用跨越更大的地址范围。当调用目标可能超出范围时,应使用此选项。它可能会降低代码大小和性能,但链接器通常可以优化掉不必要的开销,从而使调用最终位于范围内。默认值为 --no-longcalls。

--transform | --no-transform

启用或禁用汇编器对 Xtensa 指令的所有转换,包括放松和优化。默认值为 --transform;只有在极少数情况下,指令必须完全按照汇编源代码中指定的指令时,才应使用 --no-transform。使用 --no-transform 会导致超出范围的指令操作数变为错误。

--rename-section oldname=newname

将旧名称部分重命名为新名称。可以使用此选项多次以重命名多个部分。

--trampolines | --no-trampolines

启用或禁用跳转指令的转换,以允许跳转跨越更大的地址范围。当跳转目标可能超出范围时,应使用此选项。在没有此类跳转的情况下,此选项不会影响代码大小或性能。默认值为 --trampolines。


--abi-windowed | --abi-call0

选择写入“.xtensa.info”部分的 ABI 标签。ABI 标签指示程序集代码的 ABI。链接器会在尝试链接具有不一致 ABI 标签的对象文件时发出警告。默认 ABI 由 Xtensa 核心配置选择。

以下选项在配置为 Z80 处理器时可用。

@chapter Z80 依赖功能

命令选项

-march=CPU[-EXT...][+EXT...]

此选项指定目标处理器。如果尝试汇编在目标处理器上无法执行的指令,汇编器将发出错误消息。以下处理器名称将被识别:“z80”、“z180”、“ez80”、“gbz80”、“z80n”、“r800”。除了基本的指令集之外,汇编器还可以配置为接受一些扩展助记符。例如,“-march=z180+sli+infc”将 z180 扩展为 SLI 指令和 IN F,(C)。以下扩展当前受支持:“full”(所有已知的指令)、“adl”(默认 ADL CPU 模式,仅限 eZ80)、“sli”(指令称为 SLI、SLL 或 SL1)、“xyhl”(带有索引寄存器半字的指令:IXL、IXH、IYL、IYH)、“xdcb”(类似于 RotOp (II+d),R 和 BitOp n,(II+d),R 的指令)、“infc”(指令 IN F,(C) 或 IN (C))、“outc0”(指令 OUT (C),0)。请注意,与扩展基本的指令集不同,以“-”开头的扩展助记符会撤销相应的函数:“-march=z80-full+xyhl”首先删除所有默认扩展,然后添加对索引寄存器半字的唯一支持。

如果未指定此选项,则假定“-march=z80+xyhl+infc”。

-local-prefix=prefix

将所有带有指定前缀的标签标记为局部标签。但是,可以在代码中显式地将这些标签标记为全局标签。此选项不会更改默认的局部标签前缀“.L”,它只是添加一个新的前缀。

-colonless

接受无冒号的标签。行首的所有符号都被视为标签。

-sdcc

接受 SDCC 生成的汇编代码。

-fp-s=FORMAT

单精度浮点数的格式。默认值:ieee754(32 位)。

-fp-d=FORMAT

双精度浮点数的格式。默认值:ieee754(64 位)。

参见

gcc(1), ld(1), 以及 binutils 和 ld 的信息条目。

版权

版权所有,1991-2025,自由软件基金会。

允许根据 GNU 自由文档许可协议,版本 1.3 或由自由软件基金会发布的任何后续版本,复制、分发和/或修改本文档;不包含不变部分,不包含前封面文字,也不包含后封面文字。许可证的副本包含在题为“GNU 自由文档许可协议”的部分中。