操作系统学习之汇编学习1

Linux汇编程序设计环境

  1. 所用的汇编器:GNU汇编器(称为gas)
  2. 所用的连接器:ld linker

检测是否安装gas:

GNU汇编器捆绑在binutils包中,即通过检查是否安装binutils包来检测是否安装gas:

  • 基于RPM的linux版本:通过$ rpm -qa | grep binutils命令来检测
  • 基于Debian包安装器的Linux版本通过$dpkg -l | grep binutils命令来检测

使用GNU汇编器

GNU汇编器在命令行可执行程序中称为as
使用的命令行参数:

  • -a :指定输出中包含哪些清单
  • -D:包含它用于向下兼容,但是被忽略了
  • –defsym:在汇编源代码之前定义符号和值
  • -f:快速汇编,跳过注释和空白
  • –gstabs:包含每行源代码的体哦啊是信息
  • –gastabs+:包含专门的gdb调试信息
  • -I:指定搜索包含文件的目录
  • -J:不警告带符号溢出
  • -L:在符号表中保存本地符号
  • -o:指定输出目标文件的名称
  • -W:不显示警告信息

AT&T与Intel语法的主要区别

  • AT&T使用$表示立即数,而Intel的立即数不需要界定
  • AT&T在寄存器名称前加上前缀%,而Intel不用
  • AT&T语法处理源和目标操作数时使用相反的顺序,例如:把十进制值4传送到EAX寄存器:movl $4, %eax
  • AT&T在助记符后面使用一个单独的字符来引用操作中使用的数据长度,而Intel中数据长度被声明为单独的操作数。AT&T的指令 movl $test, %eax 等同于 Intel语法的 mov eax, dword ptr test
  • 长调用和跳转使用不同语法定义段和偏移值。AT&T使用ljmp $section, $offset ,Intel语法使用jmp section:offset

运行一个汇编语言程序:

$ as -o test.o test.s-----------将汇编语言程序test.s转换成目标文件test.o
$ ld -o test test.o
./test

GNU编译器—gcc

使用gcc -S test.c 可将test.c文件进行汇编,可以再通过cat test.s显示汇编程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值