用nasm关闭计算机

时间:2010-08-12 00:31:12

标签: nasm shutdown 16-bit

是否有可能从nasm关闭或杀死电源(是否存在差异?)。我知道你可以用它来重启:

mov al, 0xFE
out 0x64, al

是否有相同的关闭? 我正在制作自己的16位操作系统。

3 个答案:

答案 0 :(得分:1)

您所拥有的代码无法保证正常运行。它依赖于两个事实:

  • OS将物理IO内存映射到进程内存空间。
  • 机器有BIOS。

两者都不是真的。

以编程方式重新启动或关闭计算机的唯一可靠方法是调用相应的OS API。

调用OS API(您需要,因为 编写操作系统:-))的替代方法是使用ACPI。并非所有机器都支持这些ACPI,有四种不同的ACPI版本。

http://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface?wasRedirected=true
http://www.acpi.info

答案 1 :(得分:0)

您可以尝试以下代码: -

shutdown_sucess:
  mov ax, 5301h             ; Connect to the APM
  xor bx, bx
  int 15h
  je near continue_connection       ; Pass if connected
  cmp ah, 2
  je near continue_connection       ; Pass if already connected
  ret               ; Bail if fail

continue_connection:
  mov ax, 530Eh             ; Check APM Version
  xor bx, bx
  mov cx, 0102h             ; v1.2 Required
  int 15h
  ret       

答案 2 :(得分:0)

    mov ax, 0x1000
    mov ax, ss
    mov sp, 0xf000
    mov ax, 0x5307
    mov bx, 0x0001
    mov cx, 0x0003
    int 0x15