当前位置: 首页 > news >正文

ATT 格式汇编语言语法

GNU 汇编器是 GNU 二进制实用程序 (binutils) 的一部分,也是 GNU 编译器集合的后端。尽管 as 不是编写相当大的汇编程序的首选汇编程序,但它是当代类 Unix 系统的重要组成部分,特别是对于内核级黑客攻击。 经常因其神秘的 AT&T 风格语法而受到批评,有人认为,as 的编写重点是用作 GCC 的后端,而很少关心“开发人员友好性”。 如果您是一位来自 INTEL 语法背景的汇编程序员,您将在代码可读性和代码生成方面遇到一定程度的窒息。 然而,必须指出的是,许多操作系统的代码库依赖于汇编器来生成低级代码

1.  基本格式

    AT&T 语法中的程序结构与任何其他汇编器语法类似,由一系列伪指令(directives)、标签(labels)、指令(instructions)组成——由助记符和最多三个操作数组成。 AT&T 语法中最显著的差异源于操作数的顺序(注:与intel格式汇编语法刚好相反)。

    例如:通用的基本数据移动指令,intel汇编语法是:

助记符(mnemonic)   目标操作数(destination)    源操作数(source)

而AT&T汇编语法则是:

助记符(mnemonic)   源操作数(source)     目标操作数(destination)   

对于某些人来说,这种格式更直观。以下部分描述了 X64 架构的 AT&T 汇编指令的操作数类型。

例如:

instr   source,dest
movl    (%ecx),%eax  (括号()表示取地址,相当于intel格式的[%ecx])
movb    %bl,%al
movw    %bx,%ax
movl    %ebx,%eax
movl    (%ebx),%eax

2.  寄存器

         AT&T语法要求在指令后面加上后缀表示长度,根据操作的是1字节、2字节、4字节、8字节,分别对应后缀b(byte), w(word,一个字,即16字节), l(long word,即双字), q(quad word,四字,即64字节),不加后缀默认是w。

         X64的所有寄存器都带前缀符号‘%’ ,例如,%rax,%rbx, %rcx,等等。例如:

movq %rax, %rbx  ;(movq的q指quadword,即4字,1个字16字节)

    例如:

    movl    $1,%eax

movl    $0xff,%ebx

int     $0x80

3.  文字量(literal values)

    所有文字量必须带前缀符号‘$’,例如:

movw     $100,    %bx

movb     $0x0A,   %al

注意:使用gcc 嵌入汇编译时,‘%号要使用两个‘%%’。

例如:

__asm__ __volatile__ ("movw $100, %%bx" : "=b"(a));

http://www.lryc.cn/news/204493.html

相关文章:

  • Linux系统编程学习 NO.8 ——make和Makefile、进度条程序
  • elementUI 中 date-picker 的使用的坑(vue3)
  • 1-07 React配置postcss-px-to-viewport
  • ITSource 分享 第3期【在线个人网盘】
  • 【C#进阶】C#语法中一些常用知识点总结
  • 加速开发容错量子计算应用!PsiQuantum官宣将在英国干大事
  • 使用canvas做了一个最简单的网页版画板,5分钟学会
  • 自组织映射Python实现
  • 如何避免阿里云对象储存OSS被盗刷
  • 产品研发团队协作神器!10款提效工具大盘点!
  • LSTM 与 GRU
  • 代码评审CheckList
  • [尚硅谷React笔记]——第5章 React 路由
  • 如何去掉不够优雅的IF-ELSE
  • Python中defaultdict的使用
  • 【ccc3.8】虚拟列表
  • 【23种设计模式】单一职责原则
  • DNS入门学习:什么是TTL值?如何设置合适的TTL值?
  • ilr normalize isometric log-ratio transformation
  • el表单的简单查询方法
  • 【USRP】通信总的分支有哪些
  • 关于服务器网络代理解决方案(1024)
  • Linux下 /etc/shadow内容详解
  • Go学习第二章——变量与数据类型
  • 【剑指Offer】:循环有序列表的插入(涉及链表的知识)
  • 【Django 04】Django-DRF(ModelViewSet)
  • ubuntu命令
  • C++学习之强制类型转换
  • 在Linux中,可以使用以下命令来查看进程
  • 【算法训练-动态规划 一】【应用DP问题】零钱兑换、爬楼梯、买卖股票的最佳时机I、打家劫舍