|
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
- 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.
- 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).
- 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.
- 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.
- 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.
|
Leave a Reply