请问如何修改下列指令,使得用户能够禁用cpu缓存机制

u014627179 2014-05-05 10:58:40
#include "stdafx.h"
#include <stdio.h>
#include<string>
#include <stdio.h>
#include "excpt.h"
#include"iostream.h"
#include "windows.h"
DWORD cyc=0;
DWORD nc=0;
DWORD c=0;
DWORD d=0;
float e;
using namespace std;
int main(int argc, char* argv[])
{
_asm
{
CPUID
RDTSC
mov cyc, EAX
mov ebx,0
mov ecx,0
loop1: add ebx,ecx
inc nc
cmp nc,10
jnz loop1
CPUID
RDTSC
mov nc,0
SUB EAX, cyc
MOV cyc, EAX
mov c,eax

mov EAX, CR0
OR EAX,0x40000000
AND EAX,0xDFFFFFFF
MOV CR0,EAX
WBINVD
CPUID
RDTSC


mov cyc, EAX
mov ebx,0
mov ecx,0
loop2: add ebx,ecx
inc nc
cmp nc,10
jnz loop2
CPUID
RDTSC
SUB EAX, cyc
MOV cyc, EAX
mov d,eax
}
e=c*1.0/d;
printf("%.2f",e);
}
...全文
202 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
大熊猫侯佩 2014-06-02
  • 打赏
  • 举报
回复
如DelphiGuy所说,这段代码是特权代码,要在ring0中运行,在windows下 进入ring0的通用方法是驱动.放在驱动里执行吧,做消息分支.
ni_mamagea 2014-05-20
  • 打赏
  • 举报
回复
额。不大明白,过来围观一下,等大神出现
大熊猫侯佩 2014-05-12
  • 打赏
  • 举报
回复
在驱动中加入如上代码,然后在RING3使用消息机制使能或关闭此功能。
  • 打赏
  • 举报
回复
你的程序本身没什么问题,只是WBINVD是特权指令,而且不能工作在实模式,在保护模式下必须获得ring 0权限才可以使用。

21,499

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