/硬件端口字节输出函数*
*参数:value-要输出的字节,port-端口
*/
#define outb(value,port)   \
__asm__("outb %%al,%%dx"::"a"(value),"d"(port));

/*硬件端口输入函数
*参数:port-端口。返回读取的字节
*/
#define intb(port)                                          \ 
(							    \ 
{							    \ 
	unsigned char _v;				    \ 
	_asm_ volatile("inb %%dx,%%al":"=a"(_v):"d"(port)); \ 
	_v;						    \ 
}\
)

/*带延迟的硬件端口字节输出函数
 *参数:value-要输出的字节,port-端口
*/
#define outb_p(value,port)     \	
__asm__("outb %%al,%%dx\n"     \	
	"\tjmp 1f\n"	       \	
	"1:\tjmp 1f\n"	       \	
	"1:"		       \	
	:		       \	
	:"a"(value),"d"(port)  \	
	);		       	

/*带延迟的硬件端口字节输入函数
*参数:port-端口。返回读取字节
*/
#define inb_p(port)                          \ 
({					     \ 
	unsigned char _v;		     \ 
	__asm__ volatile("inb %%dx,%%al\n"   \ 
			 "\tjmp 1f\n"	     \ 
			 "1:\t jmp 1f\n"     \ 
			 "1:"		     \ 
			 :"=a"(_v)	     \ 
			 :"d"(port)	     \ 
		);\
	_v;\
})



Logo

更多推荐