下面的代码片段是为 JOS 启用 A20。它有一个让我感到困惑的问题。“$0xdf”是一个命令,而不是数据。它应该输出到端口 0x64,这是命令端口。实际上,它的端口是0x60,也就是数据端口。在这里,存在两种方法(方法 3.1 和方法 3.2): http ://www.brokenthorn.com/Resources/OSDev9.html
所以,我的问题是:为什么最后要移植到 0x60 (outb %al, %0x60) ?
seta20.1:
inb $0x64,%al # Wait for not busy
testb $0x2,%al
jnz seta20.1
movb $0xd1,%al # 0xd1 -> port 0x64
outb %al,$0x64
seta20.2:
inb $0x64,%al # Wait for not busy
testb $0x2,%al
jnz seta20.2
movb $0xdf,%al # 0xdf -> port 0x60
outb %al,$0x60