Friday - May 9, 2008

Home | Site Map | Channels | Profile | Press Room | Services | Contact 

currently 9 user(s) online

search 

   Latest News

»

sony-ak.com Luncurkan Kamus Teknologi Informasi (May 27, 2006)

»

sony-ak.com Luncurkan IT Event Calendar (May 20, 2006)

»

Web Chat Berbasis AJAX dari sony-ak.com (May 09, 2006)

»

sony-ak.com Advertising Program (May 01, 2006)

»

Sony AK di Tabloid PCplus (April 18, 2006)

news archives » 


   Random Article

»

Memonitor Perubahan Windows Registry Anda dengan Registry Monitor (3380)

»

Informasi yang Berlebihan (1978)

»

Mengenal Spam - Part II: Program Anti-spam (2141)

»

Mengenal Session Initiation Protocol (SIP) (2214)

»

Tips PHP: Membuat Warna Background Row Pada Tabel Menjadi Selang Seling (2852)

   Newsletter

Join our newsletter, you will get alert about content updates

powered by Yahoo! Groups















Nedstat Basic - Free web site statistics

 
 
Mengetahui PSN (Processor Serial Number)

Author: Ario Sutomo
Published: September 20, 2005
Visits: 3317 - Category:
Borland Delphi
 
     
 

PSN merupakan suatu deretan nomor seri 96-bit yang tertera pada prosesor keluaran Intel (mulai Pentium III) untuk keperluan identifikasi. PSN bisa didapatkan dengan menggunakan instruksi CPUID (disarankan untuk membaca artikel sebelumnya yang membahas penggunaan instruksi CPUID untuk identifikasi prosesor, Anda bisa mencarinya dengan kata kunci cpuid pada situs ini).

Algoritma

  1. Untuk mendapatkannya, pertama-tama kita harus memeriksa komputer kita apakah mendukung instruksi CPUID atau tidak. Caranya yaitu dengan memeriksa bit ke-21 dari EFLAGS. Jika bit tersebut bisa diubah, berarti prosesor kita mendukung instruksi CPUID.
  2. Selanjutnya jika prosesor kita mendukung instruksi CPUID, periksa juga apakah prosesor kita memiliki fitur PSN atau tidak. Caranya dengan menjalankan instruksi CPUID dengan parameter di EAX diisi dengan nilai 1.

    MOV EAX, 1
    DW 0A20Fh //opcode CPUID


    Jika setelah dijalankan bit ke-18 pada register EDX bernilai “1”, maka prosesor kita sudah mendukung fitur PSN. Jika sebaliknya, ada dua kemungkinan: prosesor kita tidak mendukung fitur PSN atau fitur PSN tersebut dinonaktifkan (disabled).
  3. Setelah tahu prosesor kita mendukung fitur PSN, kita tinggal mendapatkan nilai PSN tersebut. Perlu diketahui bahwa PSN (96-bit) merupakan gabungan dari tiga entitas 32-bit.

    32-bit pertama (most significant bits, MSB) didapatkan dengan cara mengisi angka “1” ke register EAX dan mengeksekusi instruksi CPUID, sebagai berikut:

    MOV EAX, 1
    DW 0A20Fh //opcode CPUID


    Setelah eksekusi, register EAX berisi Processor Signature, yang tidak lain adalah 32-bit pertama dari PSN. Nilai ini perlu kita simpan terlebih dahulu ke dalam suatu variabel untuk digabungkan nantinya dengan 64-bit sisanya.
  4. 64-bit sisanya bisa didapatkan dengan cara mengisi angka “3” ke register EAX dan mengeksekusi instruksi CPUID, sebagai berikut:

    MOV EAX, 3
    DW 0A20Fh //opcode CPUID


    Setelah eksekusi, register EDX berisi 32-bit PSN yang kedua (middle bits), dan register ECX berisi 32-bit terakhir (least significant bits, LSB). Jadi, jika nilai processor signature (yang didapatkan pada langkah ke-3), EDX, dan ECX digabungkan, akan membentuk PSN 96-bit yang lengkap.
  5. PSN harus ditampilkan sebagai 6 kelompok dari 4 digit heksa (XXXX-XXXX-XXXX-XXXX-XXXX-XXXX dimana X menyatakan satu digit heksa).

Membuat Program
Buatlah project baru yang terdiri dari satu form yang didalamnya terdapat satu komponen label sebagai berikut.


Gambar 1. Rancangan form.

Ubahlah properties dari form dan komponennya tersebut berdasarkan tabel 1 berikut.

Tabel 1. Daftar properties yang harus dirubah.

Kemudian, algoritma yang sudah dijelaskan sebelumnya kita coba konversi ke dalam satu fungsi GetPSN sebagai berikut:

function TForm1.GetPSN: string;
var
  //variabel2x u/ menyimpan bagian2x PSN
  rEAX, rEDX, rECX : Cardinal;

  //variabel u/ status prosesor
  iCPUID, fPSN : byte;
