assembly - 如何在自定义操作系统中的程序集中关闭 acpi?

标签 assembly virtualbox shutdown acpi dsdt

我正在 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, eaxout dx, ax .

关于assembly - 如何在自定义操作系统中的程序集中关闭 acpi?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39605574/

相关文章:

assembly - MikeOS引导加载程序中的堆栈段

assembly - 寄存器可以一次保存多个值吗?

linux - 如何允许其他人访问我本地的 gitlab?

virtualbox - Genymotion 无法启动。

iOS 关机通知

android - 如何判断 Android 何时关闭?

c - 我是否在 Cygwin GCC (v 4.5.3) 中发现了错误?

assembly - dword 操作数在汇编中有什么作用

linux - 监控系统信息的脚本 : date and time, CPU使用率和内存

java - 关闭 Swing Frame,用户与系统启动关闭。如何区分?