AT&T与Intel汇编风格比较

转载 2014年05月20日 16:41:01

原文地址:http://oss.org.cn/kernel-book/ch02/2.6.1.htm

-----------

2.6.1 AT&T与Intel汇编语言的比较

   我们知道,Linux是Unix家族的一员,尽管Linux的历史不长,但与其相关的很多事情都发源于Unix。就Linux所使用的386汇编语言而言,它也是起源于Unix。Unix最初是为PDP-11开发的,曾先后被移植到VAX及68000系列的处理器上,这些处理器上的汇编语言都采用的是AT&T的指令格式。当Unix被移植到i386时,自然也就采用了AT&T的汇编语言格式,而不是Intel的格式。尽管这两种汇编语言在语法上有一定的差异,但所基于的硬件知识是相同的,因此,如果你非常熟悉Intel的语法格式,那么你也可以很容易地把它“移植“到AT&T来。下面我们通过对照Intel与AT&T的语法格式,以便于你把过去的知识能很快地“移植”过来。

 1.前缀

    在Intel的语法中,寄存器和和立即数都没有前缀。但是在AT&T中,寄存器前冠以“%”,而立即数前冠以“$”。在Intel的语法中,十六进制和二进制立即数后缀分别冠以“h”和“b”,而在AT&T中,十六进制立即数前冠以“0x”,表2.2给出几个相应的例子。

表2.2 Intel与AT&T前缀的区别

Intel语法

AT&T语法

         mov     eax,8

          movl   $8,%eax

         mov     ebx,0ffffh

          movl   $0xffff,%ebx

         int 80h

          int      $0x80

2. 操作数的方向

   Intel与AT&T操作数的方向正好相反。在Intel语法中,第一个操作数是目的操作数,第二个操作数源操作数。而在AT&T中,第一个数是源操作数,第二个数是目的操作数。由此可以看出,AT&T 的语法符合人们通常的阅读习惯。

例如:在Intel中, mov    eax,[ecx]

      在AT&T中,movl  (%ecx),%eax

3.内存单元操作数

   从上面的例子可以看出,内存操作数也有所不同。在Intel的语法中,基寄存器用“[]”括起来,而在AT&T中,用“()”括起来。   

例如: 在Intel中,mov    eax,[ebx+5]

       在AT&T,movl     5(%ebx),%eax

4.间接寻址方式

     与Intel的语法比较,AT&T间接寻址方式可能更晦涩难懂一些。Intel的指令格式是segreg:[base+index*scale+disp],而AT&T的格式是%segreg:disp(base,index,scale)。其中index/scale/disp/segreg全部是可选的,完全可以简化掉。如果没有指定scale而指定了index,则scale的缺省值为1。segreg段寄存器依赖于指令以及应用程序是运行在实模式还是保护模式下,在实模式下,它依赖于指令,而在保护模式下,segreg是多余的。在AT&T中,当立即数用在scale/disp中时,不应当在其前冠以“$”前缀,表2.3给出其语法及几个相应的例子。

表2.3 内存操作数的语法及举例

Intel语法

AT&T语法

指令      foo,segreg:[base+index*scale+disp]

指令       %segreg:disp(base,index,scale),foo

mov    eax,[ebx+20h]

Movl      0x20(%ebx),%eax

