在Intel 64-IA32 CPU中启用/禁用/无效缓存

时间:2018-04-11 03:03:47

标签: assembly x86 inline-assembly cpu-cache

我想对我的x86 IA32 Intel CPU的缓存进行一些测试。

提到下面的文档,由于汇编编码不好和新的缓存概念,我无法进行缓存测试。

https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf

我想启用缓存,invalidate,writeback,writethrough和cache disable。

你能帮我解决一下内联C汇编代码吗?

我遇到了一些asm指令,clflush,wbinvd ...不确定何时使用以及如何使用。

另外,我如何验证缓存启用/禁用/无效/写回功能。

看到这篇文章,但似乎是x86 64bit。许多汇编指令不匹配。

enable/disable cache on intel 64bit machine: CD bit always set?

int cache_test(int opt) {

        unsigned int cr0;

        switch(opt) {
        case 0:
            __asm__ volatile(
                "pushl %%eax\n\t"
                "movl %%cr0,%%eax\n\t"
                "orl $0x60000000,%%eax\n\t"
                "movl %%eax,%%cr0\n\t"
                "movl %%cr0, %0\n\t"
                "wbinvd\n\t"
                "popl  %%eax"
                : "=r"(cr0)
                :
                :);
        printf("printf: disable cache cr0 0x%x\n", cr0);
        break;

        case 1:
            __asm__ volatile(
                "pushl %%eax\n\t"
                "movl %%cr0,%%eax\n\t"
                "andl $0x9fffffff,%%eax\n\t"
                "movl %%eax,%%cr0\n\t"
                "movl %%cr0, %0\n\t"
                "popl  %%eax"
                : "=r"(cr0)
                :
                :);
        printf("printf: enable cache; cr0 0x%x\n", cr0);
        break;

        case 2:
           __asm__ volatile(
                "pushl %%eax\n\t"
                "movl %%cr0, %%eax\n\t"
                "movl %%eax, %0\n\t"
                "popl %%eax"
                : "=r"(cr0)
                :
                :);
        printf("printf: XENMEM_show_cache_status cro value is 0x%x\n", cr0);
        return (long)cr0;
    }

        return cr0;
}

将代码移植到32位IA CPU。可以启用和禁用缓存吗?

感谢您的帮助。

0 个答案:

没有答案
相关问题