Выключение компьютера с помощью насма - PullRequest
0 голосов
/ 12 августа 2010

Можно ли отключить или отключить питание (есть ли разница?) Компьютера от носа.Я знаю, что вы можете использовать это для перезагрузки:

mov al, 0xFE
out 0x64, al

Есть ли эквивалент для выключения?Я делаю свою собственную 16-битную ОС.

Ответы [ 3 ]

1 голос
/ 12 августа 2010

Код у вас не гарантированно работает. Он опирается на два факта:

  • ОС отображает физическую память ввода-вывода в область памяти процесса.
  • на машине установлен BIOS.

Ни один из двух не может быть правдой.

Единственный надежный способ перезагрузки или выключения машины программным способом - вызвать соответствующий API ОС.

Альтернативой вызову API OS (который вам нужен, поскольку вы пишете для написания ОС :-)) используется ACPI. Не все машины поддерживают ACPI, хотя есть четыре версии ACPI.

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

0 голосов
/ 13 января 2015
    mov ax, 0x1000
    mov ax, ss
    mov sp, 0xf000
    mov ax, 0x5307
    mov bx, 0x0001
    mov cx, 0x0003
    int 0x15
0 голосов
/ 20 августа 2013

Вы можете попробовать этот код: -

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       
...