pascal 轉換成為c 語言 CPUID 讀取程式 |
尚未結案
|
manstalk
一般會員 ![]() ![]() 發表:1 回覆:1 積分:0 註冊:2003-10-23 發送簡訊給我 |
請問各位大大,該如何轉換下列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 發送簡訊給我 |
引言: 請問各位大大,該如何轉換下列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 發送簡訊給我 |
感謝大大的回覆, 我後來的作法上改為下列,只是對於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;
} 小丹尼
------
小丹尼 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |