Linux 下内嵌汇示例代码

qiaosym 2011-03-02

__asm__ __volatitle__GCC 为 AT&T 汇编语言指令集。

由于介绍的文档一堆不做具体说明,以下只对linux 下Fedora 13 下做具体应用解释。

 直接上代码,用g++ 编译。

// 数据交换

 void AsmSwap(int pData1, int pData2)
{

        cout << "before swap: " << endl << "pData1: " << pData1 <<endl << "pData2: " << pData2 << endl;
#if 0
        int temp;
        __asm__ __volatile__("movl %1,%0":"=r"(temp): "r"(pData1));
        __asm__ __volatile__("movl %1,%0":"=r"(pData1): "r"(pData2));
        __asm__ __volatile__("movl %1,%0":"=r"(pData2): "r"(temp));
#endif
        __asm__ __volatile__("movl %0,%%ebx"::"r"(pData1));
        __asm__ __volatile__("movl %1,%0":"=r"(pData1):"r"(pData2));
        __asm__ __volatile__("movl %%ebx,%0":"=r"(pData2):);
        cout << "after swap: " << endl << "pData1: " << pData1 << endl << "pData2: " << pData2 << endl;
}

// 加

  void AsmAdd(int m, int n)
  {
           __asm__ __volatile__("add %1,%0":"+r"(m):"r"(n));
          cout << "m+n=" << m <<endl;
  }

// 减

 void AsmSub(int m, int n)
 {
         __asm__ __volatile__("sub %1,%0":"+r"(m):"r"(n));
         cout << "m-n: " << m << endl;
 }

相关推荐