首页
社区
课程
招聘
[求助]求人帮忙把汇编语言程序翻译成C或者C++
发表于: 2009-6-17 14:32 9747

[求助]求人帮忙把汇编语言程序翻译成C或者C++

2009-6-17 14:32
9747
求人帮忙把汇编语言程序翻译成C或者C++,这个程序的功能是获取CPU的唯一标识符!
CString GetCpuId()//获取CPU唯一标识符
{
        CString   CPUID;   
   
        unsigned   long   s1,s2;   
        unsigned   char   vendor_id[]="------------";   
        char   sel;   
        sel='1';   
        CString   VernderID;   
        CString   MyCpuID,CPUID1,CPUID2;   
        switch(sel)   
        {   
        case   '1':   
                __asm{   
                        xor   eax,eax   
                                cpuid   
                                mov   dword   ptr   vendor_id,ebx   
                                mov   dword   ptr   vendor_id[+4],edx   
                                mov   dword   ptr   vendor_id[+8],ecx   
                }   
                VernderID.Format("%s-",vendor_id);   
                __asm{   
                        mov   eax,01h   
                                xor   edx,edx   
                                cpuid   
                                mov   s1,edx   
                                mov   s2,eax   
                }   
                CPUID1.Format("%08X%08X",s1,s2);   
                __asm{   
                        mov   eax,03h   
                                xor   ecx,ecx   
                                xor   edx,edx   
                                cpuid   
                                mov   s1,edx   
                                mov   s2,ecx   
                }   
                CPUID2.Format("%08X%08X",s1,s2);   
                break;   
        case   '2':   
                {   
                        __asm{   
                                mov   ecx,119h   
                                        rdmsr   
                                        or   eax,00200000h   
                                        wrmsr   
                        }   
                }   
                AfxMessageBox("CPU   id   is   disabled.");   
                break;   
        }   
        MyCpuID   =   CPUID1+CPUID2;   
        CPUID   =   MyCpuID;   
        return CPUID;
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 44
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这不就是C++吗
2009-6-17 14:41
0
雪    币: 256
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你贴出来的就是VC的代码了,还翻译什么?
2009-6-17 14:46
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不是中间不是有用汇编写的么,我想全部弄成VC的!!比如说中间的汇编指令改成C的指令!!
2009-6-17 15:37
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
study.
2009-6-17 15:45
0
雪    币: 178
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
我是来看楼主被围观的~
建议楼主好好查查cpuid   这个指令
2009-6-17 16:18
0
雪    币: 247
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
围观楼主
能用c的话还用内嵌汇编干嘛
2009-6-17 17:32
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
还是不懂啊,懂的帮帮忙啊,我想用这个啊!谢谢了,“第八个门”你说的cpuid这是什么意思!我真的不懂啊!郁闷中!
2009-6-17 18:50
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
网上看了下,貌视只能这样用的哈,攻取CPU的信息只能用这个指令么。想能问下还有其它方法获取CPU的唯一标识符么?
2009-6-17 18:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼上的各位大大,不要围观偷笑呵。没学习过汇编对这些只能在汇编级别解决问题的东东是很少理解的。
2009-6-18 15:24
0
雪    币: 410
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
俺只围观不偷笑
不会不是问题,不知者不罪,谁都有这个阶段
如果你用了别人的成果,但是你自己也掌握了,这是学习
如果你用了别人的成果,但是你还是不会,那就是抄袭了
2009-6-19 22:39
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
LS,说的是!
2009-6-20 17:23
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
估计能用C/C++实现出来的比你理解的更要难。。
2009-6-20 17:49
0
雪    币: 193
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
CString GetCpuId()//获取CPU唯一标识符
{
  CString   CPUID;   
   
  unsigned   long   s1,s2;   
  unsigned   char   vendor_id[]="------------";   
  char   sel;   
  sel='1';   
  CString   VernderID;   
  CString   MyCpuID,CPUID1,CPUID2;   
  switch(sel)   
  {   
  case   '1':   
//获取CPU制造厂商名称字串,intel是"GenuineIntel",AMD是"AuthenticAMD"
    __asm{   
      xor   eax,eax   
        cpuid   
        mov   dword   ptr   vendor_id,ebx   
        mov   dword   ptr   vendor_id[+4],edx   
        mov   dword   ptr   vendor_id[+8],ecx   
    }   
    VernderID.Format("%s-",vendor_id);
//eax的返回值表示CPU的系列,类型和工艺制程
//edx的返回值表示CPU的一些特性标志值  
    __asm{   
      mov   eax,01h   
        xor   edx,edx   
        cpuid   
        mov   s1,edx   
        mov   s2,eax   
    }   
    CPUID1.Format("%08X%08X",s1,s2);  
//获取96位处理器序列号的低64位(只有低64位才是不同的),貌似就P3才有的(我获取的都是0).ecx是0-31位,edx是32-63位。
//需通过如下方式先判断是否支持处理器序列号
/*
mov eax,1
CPUID
shr edx,18
test edx,01h
jz unsupport
support
*/
    __asm{   
      mov   eax,03h   
        xor   ecx,ecx   
        xor   edx,edx   
        cpuid   
        mov   s1,edx   
        mov   s2,ecx   
    }   
    CPUID2.Format("%08X%08X",s1,s2);   
    break;
//关闭处理器序列号支持,重启恢复
//rdmsr和wrmsr是特权指令,需要在ring0下才可以吧  
  case   '2':   
    {   
      __asm{   
        mov   ecx,119h   
          rdmsr   
          or   eax,00200000h   
          wrmsr   
      }   
    }   
    AfxMessageBox("CPU   id   is   disabled.");   
    break;   
  }   
  MyCpuID   =   CPUID1+CPUID2;   
  CPUID   =   MyCpuID;   
  return CPUID;
}
2009-6-23 08:31
0
雪    币: 225
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
估计是向各位把嵌入的汇编代码。翻译成c++吧
2009-7-12 18:28
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
你需要实现的功能 C/C++无法实现
只能通过强大的汇编语言去实现
2009-7-12 23:40
0
雪    币: 264
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
17
CPUID必须汇编..
2009-7-12 23:53
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
可以不用汇编,直接把机器码写到内存中,调用取返回值,只是更加难懂。
2009-7-13 09:07
0
游客
登录 | 注册 方可回帖
返回
//