Chinaunix首页 | 论坛 | 博客
  • 博客访问: 520054
  • 博文数量: 96
  • 博客积分: 2102
  • 博客等级: 上尉
  • 技术积分: 1695
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:12
文章分类

全部博文(96)

文章存档

2014年(2)

2012年(94)

分类:

2012-04-14 09:16:13

为了方便、快速的运行处理器,在操作系统中提供了cache 和 寄存器 ..
 在80x86中添加4个32位的控制器,cr0 、cr1 、cr2、cr3
cr0 :
    PG                                                         ET TS  EM MP PE
    分                                                          处   任   摸   监  保
    页                                                          理   务   拟   控  护
    允                                                          器   转   协   协  允
    许                                                          扩   换   处   处  许
                                                                  展         理   理
                                                                              器   器

cr1 :      未使用
cr2 :     页故障线性地址寄存器
cr3 :     页目录机制寄存器          11 10 9 8 7 6 5 4 3 2 1 0
                                                     0    0  0 0 0 0 0 0 0 0 0 0
对于代码:如果要获取的是PG所在的那个位,要考虑你所在编译器和操作系统

点击(此处)折叠或打开

  1. #define BIT64 64
  2. static int count=1;

  3. module_param(count,int,0664);

  4. static void CR(void)
  5. {
  6.     register unsigned long res =0;
  7.     asm("mov %%cr0,%0":"=a"(res));
  8. #ifdef BIT64
  9.     printk("64\n");
  10.     printk("<0>CR0 = %lx PG = %lu PE =%lx\n",res,res& 0x80000000,res&0x1);
  11. #else
  12.     printk("<0>CR0 = %lx PG = %lu PE =%lx\n",res,res& 0x8000,res&0x1);
  13. #endif
  14.     asm("mov %%cr2,%0":"=a"(res));
  15.     printk("<0>CR2 = %lx \n",res);
  16.     asm("mov %%cr3,%0":"=a"(res));
  17.     printk("<0>CR3 = %lx \n",res);
  18. }
阅读(817) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~