add     eax,[ebx+ecx*2h

Addl           (%ebx,%ecx,0x2),%eax

lea      eax,[ebx+ecx]

Leal     (%ebx,%ecx),%eax

sub     eax,[ebx+ecx*4h-20h]

Subl     -0x20(%ebx,%ecx,0x4),%eax

  从表中可以看出,AT&T的语法比较晦涩难懂,因为[base+index*scale+disp]一眼就可以看出其含义,而disp(base,index,scale)则不可能做到这点。

    这种寻址方式常常用在访问数据结构数组中某个特定元素内的一个字段,其中,base为数组的起始地址,scale为每个数组元素的大小,index为下标。如果数组元素还是一个结构,则disp为具体字段在结构中的位移。

5.操作码的后缀

在上面的例子中你可能已注意到,在AT&T的操作码后面有一个后缀,其含义就是指出操作码的大小。“l”表示长整数(32位),“w”表示字(16位),“b”表示字节(8位)。而在Intel的语法中,则要在内存单元操作数的前面加上byte ptr、 word ptr,和dword ptr,“dword”对应“long”。表2.4给出几个相应的例子。

表2.4 操作码的后缀举例

Intel语法

AT&T语法

 Mov     al,bl

 movb    %bl,%al

 Mov     ax,bx

 movw   %bx,%ax

 Mov     eax,ebx

 movl     %ebx,%eax

 Mov     eax, dword ptr [ebx]

 movl     (%ebx),%eax

 


AT&T与Intel汇编语言的比较

转自 陈莉君 一书《深入分析Linux内核源码》http://www.kerneltravel.net/kernel-book/第二章%20Linux运行的硬件基础/2.6.1.htm 2.6.1 A...
  • 21aspnet
  • 21aspnet
  • 2012-01-05 01:02:45
  • 2525

AT&T汇编指令总结

记录一下,方便以后查看~ 1.寄存器引用     引用寄存器要在寄存器号前加百分号%,如“movl %eax, %ebx”。      80386有如下寄存器:  ...
  • SKY453589103
  • SKY453589103
  • 2015-11-10 20:38:27
  • 2131

AT&T汇编语法-1

USEN...
  • hero1314uliya
  • hero1314uliya
  • 2007-05-17 23:03:00
  • 841

Linux下gdb显示intel和at&t汇编

在windows下使用习惯了intel汇编,在Linux下看的难受,在gdb下使用 set disassembly-flavor intel  转换为intel格式的汇编 set di...
  • freezing111
  • freezing111
  • 2017-04-24 11:26:54
  • 546

汇编程序员之代码风格指南

Style Guidelines for Assembly Language Programmers 汇编程序员之代码风格指南 作者:Randall Hyde   http://webs...
  • kingswb
  • kingswb
  • 2016-06-07 20:07:34
  • 1662

AT&T汇编语言语法

阅读linux0.01预备知识:为启动代码和C语言内嵌汇编做准备 0.3.1 Overview    开发一个OS,尽管绝大部分代码只需要用C/C++等高级语言就可以了,但至少和硬件相关...
  • u014160900
  • u014160900
  • 2015-04-06 10:59:29
  • 2057

AT&T汇编语言及其寻址方式简述

汇编语言早已脱离了主流编程语言的行列,可以说现在基本上没有人想用它来完成什么大的项目,但是作为一个程序员懂得汇编语言是一种修养一种底蕴。看不懂汇编的程序员就像不会画鸡蛋的达芬奇,像不会写楷书的王羲之,...
  • ZR_Lang
  • ZR_Lang
  • 2014-10-10 14:48:28
  • 2938

linux汇编工具之GAS(AT&T 语法)和NASM(Intel 语法)比较

前言:在学校时,学过的汇编是Intel语言的汇编,编译器是MASM,使用的是DOS系统。惭愧的是那时没有对汇编语言有较深入的研究,有许多问题也不慎了解,迷迷糊糊至今。最近,在看《使用开源软件-自己写操...
  • uiop78uiop78
  • uiop78uiop78
  • 2011-01-18 22:49:00
  • 2505

AT&T汇编

AT&T汇编和8086汇编语言虽然两者很相似,但是还是不能根据8086的语法规则来读AT&T汇编的吧,所以还是要看看AT&T汇编的语法规则,因为在读内核代码时,跟硬件打交道的部分代码是用AT&T汇编编...
  • bigloomy
  • bigloomy
  • 2011-07-03 13:34:01
  • 20611

AT&T风格的基础汇编程序--Hello word

为了看懂Linux内核源代码,所以不得不重新学习下汇编语言。汇编语言大体可以分为两个风格,官方的intel风格和unix系列的AT&T风格。Intel风格汇编是比较常见的,一般大学时会学习点基础的(至...
  • YuZhiHui_No1
  • YuZhiHui_No1
  • 2015-01-08 17:10:30
  • 1141
收藏助手
不良信息举报
您举报文章:AT&T与Intel汇编风格比较
举报原因:
原因补充:

(最多只允许输入30个字)