begin
  asm
    //inisialisasi
    mov iCPUID, 0
    mov fPSN, 0
    mov rEAX, 0
    mov rEDX, 0
    mov rECX, 0

    //buat jaga-jaga kita "selamatkan" dulu isi register
    //untuk dikembalikan lagi setelah selesai
    push eax
    push ebp
    push ebx
    push ecx
    push edi
    push edx
    push esi

    //periksa dulu apakah prosesor mendukung instruksi CPUID
    @@Check_CPUID:
    pushfd //ambil nilai EFLAGS...
    pop eax //...simpan di register EAX
    mov ecx, eax //copy ke register ECX
    xor eax, 200000h //ubah bit ke-21
    push eax //kembalikan...
    popfd //...masukkan ke EFLAGS
    pushfd //ambil lagi EFLAGS...
    pop eax //...untuk di simpan ke register EAX
    cmp eax, ecx //bandingkan EAX dengan ECX
    je @@Selesai //jika sama...
    //...berarti tidak mendukung instruksi CPUID
    //langsung loncat ke @@Selesai
    mov iCPUID, 1 //beri tanda bahwa prosesor kita mendukung CPUID

    //jika masuk ke "zona" ini berarti prosesor mendukung CPUID
    @@InstruksiCPUID:
    mov eax, 1 //parameter 1
    dw 0A20Fh //CPUID

    and eax, 40000h //periksa bit ke-18
    cmp eax, 1 //jika bernilai 1, berarti ada PSN-nya
    jne @@Selesai //jika tidak sama dengan 1, loncat ke selesai
    mov fPSN, 1 //beri tanda bahwa prosesor kita ada PSN-nya

    //Sekarang mulai mengambil PSN "satu-persatu"
    mov eax, 1 //parameter 1
    dw 0A20Fh //CPUID
    mov rEAX, eax //masukkan 32-bit pertama ke variabel rEAX

    mov eax, 3 //parameter 3
    dw 0A20Fh //CPUID
    mov rEDX, edx //masukkan 32-bit kedua ke variabel rEDX
    mov rECX, ecx //masukkan 32-bit terakhir ke variabel rECX

    @@Selesai:
    //kembalikan isi register kepada sebelum kita menjalankan
    //prosedur ini
    pop esi
    pop edx
    pop edi
    pop ecx
    pop ebx
    pop ebp
    pop eax
  end;

  if iCPUID=0 then
    Result := 'No CPUID instruction!'
  else if fPSN=0 then
    Result := 'No PSN feature!'
  else begin
    Result := Format('%s-%s-%s-%s-%s-%s', [
    IntToHex(HiWord(rEAX),4),
    IntToHex(LoWord(rEAX),4),
    IntToHex(HiWord(rEDX),4),
    IntToHex(LoWord(rEDX),4),
    IntToHex(HiWord(rECX),4),
    IntToHex(LoWord(rECX),4)]);
  end;
end;

Selanjutnya, fungsi tersebut kita panggil melalui event OnShow pada form sebagai berikut:

procedure TForm1.FormShow(Sender: TObject);
begin
  labelPSN.Caption := GetPSN;
end;

PERLU DICATAT!!! Karena kesulitan mencari prosesor Intel Pentium yang mengaktifkan fitur PSN, sampai saat ini program tersebut belum pernah diuji coba. Namun, secara teoritis (tentunya berdasarkan dokumentasi yang ada) program di atas seharusnya sudah benar.

Tulisan ini dibuat sebagai “tanggapan” atas “kritikan” para pembeli buku saya yang berjudul Borland Delphi Win32 API, perihal tidak dijelaskannya cara-cara mendapatkan Processor Serial Number (PSN). Semoga dengan tulisan ini, bisa memuaskan para pembaca buku Borland Delphi Win32 API pada khususnya dan para pengunjung situs Sony AK Knowledge Center pada umumnya.

Jika diantara pembaca yang mencoba program di atas pada prosesor yang ada PSN-nya, mohon kesediaannya untuk mengirimkan contoh output tampilan programnya. Terima kasih.

Referensi:

  • Ario Sutomo, Borland Delphi Win32 API, Jakarta: Dinastindo, 2005.
  • Intel Processor Identification and the CPUID Instruction, Application Note 486, February 2004, Intel Corporation.

Demikian tulisan mengenai cara mengetahui processor serial number dengan menggunakan Borland Delphi. Semoga bermanfaat bagi Anda semuanya. Jika ada saran atau komentar bisa dilayangkan ke arioss@softhome.net. Untuk membaca tulisan menarik lainnya silakan menuju ke situs Sony AK Knowledge Center dengan alamat di www.sony-ak.com.

Silakan download source code lengkap dari project di atas

Terima kasih.




 Recommended articles
 

»

Contoh Koneksi Database dari ASP ke MS Access (7725)

»

Tips PHP: Mendapatkan Informasi Tanggal Saat Ini (2540)

»

Hybrid Fiber Coax (HFC), Evolusi Jaringan Koaksial Tradisional (6201)

»

Mengetahui Kecepatan Prosesor dengan Instruksi RDTSC (2775)

»

Strategi Jitu Membuat dan Memelihara Situs Berbasis Konten (2776)

 Send your comments or suggestions
Full Name :
E-mail :
Comments :
 
 

  Privacy | Site Map | Advertise

  Copyright © 2003 - 2006 Sony AK Knowledge Center - all rights reserved

  info@sony-ak.com