发新话题
打印

高级语言程序对I/o端口的访问

高级语言程序对I/o端口的访问


高级语言程序对I/o端口的访问 9 q. N- X$ o7 p1 O
    如今,在微机系统中开发程序,包括开发控制硬件的系统程序或应用程序,一般都希望采用高级语言。实际上,在高级语言程序中,同样可以对I/O端口进行访问。 $ B0 K. F8 o  O
    在运行于D0s环境下的Turbo c程序中,从字节型端口读数据可通过调用函数inportb来实现。例如语句“a=inportb(0x100);”是读地址为100(十六进制)的端口的数据。输出数据到字节型端口可通过调用函数outportb来实现。例如语句“outportb(0x218,DATA);”是将数据DATA输出到地址为218(十六进制)的端口。 9 B# |/ `6 E2 @8 W4 V( [: ?
    注意
$ K3 z# \* F. ?8 I! ]    函数inportb和outportb的原型定义是在头文件DOS.H中,所以在c源程序中应引用该头文件。 4 X9 |* Z6 O0 e2 \0 D
    在运行于windows 9X环境下的VC(Visual c  )程序中,对I/0端口的访问有两种方 法,一是在c源程序中嵌入汇编代码,例如:! {: Z% I" \; \2 V9 a0 P
. P5 u. G1 ]8 Z: A9 u

# x, |: p4 _! j
7 }$ j+ I0 l/ B5 e) Z7 A$ B0 q) d5 P

8 N' V% ~0 _6 z3 q2 l3 Q0 ?) _. p- q
; t  b* v0 d1 |
$ ^+ _. _: a1 F# J7 s
8 R0 y+ r; m( e! k  g+ G
    第二种方法是调用函数_inp和_outp,前者用来读字节型端口的数据,后者将数据输出到字节型端口。对它们的调用和Turbo_c的inportb和outportb相似。 : d2 w8 b! H8 N$ R" h! A7 J
    在windows 2000环境下,情况有些变化。windows 2000的安全机制以及对多种硬件平台的支持,使得用户已不能直接访问机器的硬件资源。要和I/O端口打交道,必须编写相应的设备驱动程序。在将编好的设备驱动程序安装之后,在Visual c  源程序中对I/O端口最直接的访问是调用控制I/O操作的API函数(DeviceIoControl)。当然也可封装成类似inportb和inportb的简单调用形式。 0 c% y- S: ?  j" \2 v% \
    VB(visual Basic)也是常用的一种编程语言。VB本身不支持对I/O端口的访问。但可以通过编写动态链接库的方法,使其能实现对I/O端口的访问。需要指出,对于运珩于windows 2000环境下的VB,动态链接库要建立在支持I/0端口操作的设备驱动程序的基础之上。 0 i2 l/ j& x; a+ Q
    上面的叙述与举例仅涉及到字节型端口操作,实际上,高级语言程序也能对字型和双字型端口进行访问(Turbo c不支持双字型端口访问)。例如,在Turbo c中,函数inport用来读字型I/0端口,函数outport用来写数据至字型I/O端口;在VC中,函数inpw和inpd分别用来读字型和双字型I/O端口,函数outpw和outpd分别用来写数据至字型和双字型I/O端口。



点击图标进入精品网摘收藏 欢迎大家加入网络收藏夹

TOP

发新话题