線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1327
推到 Plurk!
推到 Facebook!

pascal 轉換成為c 語言 CPUID 讀取程式

尚未結案
manstalk
一般會員


發表:1
回覆:1
積分:0
註冊:2003-10-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-24 16:07:09 IP:211.22.xxx.xxx 未訂閱
請問各位大大,該如何轉換下列pascal 成為c 語言? const ID_BIT = $200000; // EFLAGS ID bit type TCPUID = array[1..4] of Longint; TVendor = array [0..11] of char; function IsCPUID_Available : Boolean; register; function GetCPUID : TCPUID; assembler; register; 小丹尼
------
小丹尼
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-24 17:05:53 IP:218.15.xxx.xxx 未訂閱
引言: 請問各位大大,該如何轉換下列pascal 成為c 語言? const ID_BIT = $200000; // EFLAGS ID bit type TCPUID = array[1..4] of Longint; TVendor = array [0..11] of char; function IsCPUID_Available : Boolean; register; function GetCPUID : TCPUID; assembler; register; 小丹尼
参考: 【問題】如何取得cpu序號 http://delphi.ktop.com.tw/topic.php?topic_id=21218 不知是不是您所要的 摘lcsboy 前辈: 自己貼四個Edit #define cpuid dw 0xa20f DWORD CPUID1, CPUID2, CPUID3, CPUID4; String Str; asm{ pushad mov eax, 1 cpuid mov CPUID1, eax mov CPUID2, ebx mov CPUID3, ecx mov CPUID4, edx popad} Str.sprintf("%.8X", CPUID1); ED1->Text=Str; Str.sprintf("%.8X", CPUID2); ED2->Text=Str; Str.sprintf("%.8X", CPUID3); ED3->Text=Str; Str.sprintf("%.8X", CPUID4); ED4->Text=Str; ~~~行径窄处,留一步与人行~~~
manstalk
一般會員


發表:1
回覆:1
積分:0
註冊:2003-10-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-28 10:47:45 IP:211.22.xxx.xxx 未訂閱
感謝大大的回覆, 我後來的作法上改為下列,只是對於STOSD ,STOSB 的用法上,到底我該在Funtion 的參數上如何設定,才會讓STOSD 將資料儲存到正確的位置上.因為跟原來Delphi 簡潔的程式碼比較,真是不堪 void GetCPUID( int* a,int* b,int* c,int* d) { int e,f,g,h; asm { PUSH EBX //{Save affected register} PUSH EDI MOV EDI,EAX //{@Result} MOV EAX,1 DW 0xA20F //{CPUID Command} //STOSD //{CPUID[0]} //MOV EAX,EBX //STOSD //{CPUID[1]} //MOV EAX,ECX //STOSD //{CPUID[2]} //MOV EAX,EDX //STOSD //{CPUID[3]} MOV e,EAX MOV f,EBX MOV g,ECX MOV h,EDX POP EDI //{Restore registers} POP EBX } *a = e; *b = f; *c = g; *d = h; } //--------------------------------------------------------------------------- void GetCPUVendor( char* V1,char* V2, char* V3, char* V4, char* V5, char* V6, char* V7, char* V8, char* V9, char* V10, char* V11, char* V12) { char a,b,c,d,e,f,g,h,i,j,k,l; asm { PUSH EBX //{Save affected register} PUSH EDI MOV EDI,EAX //{@Result (TVendor)} MOV EAX,0 DW 0xA20F //{CPUID Command} MOV EAX,EBX XCHG EBX,ECX //{save ECX result} MOV ECX,4 @1: //STOSB MOV a,AL SHR EAX,8 MOV b,AL SHR EAX,8 MOV c,AL SHR EAX,8 MOV d,AL //LOOP @1 MOV EAX,EDX MOV ECX,4 @2: //STOSB MOV e,AL SHR EAX,8 MOV f,AL SHR EAX,8 MOV g,AL SHR EAX,8 MOV h,AL //LOOP @2 MOV EAX,EBX MOV ECX,4 @3: //STOSB MOV i,AL SHR EAX,8 MOV j,AL SHR EAX,8 MOV k,AL SHR EAX,8 MOV l,AL //LOOP @3 POP EDI //{Restore registers} POP EBX } *V1 = a; *V2 = b; *V3 = c; *V4 = d; *V5 = e; *V6 = f; *V7 = g; *V8 = h; *V9 = i; *V10 = j; *V11 = k; *V12 = l; } 小丹尼
------
小丹尼
系統時間:2024-06-28 19:30:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!