通過cpuid指令獲取CPU Verdor ID

#cpuid.s simple program to extract the processor Vendor ID

#HOw TO complie and run

#as -o cpuid.o cpuid.s

#ld -o cpuid cpuid.o

.section .data

output:

     .ascii "The processor Vendor ID is 'xxxxxxxxxxxx'\n"

 .section .text

 .globl _start

 _start:

    movl $4, %eax

    cpuid

movl $output, %edi

movl %ebx, 28(%edi)

movl %edx, 32(%edi)

movl %ecx, 36(%edi)

movl $4, %eax

movl $1, %ebx

movl $output, %ecx

movl $42, %edx

int $0x80

movl $1, %eax

movl $0, %ebx

這段代碼的作用很簡單通過彙編指令輸出CPU Verdor ID

他是那是怎麼實現的呢?

首先在數據段(.data)中聲明瞭一個字符串:

output:

     .ascii "The processor Vendor ID is 'xxxxxxxxxxxx'\n"

字符串元素被預定義並且放在內存中,用output標示。

接下來,程序聲明瞭指令代碼和一般的起始標籤。

程序要做的第一件事是使EAX寄存器加載零值,零標示輸出CPU廠商ID,然後運行CPUID指令。

接下來:

movl $output, %edi

movl %ebx, 28(%edi)

movl %edx, 32(%edi)

movl %ecx, 36(%edi)

第一條指令創建了一個指針,output標籤的內存位置會加載到EDI中。

接下來,按照EDI指針。包含CPU ID的相關字符串的寄存器的內容被數據內存的正確位置。

後半部分是調用系統的。

movl $4, %eax #調用的系統函數

movl $1, %ebx #輸出目的地,也就是標準輸出(當前的會話終端)

movl $output, %ecx #

movl $42, %edx #字符串長度

int $0x80 #Linux內核調用

movl $1, %eax #使用退出函數

movl $0, %ebx #程序退出後,返回給shell的值


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章