inb_p通过port端口读取数据,并延迟
#define inb_p(port) ({ \
unsigned char _v; \
__asm__ volatile ("inb %%dx,%%al\n" \
"\tjmp 1f\n" \
"1:\tjmp 1f\n" \
"1:":"=a" (_v):"d" (port)); \
_v; \
})
比较容易理解的代码如下:
#define inb_p(port) _inb_p((unsigned short)(port))
_inline unsigned char _inb_p(unsigned short port)
{
// volatile unsigned char _v;
_asm {
mov dx,port
in al,dx
// mov _v,al
jmp l1
l1: jmp l2
l2:
}
// return _v;
}
汇编的in从dx端口读一个字节数据到al