天天看點

第48部分- Linux x86 64位彙編 C++調用彙編第48部分- Linux x86 64位彙編 C++調用彙編

第48部分- Linux x86 64位彙編 C++調用彙編

C++程式中使用所有函數都使用C++樣式的命名和調用約定。

但是使用彙編函數也是使用C語言的調用約定。

但是要通知編譯器使用哪些函數是C函數,通過extern語句來完成。

示例

定義C++檔案externtest.cpp如下:

#include <iostream>

extern "C" {
   int square(int);
   float areafunc(int);
   char *cpuidfunc(void);
}


int main()
{
   int radius = 10;
   int radsquare = square(radius);
   char* cpuid = cpuidfunc();
   std::cout << "The radius squared is " << radsquare << std::endl;
   float result;
   result = areafunc(radius);
   std::cout << "The area is " << result << std::endl;
   std::cout << "The CPUID is " << cpuid << std::endl;
   return 0;
}
           

需要包含之前的3個彙編語言檔案:

square.s,areafunc.s,cpuidfunc.s

編譯指令:

g++ -o externtest externtest.cpp square.s areafunc.s  cpuidfunc.s  -no-pie

# ./externtest

The radius squared is 100

The area is 314.159

The CPUID is GenuineIntel

繼續閱讀