如何在不使用HLT的情况下对程序进行HLT

时间:2019-01-09 21:23:59

标签: emu8086

我如何在不使用HLT的情况下停止执行程序写在代码的末尾,我已经阅读到HLT可以在该中断处发生,但是我不明白如何

1 个答案:

答案 0 :(得分:1)

HLT指令实际上并未终止程序。据我所知,它的主要用途是将CPU置于“空闲”模式以减少功耗。但这只会持续到下一个中​​断触发为止,然后程序将继续执行。

您可能应该进行系统调用(对您的操作系统的调用),以告诉操作系统终止您的进程,或者“让”处理器(让操作系统{{1} }以适合您的方式为您提供)。

系统调用的工作原理以及您需要哪个调用取决于程序所运行的OS。在DOS上,例如HLTINT 21h将终止您的程序IIRC,对于Linux,请查找“ syscalls”)。

如果要真正停止程序执行,即有意将计算机挂起,则可以:

  • 进入无限循环(MOV AH, 4Ch; INT 21h),或
  • 使用here: JMP here,然后使用CLI禁用(可屏蔽)中断。

第二个选项可能会更省电,但是两者都对用户不友好并且可能毫无意义。 :)

(免责声明:我已经有一段时间没有在进行系统级编程了,上面的信息可能有点粗糙。)