大家好 我的一个事件中内嵌了 下列一个代码 ,对某地址 赋值,(Winxp + Delphi 7 环境)
第一次 我用了
asm
mov dx, 84DH
in al, dx
or al, 00000001b
out dx, al
end;
编译可以通过,但是执行时 出现错误对话框
Debugger Exception Notification
Project Project1.exe raised exception class EPrivilege with message"Privileged instruction".Process stoped.Ues step or Run to continue.我考虑是不是 在 windows 下面就要使用32位寄存器,我把这段程序里的寄存器都换成了32位的,还是有问题,哪儿位朋友帮忙一下,多谢!
第一次 我用了
asm
mov dx, 84DH
in al, dx
or al, 00000001b
out dx, al
end;
编译可以通过,但是执行时 出现错误对话框
Debugger Exception Notification
Project Project1.exe raised exception class EPrivilege with message"Privileged instruction".Process stoped.Ues step or Run to continue.我考虑是不是 在 windows 下面就要使用32位寄存器,我把这段程序里的寄存器都换成了32位的,还是有问题,哪儿位朋友帮忙一下,多谢!
话说回来 0x84d 是什么设备的端口?in al, dx // 从84d取一个字节
or al, 00000001b // 等于 al or 0x1
out dx, al // 再写回84d端口在设备驱动中也没必要改16位为32位,这个能用,操作数大于16位时改动32位能提高效率,像这个就没改的必要
这个端口是主板 上自带的 6个 GPIO
另外可以用"Privileged instruction"这个关键字,查到一个可以让你的应用运行于特权级的程序。