x86/x86_64 CPU控制寄存器(Control Registers)
来源:互联网 发布:北京人在纽约 知乎 编辑:程序博客网 时间:2024/05/17 01:35
x86/x86_64CPU中提供了控制寄存器,来决定CPU的操作模式和当前执行任务的属性。这些寄存器在32位模式下是32bit,在64位模式中,控制寄存器扩展为64位。
CPU架构中共有CR0、CR1、CR2、CR3、CR4、CR8共6个控制寄存器,如下图。
各个控制寄存器的作用如下:
CR0:包含当前处理器运行的控制标志。
CR1:保留。
CR2:包含发生页面错误时的线性地址。
CR3:页面目录表(Page Directory Table)的物理地址。
CR4:包含处理器扩展功能的标志位。
CR8:提供对任务优先级寄存器(Task Priority Register)的读写(仅在64位模式下存在)。
对控制寄存器的读写是通过MOV CRn指令来实现
下面代码(注意:本源码是32位系统)可用来读取CRn控制寄存器的值。、
#include <linux/proc_fs.h> static char modname[] = "cr4";static int cr4; static int my_get_info( char *buf, char **start, off_t off, int count ){ int len = 0; asm(" movl %cr4, %ebx \n movl %ebx, cr4 "); len += sprintf( buf+len, "cr4=%08X ", cr4 ); len += sprintf( buf+len, "PSE=%X ", (cr4>>4)&1 ); len += sprintf( buf+len, "PAE=%X ", (cr4>>5)&1 ); len += sprintf( buf+len, "\n" ); return len;} int init_module( void ){ printk( "<1>\nInstalling \'%s\' module\n", modname ); create_proc_info_entry( modname, 0, NULL, my_get_info ); return 0;} void cleanup_module( void ){ remove_proc_entry( modname, NULL ); printk( "<1>Removing \'%s\' module\n", modname );} MODULE_LICENSE("GPL");
- x86/x86_64 CPU控制寄存器(Control Registers)
- x86/x86_64 CPU内存管理寄存器
- x86 cpu 寄存器
- x86 cpu 寄存器 初始值
- x86 Registers
- x86 Registers
- x86的控制寄存器
- Intel x86 CPU寄存器总结
- 80x86 CPU 寄存器简介
- CPU Registers
- Smali语法:Registers(寄存器)
- Smali语法:Registers(寄存器)
- Intel X86 CPU系列的寄存器
- Intel X86 CPU系列的寄存器
- x86 CPU所有的寄存器种类
- Intel X86 CPU系列的寄存器
- Intel X86 CPU系列的寄存器
- Intel X86 CPU寄存器学习笔记
- 14-1
- [Leetcode] Combinations
- 个人C++调试问题汇总
- container_of 详解
- yum的使用全解
- x86/x86_64 CPU控制寄存器(Control Registers)
- android和linux开源社区的分裂
- .C#中的委托是什么?事件是不是一种委托?
- char *、CString和string之间的类型转换 .
- hdu+1595+删边最长最短路
- 网速成为了工作的瓶颈之一
- 苹果开发者账号购买或续费支付表单填写全记录purchase form
- 《阅读一款3D引擎的方法备忘》
- 项目自动化之道-3.按键发布Ant版