Преобразование ответа @larz выше в сборку носа выполняется следующим образом:
Пререквизиты: Bochs, Nasm
Этот пример был запущен на Debian Wheezy со стандартными пакетами.
Код (имя файла: shutdown.asm):
org 0x7c00
jmp main
Shutdown:
mov ax, 0x1000
mov ax, ss
mov sp, 0xf000
mov ax, 0x5307
mov bx, 0x0001
mov cx, 0x0003
int 0x15
WaitForEnter:
mov ah, 0
int 0x16
cmp al, 0x0D
jne WaitForEnter
ret
main:
call WaitForEnter
call Shutdown
times 510-($-$$) db 0
dw 0xaa55
Насмия:
nasm -f bin -o boot_sect.img shutdown.asm
Файл конфигурации Bochs (имя файла: .bochsrc) в том же каталоге, что и код (shutdown.asm)
display_library: sdl
floppya: 1_44=boot_sect.img, status=inserted
boot: a
* Примечание. Я использую библиотеку sdl для bochs, которая является отдельным пакетом от самого bochs
Запуск bochs (из той же директории, что и раньше):
bochs
Нажмите Enter, чтобы выключить
* Примечание. Я не уверен, что все строки между меткой завершения работы и меткой WaitForEnter являются необходимыми