我正在学习一些教程和参考资料,试图设置我的内核。在一个教程中,我遇到了一些不熟悉的代码,而且教程并没有解释它。我被告知这段代码将 16个IRQ(0-15)
映射到ISR位置32-47
:
void irq_remap(void)
{
outportb(0x20, 0x11);
outportb(0xA0, 0x11);
outportb(0x21, 0x20);
outportb(0xA1, 0x28);
outportb(0x21, 0x04);
outportb(0xA1, 0x02);
outportb(0x21, 0x01);
outportb(0xA1, 0x01);
outportb(0x21, 0x0);
outportb(0xA1, 0x0);
}
outportb()
的代码如下,但我已经很清楚它在做什么了:void outPortB(unsigned short port, unsigned char data)
{
__asm__ __volatile__ ("outb %1, %0" : : "dN" (port), "a" (data));
}
我应该提到,这是在x86体系结构的保护模式下。这段源代码可以正常工作,我知道它做了什么,但我不知道它是如何做到的。有人能向我解释一下这里发生了什么,以便于我在需要扩展时知道自己在做什么吗?