本章描述所有gnu汇编器版本可用的命令行选项。机器相关的选项可以查看机器架构相关的页面。
当从gnu C编译器调用as时,使用-Wa选项来传递参数给汇编器。不同的汇编器选项使用逗号','分开,如:
1 | gcc -c -g -O -Wa,-alh,-L file.c |
传递两个参数给汇编器,-alh和-L。
通常不需要直接使用-Wa机制,因为许多编译器命令行选项自动传递参数给汇编器。可以使用-v选项调用gcc,查看哪些参数传递给汇编器。
打开汇编器的listing输出,通常输出到标准输出,可以使用=file输出到文件。listing就是一些汇编信息,使用cdghlns控制不同的显示信息。这些选项具体控制哪些信息可查看之前的文章。下面需要一个例子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | herbert@Lenovo:/work/code/assembly/list$ as -a link.s GAS LISTING link.s page 1 1 .data 2 .globl var2 3 .align 4 4 .type var2, @object 5 .size var2, 4 6 var2: 7 0000 0A000000 .long 10 8 GAS LISTING link.s page 2 DEFINED SYMBOLS link.s:6 .data:0000000000000000 var2 NO UNDEFINED SYMBOLS |
可以使用=file,输出到文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | herbert@Lenovo:/work/code/assembly/list$ as -a=link.txt link.s herbert@Lenovo:/work/code/assembly/list$ herbert@Lenovo:/work/code/assembly/list$ cat link.txt GAS LISTING link.s page 1 1 .data 2 .globl var2 3 .align 4 4 .type var2, @object 5 .size var2, 4 6 var2: 7 0000 0A000000 .long 10 8 GAS LISTING link.s page 2 DEFINED SYMBOLS link.s:6 .data:0000000000000000 var2 NO UNDEFINED SYMBOLS |
开始交替宏模式,见.altmacro
将路径添加到搜索.include文件的路径,as总是先搜索当前目录,然后按照-I指定的顺序搜索。
as有时候会修改.word sym1-sym2指令产生的code。见.word。使用-K选项来产生警告。
以特定本地标签前缀开头的符号(ELF为.L),叫做本地符号。通常调试时这些符号不可见,因为他们只是被程序(如编译器)用来组成汇编程序。通常as和ld丢掉这些符号。
这个选项告诉as保留这些本地符号。通常,这么做的话,也告诉链接器ld保留这些符号。
listing功能可以使用-a开启。这个功能可以将输入源文件和输出目标文件对应位置的16进制打印结合起来,将他们显示为listing file。这个listing的格式,可以通过汇编源码内的指令控制。如.list, .title等。也可以通过下面的选项控制。
略。
使用-M或--mri选项,选择MRI兼容模式。
为创建的文件产生依赖文件,文件包含单一规则,可用于make。--MD后面需要跟着依赖文件路径。
1 2 3 | herbert@Lenovo:/work/code/assembly/list$ as --MD link.d link.s herbert@Lenovo:/work/code/assembly/list$ cat link.d a.out: link.s |
注意,使用--MD不影响产生输出目标文件。
通常汇编器会填充输出section到对齐边界,这会浪费空间,在内存受限的目标上这可能很有影响。--no-pad-sections选项将关闭这个行为。
这个,不用讲了,设置输出文件的路径。默认是a.out。as总是覆盖同名文件。
-R告诉as,写目标文件,好像data section在text section里面一样。这通常在最后时刻做。二进制数据是一样的,但是data section不同,他大小为0,因为所有的字节追加到了text section。
-R可能产生更小的地址偏移。
显示汇编过程中的两个统计数据:最大内存消耗和总执行时间。
1 2 3 4 5 6 7 8 9 10 11 12 | herbert@Lenovo:/work/code/assembly/list$ as link.s --statistics as: total time in assembly: 0.008000 as: data size 401408 frag chains: 0x92d100 .text 2 frags 0x92d198 .data 3 frags 0x92d230 .bss 2 frags fixups: 0 1 mini local symbols created, 0 converted |
对于一些目标,as的输出和一些已有的汇编器输出不同。这个选项让as使用传统的格式。
打印版本信息,-v打印版本,不影响正常汇编。--version打印版本,并退出。
1 2 3 4 5 6 7 8 9 10 11 | herbert@Lenovo:/work/code/assembly/list$ as -v GNU assembler version 2.26.1 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.26.1 ^C herbert@Lenovo:/work/code/assembly/list$ herbert@Lenovo:/work/code/assembly/list$ as --version GNU assembler (GNU Binutils for Ubuntu) 2.26.1 Copyright (C) 2015 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or later. This program has absolutely no warranty. This assembler was configured for a target of `x86_64-linux-gnu'. |
-W, --no-warn, 不要打印警告。
--warn,打印警告。
--fatal-warnings,警告当错误。
就是这么任性,错误也产生输出文件。有错误会打印相关警告:
n errors, m warnings, generating bad object file.