程序14-14 linux/include/asm/io.h
//// 硬件端口字节输出函数。
// 参数:value - 欲输出字节;port - 端口。
1 #define outb(value,port) \
2 __asm__ ("outb %%al,%%dx"::"a" (value),"d" (port))
3
4
//// 硬件端口字节输入函数。
// 参数:port - 端口。返回读取的字节。
5 #define inb(port) ({ \
6 unsigned char _v; \
7 __asm__ volatile ("inb %%dx,%%al":"=a" (_v):"d" (port)); \
8 _v; \
9 })
10
//// 带延迟的硬件端口字节输出函数。使用两条跳转语句来延迟一会。
// 参数:value - 欲输出字节;port - 端口。
11 #define outb_p(value,port) \
12 __asm__ ("outb %%al,%%dx\n" \
13 "\tjmp 1f\n" \ // 向前跳转到标号1处(即下一条语句处)。
14 "1:\tjmp 1f\n" \ // 向前跳转到标号1处。
15 "1:"::"a" (value),"d" (port))
16
//// 带延迟的硬件端口字节输入函数。使用两条跳转语句来延迟一会。
// 参数:port - 端口。返回读取的字节。
17 #define inb_p(port) ({ \
18 unsigned char _v; \
19 __asm__ volatile ("inb %%dx,%%al\n" \
20 "\tjmp 1f\n" \ // 向前跳转到标号1处(即下一条语句处)。
21 "1:\tjmp 1f\n" \ // 向前跳转到标号1处。
22 "1:":"=a" (_v):"d" (port)); \
23 _v; \
24 })
25