针对不同的硬件平台, as的命令行参数有所不同,下面列出几个通用的参数
-a 指定输出中包含哪些清单
--defsym 在汇编源代码之前定义符号和值
-f 快速汇编,跳过注释和空白
--gstabs 包含每行源代码的调试信息
--gstabs+ 包含专门的gdb调试信息
-I 指定包含的头文件的搜索路径
-J 不警告带符号数溢出
-L 在符号表中保存本地符号
-o 指定输出目标文件的名称
-R 把数据段合并进代码段
--statistics 显示汇编使用的最大空间和总时间
-v 显示as版本信息
-W 不显示警告信息
-- 以标准输入作为源文件
gas实现了AT&T操作码语法,Itel和AT&T语法的主要区别如下:* AT&T使用 $ 表示操作数,如 $123, $519,而Intel的
立即数不需要定界
* AT&T在将寄存器名称前加上前缀%,而Intel不需要这样做
* AT&T语法在处理源操作数和目标操作数时使用想法的顺序,
例如,将立即数4传送到EAX寄存器,
AT&T 语句为
- movl $4, %eax
Intel语法是* AT&T在助记符后使用一个单独的字符来使用字符来说明在操
- mov eax, 4
作中使用的数据长度
AT&T语法中等价于Intel语法中
- movl $test, %eax
* AT&T中长调用和跳转使用
- mov eax, dword ptr test
Intel使用
- ljmp $section, $offset
- jmp section:offset