`
spartan1
  • 浏览: 365151 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

gcc嵌入汇编语法

 
阅读更多

以前学gcc嵌入汇编时的一些笔记,看一下对gcc的嵌入汇编比较有用处:

 

1· 格式:
asm ( "以回车或分号分隔的汇编指令" : 以逗号分隔的输出操作数 : 以逗号分隔的输入操作数 : 以逗号分隔的受影响的寄存器或内存 )

 

2·输出操作数表示汇编指令执行结果,输入操作数表示汇编指令执行时的输入值;

 

3·每个输出和输入操作数都是分为两部分:“限定符” (C表达式),其中输出操作数的限定符必须包含等号(=)

 

4·如果限定符表示一个寄存器,则对于输入操作数,在生成第一部分的汇编指令之前,会先生成将C表达式的值生成到指定的寄存器的汇编指令;对于输出操作数,在生成第一部分的汇编指令后,会生成将指定寄存器中的值移到C表达式的指令,所以输出操作数中的C表达式必须都是左值(lvalue)。

 

5·所有操作数从头到尾顺序排列,在汇编指令中以“%编号”引用,其中编号从0开始,依次递增。

 

6·引用时引用的是限定符所指定的东西,比如限定符指定的是寄存器,则引用的是寄存器;指定的是变量,则引用的是变量的内存地址。

 

7·asm也可以是__asm__。

 

8·汇编指令中的寄存器前需要添加%%前缀,如%%edi。如果没有输入输出部分,可以只有一个%前缀,如%eax

 

9·有如下常用限定符:r:通用寄存器,m:内存地址,a:eax,b:ebx,c:ecx,d:edx,S:esi,D:edi,q:a/b/c/d,i:立即数,o:可以加一个偏移的内存地址,g:前面所有这些,0~n:指定使用和第n个操作数相同的限定符

举例:
asm("mov %2, %%eax\n\t"
    "mov %%eax, %%ecx\n\t"
    "inc %%eax\n\t"
    "mov %%eax, %1",
    : "=c" (old_value), "=m" (inced_value)
    : "D" (input_value)
   );

如果input_value位于0x8(%ebp)(第一个参数), inced_value位于-8(%ebp)(第二个局部变量),old_value位于-4(%ebp)(第一个局部变量),则生成的代码大概如下:

    mov 8(%ebp), %edi
    mov %edi, %eax
    mov %eax, %ecx
    inc %eax
    mov %eax, -8(%ebp)
    mov %ecx, -4(%ebp)

分享到:
评论

相关推荐

    GCC内联汇编入门[参照].pdf

    GCC内联汇编是一种强大的编程技术,可以帮助开发者在C语言中嵌入汇编代码,从而提高程序的执行效率和性能。GCC内联汇编可以分为基本内联汇编和扩展内联汇编两种形式,前者只允许使用汇编语法,后者则可以使用更多的...

    GCC内联汇编基础.pdf

    **GCC内联汇编**是一种特殊的编程技术,允许开发人员在C/C++程序中直接嵌入汇编语言指令。这种方式有助于实现高性能的代码片段或访问特定硬件功能,而无需离开高级语言环境。GCC(GNU Compiler Collection)提供了...

    GCC内联汇编入门(中文版)

    GCC内联汇编是GCC编译器提供的一种功能强大的特性,它允许开发者在C语言中嵌入汇编代码,从而提高程序的执行效率和性能。本文将详细介绍GCC内联汇编的使用方法和原理。 GCC内联汇编的基本概念 GCC内联汇编是一种...

    AT&T汇编语言与GCC内嵌汇编简介[定义].pdf

    GCC 内嵌汇编是指在高级语言(如 C、C++)中嵌入汇编语言的代码,以提高程序的执行效率。在本文中,我们将对 AT&T 汇编语言与 GCC 内嵌汇编进行简介,介绍它们的语法和使用方法。 1. AT&T 汇编语言语法 AT&T 汇编...

    gcc中的内嵌汇编语言

    另一种是通过gcc的内嵌汇编语法asm,将汇编代码嵌入到C语言程序中。后者是本文介绍的重点。 内嵌汇编的语法格式基于Intel的汇编语言风格,但也有一些显著的区别。在AT&T格式的汇编语言中,立即操作数前需要加上'$'...

    AT&T汇编语言与GCC内嵌汇编简介.pdf

    GCC内嵌汇编是GCC编译器提供的一种特殊功能,它允许用户在C/C++源代码中直接嵌入汇编代码。通过这种方式,程序员可以在保持高级语言编程的同时,利用低级汇编语言的优势来优化关键部分的代码。 ##### 2.2 内嵌汇编...

    AT&T汇编语言与GCC内嵌汇编简介

    GCC内嵌汇编语法主要包括以下几个部分: - **汇编语句模板**:定义了具体的汇编指令。 - **输出部分**:指定了哪些操作数会被修改。 - **输入部分**:指定了哪些操作数是只读的。 - **限制字符**:用来限定操作数...

    GCC内联汇编, PDF 格式

    **GCC内联汇编**是一种特殊的编程技术,允许开发人员在C/C++程序中直接嵌入汇编代码片段。这种方式有助于实现高性能的系统级编程,特别是在需要精确控制硬件资源的情况下。 #### 二、GCC内联汇编的基础概念 ##### ...

    GCC内嵌汇编.pdf

    GCC内嵌汇编是指在C语言中嵌入汇编程序片断,以实现特定的功能。这种技术可以提高程序的执行效率和灵活性。在本文中,我们将详细介绍GCC内嵌汇编的基本概念、语法和使用方法。 1. 基本概念 在GCC内嵌汇编中, ...

    cpp-ARMGCC内联汇编参考手册中文版

    这份“cpp-ARMGCC内联汇编参考手册中文版”将帮助读者深入理解ARM GCC内联汇编的使用方法和技巧,包括各种约束、寄存器的管理以及如何在C/C++程序中安全地嵌入汇编代码。通过学习这份手册,开发者将能够更有效地利用...

    gcc内联汇编手册

    内联汇编允许开发者在C/C++程序中嵌入汇编代码,从而实现更底层的操作,比如优化性能或访问特定硬件功能。为了更好地理解本指南,读者需具备基本的x86汇编语言知识和C语言基础。 #### 三、GCC汇编器语法 GCC支持...

    AT&T汇编语言和gcc内嵌汇编

    AT&T汇编语言起源于Unix系统的历史背景,它和Intel汇编语言存在格式上的差异。Unix最初为PDP-11开发,后来移植到VAX和68000系列...使用GCC内嵌汇编时,需要遵循特定的语法规范,确保汇编代码能够与C代码正确交互。

    GCC内联汇编基础 V2 (修改版)

    本文将详细介绍GCC内联汇编的基本概念、AT&T与Intel汇编语法的区别,并通过示例帮助读者理解如何在C语言中嵌入汇编代码。 #### 二、内联汇编概述 内联汇编是指在C/C++等高级语言中直接插入汇编代码的能力。它允许...

    gcc内嵌汇编 中文使用说明

    GCC提供了强大的扩展能力,其中之一便是支持在C语言中嵌入汇编代码的能力,即所谓的“内嵌汇编”。这项特性允许开发者直接在C代码中编写汇编指令,从而实现更底层的控制或者优化性能。 #### 二、gcc内嵌汇编的基本...

    GCC 内联汇编

    GCC提供了内嵌汇编的功能,允许在C代码中直接嵌入汇编语言语句。这在实现特定架构优化或对性能有极高要求的应用场景中非常有用。 **示例**: ```c __asm__ __volatile__("hlt"); ``` 这里,“__asm__”关键字指示...

Global site tag (gtag.js) - Google Analytics