+ -
当前位置:首页 → 问答吧 → [求助]Linux下 关于gcc嵌入汇编,函数无法传出char指针的问题

[求助]Linux下 关于gcc嵌入汇编,函数无法传出char指针的问题

时间:2010-09-01

来源:互联网

本帖最后由 alsjia 于 2010-09-01 17:48 编辑

各位大虾!
本人为菜鸟。帮忙看下代码,就是死活传不出char指针。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //#include <mntent.h>
  4. #include <string.h>
  5. //#include <sys/vfs.h>
  6. #include <unistd.h>

  7. int GetCpuVendor(char *vendor_) {
  8.         long  vEBX, vECX, vEDX;
  9.         int veax = 0x0;
  10.         if(NULL == vendor_) {
  11.                 perror("GetCpuVendor");
  12.                 return -1;
  13.         }
  14. #ifdef _WIN32
  15.         __asm{                                                // 汇编。
  16.                 mov eax, veax
  17.         cpuid
  18.                 mov vEBX, ebx
  19.                 mov vECX, ecx
  20.                 mov vEDX, edx
  21.         }
  22. #else
  23.         __asm__ __volatile__ ("pusha\n\t"
  24.                        ::"a"(veax)
  25.     );
  26.         __asm__ __volatile__("cpuid\n\t"
  27.   :"=b"(vEBX), "=c"(vECX), "=d"(vEDX)
  28.   :);
  29. #endif
  30.         memcpy(vendor_, (char *) &vEBX, sizeof(vEBX));
  31.         memcpy(vendor_ + 4, (char *) &vEDX, sizeof(vEDX));
  32.         memcpy(vendor_ + 8, (char *) &vECX, sizeof(vECX));
  33.         return 0;
  34. }

  35. int main()
  36. {
  37.     char vendor[32];
  38.     bzero(vendor, sizeof(vendor));
  39.     GetCpuVendor((char *)&vendor);
  40.     printf("%s", vendor);
  41.     return 0;
  42. }
复制代码

作者: alsjia   发布时间: 2010-09-01

大虾们,帮帮忙吧,我都整一天了,用code::blocks查看内存,vender_下是有值的。VC下是_WIN32部分是可以的。

作者: alsjia   发布时间: 2010-09-01

相关阅读 更多

热门下载

更多