_asm
{
cli
move eax,cr0
and eax,not 10000h
mov cr0,eax
cli是清中断允许位
not 10000h是什么意思啊?非10000H吗?
------解决方案--------------------
not在这里表示按位取反,和~10000h一个意思,and eax,not 10000h就是把eax的第16位清零。
整段代码是把cr0寄存器的第16位清零。cr0的第16为是写保护位,清零则允许处理器向标记为只读属性的内存页写入数据。
------解决方案--------------------
10000h是十六进制数,第16位为1,其它为0,位取反后第16为就是0,其它位为1,与操作后(and指令),和0与的位为0,和1与的位不变,因此eax的16位会被清零。