AT&T汇编语法简介

引用自:http://blog.csdn.net/wangshenwq/article/details/4700481

PS:这段时间在研究Linux源代码,遇到了AT&T汇编,故转贴个不错的AT&T汇编贴。

    就像软件的真谛——“给我一个标准,我用我的逻辑舞动世界”一样,AT&T 汇编是汇编语言里的另一种标准,这是相对于鼎鼎大名的intel的x86汇编来说。即使对于电子专业的学生来说,一旦掌握了c51单片机的汇编,x86的汇编也已经入门了,但x86毕竟有着强大的寄存器,在串操作指令和操作系统类指令方面,单片机还是望尘莫及的。

    下面的两段话就轻易的涉及到了关于前缀、操作数的方向、操作码的后缀这些概念的不同。关于前缀,AT&T 汇编中,寄存器前被冠以“%”,立即数前被冠以“$”,十六进制数前被冠以“0x”。所以,如果gemfield在AT&T 语境中说到386的通用寄存器时,会这样描述:8个32-bit寄存器 %eax,%ebx,%ecx,%edx,%edi,%esi,%ebp,%esp。比如:在stage1.s中,有这么一个定义,#define ABS(x) (x-_start+0x7c00),那么你就会知到0x7c00是个十六进制数(_start函数的入口地址就位于内存的0x7c00处)。

    而在设置int 0x13的0x42功能号时,它是这么说的:movb $0x42,%ah 。这句告诉了我们一些不同之处:首先,操作码的后缀l表示的是操作码的大小,l是长整数32位,那么相应的,movw是16位,movb是8位;其次,立即数是用$前缀来表示的,就像$0x42;再次,寄存器的名字是有%前缀的,像例子中的%ah;最后,操作数的方向有点不一样,比如把立即数$0x42放到寄存器%ah中,用的是movb $0x42,%ah,也即源操作数在前,目的操作数在后。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值