码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • AT&T 格式汇编语言语法


    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));

  • 相关阅读:
    PaddleOCR训练部署文档
    unordered_map的4种遍历方式(C++)
    JSP ssm 零配件管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计
    PSINS工具箱学习(一)下载安装初始化、SINS-GPS组合导航仿真、习惯约定与常用变量符号、数据导入转换、绘图显示
    # Windows 环境下载 Android 12源码
    Mysql数据的用户管理
    数据类型与运算符-java
    电脑dll丢失应该怎么解决,dll文件丢失怎么恢复方法分享
    Unity中Shader光照模型Blinn-Phong原理及实现
    【MySQL】(七)SQL约束——主键约束、非空约束、唯一约束、默认值约束、外键约束
  • 原文地址:https://blog.csdn.net/ComputerInBook/article/details/133951003
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号