通過cpuid指令獲取CPU Verdor ID

2021-06-25 20:28:14 字數 1345 閱讀 1495

#cpuid.s ****** 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 '************'\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 '************'\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的值

CPUID指令簡單呼叫

關於cpuid指令,可以看維基百科的相關介紹 在windows下可以呼叫 cpuid和 cpuidex這兩個函式,cpuid函式在vs2005中就已經開始支援了。下面是簡單的呼叫 在windows下vs不支援x64專案嵌入asm,所以只能編譯32位版本。include include gcc cpu...

CPUID與Cache資訊的獲取

cpuid與cache資訊的獲取 上週一位同事問道getconf與sysconf 在xeon e5620機器上獲取的cache相關資訊為全0的問題。通過分析glibc中sysconf 的實現,現已查明。在我們的環境中,glibc的版本為2.5。而實現sysconf 函式時,採用了cpuid指令。但是...

Linux下獲取CPUID 硬碟序列

linux下獲取cpuid 硬碟序列號與mac位址 woonjoon 按照網上提供的說明,cpuid並不是所有的intel cpu都支援的。如果支援,彙編呼叫為 eax置0000 0003,呼叫cpuid。以下為實現 在我的cpu上,並沒有得到 define cpuid in,a,b,c,d asm...