我正在 virtualbox 中运行自定义操作系统,并解析了 ACPI、FACP、DSDT 等表以获取 PM1a_CNT 和 SLP_TYPa 值。这些似乎都是正确的。但是,当我尝试使用以下命令关闭 ACPI 时:
xor eax, eax
mov edx, [PM1a_CNT]
mov ax, [SLP_TYPa]
or ax, (1 shl 13)
out dx, ax
什么也没发生。 PM1a_CNT
为 0x4004,SLP_TYPa
为 0,与我在其他地方看到的其他值相比,这似乎是合理的。我还检查了 PM1b_CNT 是否为零,所以我不关心它。
virtualbox 是否存在使其正常工作的问题或技巧?
最佳答案
一切看起来都正确,只是您正在将 32 位值写入 16 位 I/O 端口。尝试替换最后的 out dx, eax
与 out dx, ax
.
关于assembly - 如何在自定义操作系统中的程序集中关闭 acpi?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39605574/