Инструкция HLT
фактически не завершает программу. Насколько я могу судить, основное его использование - перевод процессора в режим ожидания для снижения энергопотребления. Но это продолжается только до следующего прерывания, тогда выполнение программы будет продолжаться.
Вы, вероятно, должны сделать системный вызов (вызов в вашу ОС), либо сказать ОС прекратить ваш процесс, либо "выдать" процессор (позволяя ОС HLT
сделать это для Вы соответствующим образом).
Как именно работают системные вызовы и какой вам нужен, зависит от операционной системы, в которой работает ваша программа. В DOS есть, например, INT 21h
(MOV AH, 4Ch; INT 21h
прекратит работу вашей программы IIRC), для Linux найдите "syscalls").
Если вы хотите действительно остановить выполнение программы, то есть намеренно повесить компьютер, вы можете:
- войти в бесконечный цикл (
here: JMP here
) или
- отключить (маскировать) прерывания, используя
CLI
, затем HLT
.
Второй вариант может быть более энергоэффективным, однако оба варианта одинаково не удобны для пользователя и, возможно, несколько бессмысленны. :)
(Отказ от ответственности: я давно не занимался программированием на системном уровне, приведенная выше информация может быть немного грубой.)