相关疑难解决方法(0)

如何从程序中访问控制寄存器cr0,cr2,cr3?获得分段错误

我编写了一个程序,试图读取和写入控制寄存器.

程序编译很好,但是当即将执行内联汇编时,它会产生分段错误.

码:

void instructions(int val)
{
    int i;
    int value;
    for(i = 0; i < val; i++)
         __asm__("mov %cr0, %eax");
}
Run Code Online (Sandbox Code Playgroud)

我使用了GDB并逐步完成了每个装配线,并且mov %cr0,%eax正在发生分段故障.

谁知道什么是错的?

x86 inline-assembly cpu-registers

10
推荐指数
1
解决办法
1万
查看次数

禁用L2/L1缓存

我试图禁用我的CPU的内部和外部内存缓存,我的配置如上:-DELL Precision WorkStation -Intel Core 2 Duo E6550 2.33 GHz -Ubuntu 8.10

我试图通过BIOS禁用它,但它发现DELL计算机不允许用户访问缓存内存,我发现另一种方式,它是禁用缓存programmaticaly,英特尔架构手册A.3表明cr0注册可以通过设置位30设置为禁用缓存,我写了上面的代码然后:

INVD

mov eax,cr0

mov eax,40000000H;设置位30

mov cr0,eax

程序编译成功,但是当我尝试运行exe文件时,它就是Seg Faults(我正在使用NASM)

有人可以帮帮我吗?

ubuntu nasm

4
推荐指数
2
解决办法
4701
查看次数

标签 统计

cpu-registers ×1

inline-assembly ×1

nasm ×1

ubuntu ×1

x86 ×1