首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>系统管理>内核技术>正文

Linux发行版知识普及:三个版本的CPUID

http://www.oklinux.cn  2008-01-31  来源: 赛迪网 korn  会员收藏  游客收藏  【 】 

第一个版本

x86-ubuntu-64位环境,at&t格式(gas汇编),使用linux系统调用:

#cpuid.s show extract the processor vendor ID
.section .data
output:
.ascii "the processor vendor ID is 'XXXXXXXXXXXX'\n"
.section .text
.globl main
main:
movl $0, 陎
cpuid
movl $output, 韎
movl 離, 28(韎)
movl 韝, 32(韎)
movl 靫, 36(韎)
movl $4, 陎
movl $1, 離
movl $output, 靫
movl $42, 韝
int $0x80
movl $1, 陎
movl $0, 離
int $0x80

第二个版本

x86-ubuntu-64位环境,at&t格式(gas汇编),使用C库函数,注意使用了64位寄存器,想改成32位只要把所有带r的改成带e的就可以了

# cpuidinlib.s show extract the processor vendor ID using library
.section .data
output:
.asciz "the processor vendor ID is %s\n"

.section .bss
.lcomm buffer, 12

.section .text
.globl _start
_start:
movq $0, %rax
cpuid
movq $buffer, %rdi
movl 離, (%rdi)
movl 韝, 4(%rdi)
movl 靫, 8(%rdi)

movq $output, %rdi
movq $buffer, %rsi
xorq %rax, %rax
call printf
movq $0, %rdi
xorq %rax, %rax
call exit
不过上面有一个问题
printf("%s", str);

这样的形式不常见,既然是字符串, str应该是以0结束的,但是注意上面并没有以0结束,那么printf是怎么判断字符串结束了呢? 在C下一样成功,不知道为什么,知道的告诉我下。

第三个 x86-win32,使用intel语法(masm32开发包), 调用windows API.这个估计都熟悉

;; cpuid
.686
.model flat, stdcall
option casemap: none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
includelib msvcrt.lib
sprintf PROTO C:DWORD, :DWORD, :VARARG

.data
msg db 'the processor vendor ID is %s', 0
note db '注意', 0
.data?
result db 13 dup(?)
buff db 128 dup(?)
.code
start:
call go
invoke ExitProcess,NULL
go:
mov eax, 0
cpuid
mov edi, offset result
mov [edi], ebx
mov 4[edi], edx
mov 8[edi], ecx
mov byte ptr 12[edi], 0

push dword ptr offset result
push dword ptr offset msg
push dword ptr offset buff
;call sprintf 
mov eax, 77c0f931H
call eax
add esp, 12

invoke MessageBox, NULL, addr buff, addr note, MB_OK
ret
end start


上一篇:中文输入法与xubuntu的xfce4-panel冲突   下一篇:升级Linux内核的一般步骤方法


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·升级Linux内核的一般步骤方法
·编译安装Virtualbox驱动模块
·Fedora 8 Linux系统的内核配置注意事项
· Linux系统的内核解读入门
·新手学堂 Linux系统的内核解读入门
·Linux系统内核中网络参数的意义及其应用 (1)
·走向Linux系统高手之路 内核编译过程解析
·Linux系统中安装内核的方法详细介绍
·Linux内核更新:Linux Kernel 2.6.22.7
·Linux系统下 内核模块开发详细解析
·在Ubuntu 7.10下 编译使用新内核的方法
·Linux系统线程同步:互斥量(mutex)
·几个重要的Linux系统 内核文件介绍
·业界评论:Linux内核有待提高的七个领域
·Linux2.6内核和Linux2.4内核有什么不同?
·一种解读Linux系统内核源码的好方法 (1)
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·系统编译:如何给Make命令来传递参数
·Linux 2.6内核中sysfs文件系统简单概述
·Fedora 8 Linux系统的内核配置注意事项
·升级Linux内核的一般步骤方法
·编译安装Virtualbox驱动模块
· Linux系统的内核解读入门
·新手学堂 Linux系统的内核解读入门
·Linux系统内核中网络参数的意义及其应
·走向Linux系统高手之路 内核编译过程解
·Linux系统中安装内核的方法详细介绍
·Linux内核更新:Linux Kernel 2.6.22.7
·Linux系统下 内核模块开发详细解析
  阅读排行
· 深入理解LINUX内核中文版下载地址
·基于S3C44B0微处理器的uClinux内核引导
·Kernel command using Linux system ca
·Linux 2.6内核如何武装Fedora Core 2
·Process priority and control on AIX
·Linux操作系统的内核编译内幕详解
·推荐:Linux用户态与内核态的交互
·通过振动向Linux ThinkPad传输信息
·Linux操作系统源代码详细分析(二)
·Linux系统内核接收以太帧的处理程序
·主流嵌入式Linux系统下GUI解决方案
·Linux and symmetric multiprocessing
·揭秘Linux内核调试器之内幕
·用命令行加挂Linux的文件系统简介
·Linux内核和核心OS组件的测试与分析
网摘收藏: