端口地址如何写?(100分)

  • 主题发起人 主题发起人 wsd
  • 开始时间 开始时间
W

wsd

Unregistered / Unconfirmed
GUEST, unregistred user!
implementation
有一个自定义函数INP,用来读取端口状态:
{$R *.DFM}
function inp(portadr:word):word;
begin
asm
push ax
push dx
mov dx,portadr
in ax,dx
mov @result,ax
pop dx
pop ax
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.text:=FloatToStr(inp(3f8));
end;
串口中有一个的地址是3f8,用edit1.text:=FloatToStr(inp(3f8));来读取
端口值,编译时出错,为什麽?word类型究竟如何使用?
 
32位Windows下一般不能直接对端口进行操作。
你可以试一下TVicHw32这个控件,可对端口及物理地址进行操作。
 
function inp(portadr:word):Byte;assembler;
asm
push dx
mov dx,portadr
in al,dx
pop dx
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.text:=IntToStr(inp($3f8));
end;
 
Hexi,你好,在你的程序里运行时出现下列错误提示:
privileged instruction.
这是为什麽?
 
此程序只能在windows 9x中运行,无法在nt上执行。
 
'此程序只能在windows 9x中运行,无法在nt上执行'
why?
 
nt下不能对I/O口直接进行读写。这是nt的稳定性比9x要好的一个原因, 也是比9x要慢的原因之一。
 
HEXI,你好。非常高兴得到你的帮助。
如你所说,‘nt下不能对I/O口直接进行读写’,那麽在WINNT下使用DELPHI
,就无法使用DELPHI中嵌入汇编的功能,是这样的吗?
你这里的I/O口是不是只是计算机的串,并口?如果对非串,并口的地址读取时
是可以的呢?
请赐教!
 
Delphi在NT中可以嵌入汇编,但不能使用In, Out等对io口读写的指令。
IO口不是串口和并口。
对串口操作可以调用windows API函数,你可以在很多地方找到串口控件。
对并口操作可以传输数据但不能对并口的各个针单独操作。(我不是很清楚)

反正在windows NT中你就不要用In,Out等io读写指令。
若你必须对端口读写,只能使用虚拟设备驱动程序。至于这方面我无能为力了,你
可以找一个TVich32的控件,它本身带有虚拟设备驱动程序,支持nt和9x,每次运行是
要弹出一个对话框。
 
to Hexi:
TVich32在哪里找,我也想要,
"每次运行是要弹出一个对话框",是否会有版权问题?
 
TVich32支持中断和IO读写,我一时找不到,找了个
TDLPortIO for D3, D4可以读写IO但无中断功能。是Freeware, 但里面的虚拟设备驱动程序
可不是Freeware.
Crane:我以发了一个给你。
 
多人接受答案了。
 
I/O端口的操作
 

Similar threads

后退
顶部