在DELPHI2.0/3.0中直接操作端口
borland delphi2.0/3.0以其强大的功能及方便快捷的程序设计而为广大程序员所喜爱。但是在用它来编写工业控制程序时,需要对
计算机所连接的外部设备进行操作,即直接对i/o地址进行读写操作,
这时该软件就显得有些美中不足了。
针对这一问题,笔者使用delphi 2.0/3.0以内嵌汇编的方式编写
了一个模块port95. pas,可方便地实现直接对i/o地址的读写操作,代
码简捷且执行速度较快。
使用时只要将port95.pas加到工程文件中,并在users中加上port
95,就可以在应用程序中直接对i/o端口进行操作。
具体的实现方法及port95.pas的源代码如下:
unit port95;
interface
function portreadbyte(addr:word) : byte;
function portreadword(addr:word) : word;
function portreadwordls(addr:word) : word;
procedure portwritebyte(addr:word; value:byte);
procedure portwriteword(addr:word; value:word);
procedure portwritewordls(addr:word; value:word);
implementation
{*
* port read byte function
*parameter:port address
*return: byte value from given port
*}
function portreadbyte(addr:word) : byte; assembler; regi
ster;
asm
mov dx,ax
in al,dx
end;
{*
* high speed port read word function
* parameter: port address
* return: word value from given port
* comment:may problem with some cards and computers that
cant to access whole word, usualy it works.
*}
function portreadword(addr:word) : word; assembler; regi
ster;
asm
mov dx,ax
in ax,dx
end;
{*
* low speed port read word function
* parameter: port address
*return:word value from given port
*comment:work in cases,only to adjust delay if need
*}
function portreadwordls(addr:word) : word; assembler; re
gister;
const
delay = 150;
// depending of cpu speed and cards speed
asm
mov dx,ax
in al,dx
//read lsb port
mov ecx,delay
@1:
loop @1 //delay between two reads
xchg ah,al
inc dx
//port+1
in al,dx //read msb port
xchg ah,al //restore bytes order
end;
{* port write byte function*}
procedure portwritebyte(addr:word; value:byte); assemble
r; register;
asm
xchg ax,dx
out dx,al
end;
{*
* high speed port write word procedure
* comment:may problem with some cards and computers that
cant to access whole word, usualy it works.
*}
procedure portwriteword(addr:word; value:word); assemble
r; register;
asm
xchg ax,dx
out dx,ax
end;
{*
* low speed port write word procedure
*}
procedure portwritewordls(addr:word; value:word); assemb
ler; register;
const
delay = 150;
// depending of cpu speed and cards speed
asm
xchg ax,dx
out dx,al
mov ecx,delay
@1:
loop@1
xchg ah,al
inc dx
out dx,al
end;
end. //单元结束
上述port95.pas适用于delphi 2.0/3.0、windows 95 操作系统
。
下一篇:网络和通讯编程
↓相关文章:
- · 网络和通讯编程
- · 在Delphi程序中应用IE浏览器控件
- · Borland与Microsoft关于Delphi的对话
- · 远程控制篇:服务端程序关机时的处理
- · 远程控制篇:通过IP地址得到机器名
- · 远程控制篇:服务端程序的隐藏
- · 远程控制篇:模拟按键
- · 远程控制篇:获得网络邻居所有机器名
- · 远程控制篇:抓取远程屏幕图像
- · 有了网络监控 网络自由还会有吗?
- · 将某一主机域名解析为IP地址。
- · TWebBrowser流程讲解及如何判断下载网页成功
- · Kylix预览
- · 关于WEB应用程序的打印组件开发初探
- · 让你的“小猫”发传真技巧攻略
- · 安全技术:基于ARP欺骗的TCP伪连接DOS
- · 如何关闭端口防止病毒与黑客入侵
- · 运行多个系统 全线引爆虚拟机VMware
- · IE7 Build 5299 RSS新功能抢先看
- · 一些Windows系统安全配置方法
- · 网管必知 防溢出提权攻击解决办法
- · 自己动手做服务器安全(初级篇)
- · 披着“羊皮”的狼 TXT下的病毒阴谋
- · 让系统安全起来 把间谍软件请出硬盘
- · 简单三步走堵死SQLServer注入漏洞
- · 从细微处做起 全面打造系统安全
- · Windows上网后速度越来越慢怎么办?
- · 如何让让IE6也能实现反“钓鱼”
- · 上网安全 谨防ActiveX插件成病毒帮凶
- · 解析Windows Vista 5270的UAP功能
- · 世界之窗对决GB:浏览器截图功能比拼
- · 小技巧御大敌:如何防止IE被恶意修改
- · 在Cisco交换机上实现隔离访问
- · 与一个黑客的较量
- · 办公室共用电脑系统安全防范攻略
- · 一种“您无权查看该网页”的原因和解决方法
- · SQL注入程序带来的攻击及防范
- · 学习心得 TCP/IP攻击原理分析总结
- · SQL注入技术和跨站脚本攻击的检测
- · 真正安全起来 网页脚本攻击防范全攻略
- · 视频:ADSL宽带共享上网 2
- · 突破网络限制之三十六计篇
- · ADSL上网的常见问题及分析集锦
- · 视频:ADSL宽带共享上网
- · Windows系统中常见网络故障与解决方法
- · 揭开ADSL真正速度之谜:宽带到底该有多快
- · 网络管理之IP地址篇
- · 网络管理之网关篇
- · 一步一步学习代理服务器
- · 网络安全基础:防火墙的概念及实现原理
- · FTP登录错误详解
- · 测试网络通断的另类方法
- · 基于短信网关WAP推送的实现
- · 我写CC DDOS攻击器的思路及防范方法
- · 雅虎拟加强交友网站安全 防止成员账号泄露
- · ADSL常见问题精彩问答
- · 上网不用防火墙!一招克死所有病毒
- · SANS发布2005全球20大网络安全隐患排行
- · IE7将会采用Firefox的RSS Feed图标
- · 利用Google作黑客攻击的原理和防范

