AT&T语法

在linux内核编写中, 为了维持与gcc输出汇编程序的兼容性, as汇编器使用AT&T系统的V的汇编语法(下面简称为AT&T语法). 这种语法与Intel汇编程序使用的语法(简称Intel语法)很不一样, 他们之间的主要区别有以下几点:

  1. AT&T语法中立即操作数前面要加一个字符"$";寄存器操作数名前要加字符百分号"%", 绝对跳转/调用(相对于与程序计数器有关的跳转/调用)操作数前面要加"*". 而Intel汇编语法没有这些限制
  2. AT$T语法与Intel语法使用的源和目的操作数次序正好相反. AT&T的源和目的操作数是从左到右, “源, 目的”
  3. AT&T语法中内存操作数的长度(宽度)由操作码最后一个字符来确定. 操作码后缀b, w和l分别指示内存引用宽度为8位字节(byte), 16位字(word)和32位长字(long). Intel语法则通过在内存操作数前使用前缀byte ptr, word ptr和dword ptr来达到同样的目的. 因此, Intel的语句mov al, byte ptr foo对应于AT&T的语句movb $foo, %al.
  4. AT&T语法中立即形式的远跳转和远调用为ljmp/lcall $section, $offset, 而Intel的是jmp/call far section:offset. 同样, AT&T语法中远返回指令lret $stack-adjust对应Intel的ret far stack-adjust
  5. AT&T汇编器不提供对多代码段程序的支持, UNIX类操作系统要求所有代码在一个段中
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值