纯汇编代码如下:

# a test program to get the processor vendor id

# data segment
.section .data
output:
.ascii "The processor Vendor id is 'xxxxxxxxxxxx'\n" # code segment
.section .text
.global _start
_start:
movl $0,%eax
cpuid
movl $output,%edi # 将output位置加载进edi
movl %ebx,28(%edi) # 将结果最低4字节,即ebx中的值放到edi+28内存位置处
movl %edx,32(%edi) # 结果中间4字节
movl %ecx,36(%edi) # 结果最高4字节 # 接下来显示信息
movl $4,%eax # 内核执行的显示函数代号
movl $1,%ebx # 要写入的文件描述符
movl $output,%ecx # 字符串的初始位置
movl $42,%edx # 字符串的长度
int $0x80 # 软件中断,执行系统调用 # 退出程序
movl $1,%eax # 退出代码
movl $0,%ebx
int $0x80

如果要用gcc编译的话,注意程序的起始处标签就不能是_start了,要改为main

反汇编cpuid.o:

在汇编中调用C函数:

.section .data
output:
# printf函数要求以空字符结尾的字符串,所以为asciz
.asciz "The processor vendor id is '%s'\n" .section .bss
# 12字节的缓冲区域
.lcomm buf,12 .section .text
.global _start
_start:
movl $0,%eax
cpuid
movl $buf,%edi
movl %ebx,(%edi)
movl %edx,4(%edi)
movl %ecx,8(%edi)
# 给printf传参数
pushl $buf
pushl $output
call printf addl $8,%esp
# 给exit传递参数
pushl $0
call exit

编译cpuid2.s时,注意下图情况:

-lc:表明要动态链接/lib/libc.so; -dynamic-linker:使用动态加载器查找libc.so

如果用gcc编译,就方便了,因为它能自动链接必需的库

AT&T汇编试讲--获取CPU Vendor ID的更多相关文章

  1. 汇编实现获取CPU信息

    这是文章最后一次更新,加入了TLB与Cache信息等资料前言:论坛上面有人不明白CPUID指令的用法,于是就萌生写这篇文章的想法,若有错误话请大侠指出,谢谢了 ^^论坛的式样貌似有问题,若式样问题导致 ...

  2. 获取CPU ID ,disk ID, MAC ID (windows ARM linux Mac)

    windows 命令行获取CPU ID,可以用ShellExecute wmic cpu get processorid ProcessorId BFEBFBFF000506E3 开源库: 查询CPU ...

  3. C++ 嵌入汇编 获取CPU信息

    #include "windows.h" #include "iostream" #include "string" using names ...

  4. C#获取CPU等硬件ID(转载)

    System.Management命名空间提供对大量管理信息和管理事件集合的访问,这些信息和事件是与根据 Windows 管理规范 (WMI) 结构对系统.设备和应用程序设置检测点有关的.应用程序和服 ...

  5. C#获取cpu序列号 硬盘ID 网卡硬地址以及操作注册表 .

    转:http://blog.csdn.net/smartsmile2012/article/details/8682295 #region 获取cpu序列号 硬盘ID 网卡硬地址 /**/ /// & ...

  6. C#获取CPU占用率、内存占用、磁盘占用、进程信息

    代码: using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading ...

  7. C# 获取CPU序列号、网卡MAC地址、硬盘序列号封装类,用于软件绑定电脑

    using System.Management; namespace GLaLa { /// <summary> /// hardware_mac 的摘要说明. /// </summ ...

  8. 获取CPU ID--查看CPU数量/核数

    Ubuntu 获取CPU序列号或者主板序列号 CPU ID 代码: sudo dmidecode -t 4 | grep ID ID: 54 06 05 00 FF FB 8B 0F 主板序列号 代码 ...

  9. 获取CPU序列号、网卡MAC地址、硬盘序列号

    <pre name="code" class="csharp"> using System; using System.Collections; u ...

随机推荐

  1. (7) 引用Objective-C class library

    原文 引用Objective-C class library 这个范例是如何在Xamarin.ios中去使用一个我们自行在Xcode中开发的Objective-c Class Library. 主要会 ...

  2. Linux下最快速共享目录的方法

    Linux下最快速共享目录的方法 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 搭建FTP,或者是搭建网络文件系统,这 ...

  3. 浅谈Web Api配合SignalR的跨域支持

    最近接手的一个项目中,涉及到一个简单的消息模块,由于之前有简单了解过SignalR,所以打算尝试着摸索摸索~! 首先,通过Nuget管理器添加Microsoft ASP.NET SignalR引用~目 ...

  4. 美国TJX公司 - MBA智库百科

    美国TJX公司 - MBA智库百科 TJX公司总部设在美国波士顿,在北美地区和许多欧洲国家开有连锁分店,仅在美国就有2500多家分店. TJX Companies, Inc. 是美国和全世界的服装和家 ...

  5. python-面向对象(二)

    面向对象总结 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例( ...

  6. UVa 10330 - Power Transmission(最大流--拆点)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  7. [置顶] Guava学习之Splitter

    Splitter:在Guava官方的解释为:Extracts non-overlapping substrings from an input string, typically by recogni ...

  8. iOS-BLE蓝牙开发

    Demo地址:WEBlueToothManager 在写这个博客之前,空余时间抽看了近一个月的文档和Demo,系统给的解释很详细,接口也比较实用,唯独有一点,对于设备 的唯一标示,网上众说纷纭,在这里 ...

  9. eclipse 中修改 M2_REPO的值

    转自: http://blog.csdn.net/xuechongyang/article/details/8267440 从eclipse中增加了maven2的插件之后,maven默认的本地库的路径 ...

  10. BroadcastReceiver自学笔记

    1. 使用步骤:  1.1 声明Intent Intent intent = new Intent("name");------静态常用 IntentFilter filter = ...