Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1582866
  • 博文数量: 157
  • 博客积分: 1776
  • 博客等级: 上尉
  • 技术积分: 1786
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-19 10:49
文章分类

全部博文(157)

文章存档

2018年(1)

2017年(12)

2015年(6)

2014年(17)

2013年(51)

2012年(65)

2011年(5)

分类: LINUX

2013-04-12 10:22:48

 

AT&T与Intel汇编的区别

在Linux内核中使用了AT&T格式的汇编指令而非Intel的格式,它们之间的区别

1. common

(1)Intel一般用大小字母,而AT&T一般用小写

(2)寄存器:AT&T的寄存器要加%前缀,而Intel不需要。

(3)立即数:AT&T的立即数要加前缀$,而Intel不需要。

AT&T: pushl $4

Intel:  PUSH 4

(4)指令的源和目标操作数顺序

AT&T: movl %ecx,%eax ;%ecx—>%eax

Intel:  MOV EAX,ECX ;ecx—>eax

(5)操作码

AT&T: “l”表示长整数(32位),"w”表示字(16位),“b”表示字节(8位)。

Intel的语法中,则要在内存单元操作数的前面加上byte ptr,word ptr和dword ptr,"dword”对应“long”。

image

(6) jmp && call && ret

 image image

 

2. 内存寻址

image

Intel语法

AT&T语法

segreg:[base+index*scale+disp]

%segreg:disp(base,index,scale)
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

 

嵌入c的汇编





1. 单条指令

image

__asm__表示是一条汇编指令。

Question: __volatile__这里表示什么意思呢?

2. 多条指令用"\n"来分隔

image

这里代码会展开成如下所示:

image

要说明一下的是1f是什么意思呢?这里f表示forward,就是向前跳转。如果是b就是backward向后跳转。


3. Quite Difficult Example

image

image

阅读(786) | 评论(0) | 转发(0) |
0

上一篇:c in Linux Kernel

下一篇:存储器寻址(part)

给主人留下些什么吧!~~