unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure outb(const port:word;const dbyte:byte);pascal;
function inb(const port:word):byte;pascal;
function receivebyte:byte;stdcall;
end;var
Form1: TForm1;implementation{$R *.dfm}
const
com1=$3f8;
com2=$2f8;
var
com:word;
function tform1.receivebyte:byte;stdcall;
var
status,res:byte;
begin
repeat
status:=inb(com+5);
until ((status and $01)=$01);
res:=inb(com);
receivebyte:=res;
end;
function tform1.inb(const port:word):byte;pascal;
begin
asm
mov dx,port
in al,dx
mov @result,al
end;
end;
procedure tform1.outb(const port:word;const dbyte:byte);pascal;
begin
asm
mov dx,port
mov al,dbyte
OUT dx,AL
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
receivebyte
end;procedure TForm1.Button2Click(Sender: TObject);
begin
com:=com1;
outb(com+3,$80);
outb(com,$18);
outb(com+1,$00);
outb(com+3,$03);
end;end.
可运行到outb这个过程时
out dx,al 总会出现‘privileged instruction’这样错误
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure outb(const port:word;const dbyte:byte);pascal;
function inb(const port:word):byte;pascal;
function receivebyte:byte;stdcall;
end;var
Form1: TForm1;implementation{$R *.dfm}
const
com1=$3f8;
com2=$2f8;
var
com:word;
function tform1.receivebyte:byte;stdcall;
var
status,res:byte;
begin
repeat
status:=inb(com+5);
until ((status and $01)=$01);
res:=inb(com);
receivebyte:=res;
end;
function tform1.inb(const port:word):byte;pascal;
begin
asm
mov dx,port
in al,dx
mov @result,al
end;
end;
procedure tform1.outb(const port:word;const dbyte:byte);pascal;
begin
asm
mov dx,port
mov al,dbyte
OUT dx,AL
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
receivebyte
end;procedure TForm1.Button2Click(Sender: TObject);
begin
com:=com1;
outb(com+3,$80);
outb(com,$18);
outb(com+1,$00);
outb(com+3,$03);
end;end.
可运行到outb这个过程时
out dx,al 总会出现‘privileged instruction’这样错误
解决方案 »
- 如何遍历切换窗口
- delphi 如何实现视频格式相互转换
- 请教问题:查询到结果后,然后按“打印”,则打印查询的结果。说详细点。谢谢!!!
- 关于delphi组件,简单问题,不过比较急!不知道今天能不能解决,帮忙啊
- DELPHI好书?
- 没人回答,给100分,你来不?在线关注!
- 新年快乐,向您请教,regsvr32 XXX.DLL时提示"loadlibrary没有XXX.DLL失败,找不到指定的模块"
- 好消息:我找到一个可以将Delphi的.DFM文件直接转换成Java的.Class文件的工具......
- 我install component时出现这个错误是怎么回事?
- InstallShield安装问题……
- 如何显示动态库中的菜单?
- 我写了一个小控件,里面有一个小属于跟Query的Fields属性很相似,我想利用那个Fields的编辑器,该怎样做?
在保护模式下和WIN2K,NT下都会有这样的问题,
如果您要用COM口,可以写成VXD,不过我不会
在win95/win98下ok若在win2k./winnt下,需借助dlport