在Delphi中直接对I/O端口进行操作
编号:QA000848
建立日期: 1999年4月22日 最后修改日期:2000年11月16日
所属类别:
张荣斌:
Delphi 3.0
PWindows 98
怎样在DELPHI 3.0 中直接对I/O端口进行操作,是否存在这样的控件?
回答:
用这样的函数:
//-----------------------------------------
function PortIn( PortNum: word): byte;
//-----------------------------------------
Var a : byte;
Begin
asm
mov DX, PortNum;
in AL, DX;
mov a, AL;
end; {asm}
PortIn := a;
end;
//-----------------------------------------
procedure PortOut( PortNum: word; a: byte);
//-----------------------------------------
Begin
asm
mov DX, PortNum;
mov AL, a;
out DX, AL;
end; {asm}
end;
//-----------------------------------------
function PortInW( PortNum: word): word;
//-----------------------------------------
Var a : word;
Begin
asm
mov DX, PortNum;
in AX, DX;
mov a, AX;
end; {asm}
PortInW := a;
end;
//-----------------------------------------
procedure PortOutW( PortNum: word; a: word);
//-----------------------------------------
Begin
asm
mov DX, PortNum;
mov AX, a;
out DX, AX;
end; {asm}
end;
//-----------------------------------------
function PortInL( PortNum: word): longint;
//-----------------------------------------
Var a : longint;
Begin
asm
mov DX, PortNum;
in EAX, DX;
mov a, EAX;
end; {asm}
PortInL := a;
end;
//-----------------------------------------
procedure PortOutL( PortNum: word; a: longint);
//-----------------------------------------
Begin
asm
mov DX, PortNum;
mov EAX, a;
out DX, EAX;
end; {asm}
end;
此方法只适用于Win9x,如果想用于WinNT,参考QA001296 "如何在WindowsNT/2000下用VB6写硬件IO控制"。
songyoung的意见:
该方法对某些端口的操作不能成功(如对ide端口(1f0-1f7)),所以在win95下访问端口最好还是写vxd程序。
此问题由李海回答。
| |
|
|
| |
|
|