Как HLT программа без использования HLT - PullRequest
0 голосов
/ 10 января 2019

Как я могу остановить выполнение программы без HLT. Написано в конце кода, который я прочитал, что HLT может возникать при прерывании, но я не мог понять, как

1 Ответ

0 голосов
/ 10 января 2019

Инструкция HLT фактически не завершает программу. Насколько я могу судить, основное его использование - перевод процессора в режим ожидания для снижения энергопотребления. Но это продолжается только до следующего прерывания, тогда выполнение программы будет продолжаться.

Вы, вероятно, должны сделать системный вызов (вызов в вашу ОС), либо сказать ОС прекратить ваш процесс, либо "выдать" процессор (позволяя ОС HLT сделать это для Вы соответствующим образом).

Как именно работают системные вызовы и какой вам нужен, зависит от операционной системы, в которой работает ваша программа. В DOS есть, например, INT 21h (MOV AH, 4Ch; INT 21h прекратит работу вашей программы IIRC), для Linux найдите "syscalls").

Если вы хотите действительно остановить выполнение программы, то есть намеренно повесить компьютер, вы можете:

  • войти в бесконечный цикл (here: JMP here) или
  • отключить (маскировать) прерывания, используя CLI, затем HLT.

Второй вариант может быть более энергоэффективным, однако оба варианта одинаково не удобны для пользователя и, возможно, несколько бессмысленны. :)

(Отказ от ответственности: я давно не занимался программированием на системном уровне, приведенная выше информация может быть немного грубой.)

...