Как перезагрузить в сборке x86 из 16-битного реального режима?

О выключении APM было сказано в инструкциях X86 для выключения компьютера в реальном режиме?

Как перезагрузить компьютер вместо выключения? Пожалуйста, укажите и объясните соответствующую документацию / стандарт в своем ответе.

Я понял, что APM и ACPI являются двумя основными методами, и мне интересны оба. Дайте мне знать, если есть другие.

Я обнаружил, что спецификация ACPI находится по адресу http://uefi.org/specifications но для ее анализа требуется слишком много умственных способностей, поэтому я нашел ее достойной вопроса.

Я не смог найти URL для спецификации APM, только кеш Google RTF от Microsoft.

Если вам нужен способ проверить свой ответ, этот минимальный пример загрузки загрузочного сектора APM может стать хорошей отправной точкой. Цель состоит в том, чтобы вместо этого преобразовать его в пример перезагрузки.

Я прочитал код ядра Linux 4.2 в arch / x86 / realmode / rm / reboot.S, но я не понимаю, как это работает, так как я не могу найти разницу между этими командами и моим рабочим примером завершения работы.

Связанные более общие на суперпользователя: https://superuser.com/questions/294681/how-does-a-computer-restart-itself

Связанный вопрос для защищенного режима: перезагрузка в защищенном режиме

2 ответа

Я использую следующий код в загрузочном образе дискеты для сброса компьютера, если файлы ядра отсутствуют на загрузочном носителе.

Reboot:
    db 0x0ea 
    dw 0x0000 
    dw 0xffff 

Который по существу собирается в следующую инструкцию:

jmp     far ptr 0FFFFh:0 

Я думаю, что это горячая перезагрузка, то есть эквивалент нажатия Ctrl-Alt-Delete, а не нажатия кнопки сброса на передней панели машины.

Работает на моем старом ПК 8086:

mov ds, ax
mov ax,0000
mov [0472], ax
jmp FFFF:000
Другие вопросы по тегам