Assembly 处理器如何知道程序的结束?

Assembly 处理器如何知道程序的结束?,assembly,x86,mips,processor,Assembly,X86,Mips,Processor,我在想,处理器怎么知道什么时候停止执行程序。或者更确切地说,何时停止“提取、解码和执行”循环。 我想到了不同的方法,但不确定哪种方法是正确的,或者它们是否都错了。 1-可能在末尾有一条特殊指令,由汇编程序自动添加,以让处理器知道这就是结尾。 2-当它到达无效内存时(但它如何识别该内存)。 3-它循环并重新运行程序,但它如何识别何时循环,或者它是由汇编程序自动添加的。 4-或者它根本不会停止,它将永远保持运行。(但这不是效率低下吗 请给出建议。 如果答案可能因处理器而异,那么让我们以MIPS和x8

我在想,处理器怎么知道什么时候停止执行程序。或者更确切地说,何时停止“提取、解码和执行”循环。
我想到了不同的方法,但不确定哪种方法是正确的,或者它们是否都错了。
1-可能在末尾有一条特殊指令,由汇编程序自动添加,以让处理器知道这就是结尾。
2-当它到达无效内存时(但它如何识别该内存)。
3-它循环并重新运行程序,但它如何识别何时循环,或者它是由汇编程序自动添加的。
4-或者它根本不会停止,它将永远保持运行。(但这不是效率低下吗

请给出建议。
如果答案可能因处理器而异,那么让我们以MIPS和x86为例


谢谢。

这取决于操作系统和处理器

对于具有halt指令(如X86)的处理器,所有进程和线程都处于等待状态(无需执行任何操作),操作系统可能会执行halt指令,该指令将停止cpu并等待中断。如果下一次中断没有导致将任何线程的状态切换为可运行,则操作系统将返回halt指令

在没有halt指令的cpu上,当所有线程都在等待时,操作系统会进入一个空闲循环,只会分支到自身

回到最初的问题,运行程序的基本顺序是为程序分配内存空间,加载程序,然后调用程序。程序最终应从回调返回操作系统,操作系统将释放分配给运行程序的内存操作系统也可以在初始分配阶段创建虚拟地址空间

进一步阅读
,。对于MSDOS,程序使用INT软件序列返回MSDOS,例如设置AH=04Ch,然后执行INT 21H。对于其他操作系统,加载程序调用程序,程序完成后返回。

与前面的响应类似,我将更详细地描述。两个主要上下文应加以区分:1)直接在运行的硬件(包括操作系统)上具有管理员权限的代码和2)应用程序代码

对于第二种情况(应用程序代码),应用程序应执行一个通常名为“exit”的系统调用,该调用通知主管(内核)应用程序已完成。此电话的详情各不相同;e、 g.如rcgldr所述,MS-DOS AH=4Ch/int21h为此类“出口”;在现代Linux中,它是
exit\u group
syscall;等等当只看到main()时,您可能会忽略这样一个事实:main()是由系统特定的应用程序包装器调用的,该包装器执行此exit()调用。若应用程序并没有显式退出,它将一直执行,直到发生致命错误。获得此exit()请求后,主管将销毁该进程并切换到另一个进程

对于主管本身,如果它停止执行,这是非常特定于平台的。对于x86,最初在不关机的情况下关机的主要方法是围绕
HLT
指令循环(因为后者可以在中断时自动继续)。在Pentium4和Athlon之前,使用相同的HLT停止处理器,直到没有工作时出现中断;由于这些处理器,需要采取额外措施来停止芯片组级活动,因此停止方法变得更加复杂。现代x86平台根据ACPI内部语言的描述描述了如何使系统临时停止,其中包括多系统端口编程。对于所有实际的体系结构,都有类似的停止直到外部事件到来的指令。可以有多个级别的停止;e、 g.一些嵌入式处理器有“小停止”和“大停止”,前者只会降低处理器的速度,后者会完全停止处理器,但需要几十微秒的时间来稳定时钟PLL。无论如何,在停止之后,主管会尝试继续正常工作,直到达到重新启动/关机/等


多处理器(多核)配置有其自身的细节,因此最初在一个处理器上只启动一个核。然后,处理器间中断(IPI)或类似中断用于启动或停止另一个内核和处理器。停止操作系统工作通常包括停止除最后一个处理器和内核之外的所有处理器和内核。

要结束in 8086或MIPS,您可以使用系统调用 8086年:
hlt
int20h
在MIPS中: hlt的代码是10,您需要将其放入$v0或$2(相同的寄存器)
li$v0,10
然后调用系统
syscall

#4 MIPS呢?我似乎找不到类似的指导。我发现了“break”,但它说它是用于调试的。通常程序不会停止处理器。它们告诉操作系统它们已经完成,以便操作系统可以运行下一个程序。对于MSDOS,程序使用INT软件序列返回MSDOS,例如设置AH=04Ch,然后执行INT 21H。对于其他操作系统,加载程序调用程序,程序完成后返回。