Chinaunix首页 | 论坛 | 博客
  • 博客访问: 61241
  • 博文数量: 21
  • 博客积分: 93
  • 博客等级: 民兵
  • 技术积分: 118
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-03 23:21
文章分类
文章存档

2013年(1)

2012年(15)

2011年(5)

我的朋友

分类:

2012-02-24 07:05:28

原文地址:GNU汇编器-gas 作者:lishiwen4

    GNU汇编器(称为gas,执行程序为as)是UNIX环境下最流行的汇编器。
    针对不同的硬件平台, 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 语句为
  1. movl $4, %eax
  Intel语法是
  1. mov eax, 4
* AT&T在助记符后使用一个单独的字符来使用字符来说明在操
  作中使用的数据长度
  AT&T语法中
  1. movl $test, %eax
  等价于Intel语法中
  1. mov eax, dword ptr test
* AT&T中长调用和跳转使用
  1. ljmp $section, $offset
  Intel使用
  1. jmp section:offset

阅读(1503) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~