加载中…
个人资料
行者无疆-超越
行者无疆-超越
  • 博客等级:
  • 博客积分:0
  • 博客访问:23,556
  • 关注人气:1
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

AT&T汇编格式介绍

(2014-02-13 11:24:40)
标签:

it

汇编

分类: Android中的汇编

AT&T汇编格式主要用在Unix/Linux系统中,但是国内计算机课主要是以Intel汇编为主,其实这两种汇编只是语法格式不同而已,只要知道了两者的区别,有Intel汇编基础的人能很快的看懂AT&T汇编代码。下面是两种汇编主要的区别:

1.  操作数大小

AT&T 中会在指令结尾用一个字母来表示操作数大小。其中:“b”表示byte;“w”表示word;“l ”表示long。

Intel只是在处理内存操作数时加上BYTE PTR、WORD PTR、DWORD PTR的前缀。

例如:

AT&T                     Intel

movl % eax, % ebx        mov ebx, eax

movl (% ebx), % eax      mov eax, dword ptr [ebx]

2.  操作数方向

AT&T中第一个操作数为源操作数,第二个操作数为目的操作数。

INTEL则相反,第一个是目的操作数,第二个是源操作数。

例如:

AT&T                             Intel

movl % eax, % ebx                mov ebx, eax

3.  寄存器表示法

AT&T 中使用寄存器要在名称前加‘%’号。

Intel 中则不需要。

例如:

AT&T                    Intel

movl % eax, % ebx       mov ebx, eax

4.  立即数和符号表示法

AT&T 中使用立即数和符号要在前面加‘$’号。

Intel 中则不需要。

例如:

AT&T                     Intel

movl $5, % eax           mov eax, 5

5.  寄存器间址表示法

AT&T 中用于表示地址的寄存器放在 “()”中,

Intel则放在“[]”。

例如:

AT&T                                      Intel

movl -4(ebp), % eax                       mov eax, [ebp-4]

movl array(% ebx, % eax, 4), % ecx        mov ecx, [ebx + 4*eax + array]

6.  跳转指令

AT&T 中跳转指令和子过程调用指令的操作码带有前缀“l“,分别为ljmp,lcall,lret。

例如:

AT&T                             Intel

ljump 0x400400                   jmp 0x400400

lcall 0x4003e0                   call 0x4003e0

lret                             ret

7.  长跳转指令

AT&T 中长跳转的格式和Intel有区别。

例如:

AT&T                                Intel

ljump 0x3f3e, 0x400400              jmp far 0x3f3e:0x400400

lcall 0x3f3e, 0x4003e0              call far 0x3f3e:0x4003e0

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有