通过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的值


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值