好吧,这对我来说非常困惑,关于Assembly的每个教程都说CPU中内置了较少数量的寄存器,那么如果我创建一个使用寄存器进行计算的程序会怎么样:
global _start
section .text
_start:
reStrt: ; Label, Restart...
MOV ah, 0 ; Initialise ah to 0
INC ah ; ah++ [OR] ah=1
JMP reStrt ; Unconditional jump to label "reStrt"
在汇编并链接此代码与子系统:CONSOLE之后,我将启动它,并将看到永不退出的程序。
要关闭它,我们必须按下控制台窗口的[X]按钮,在此程序运行的同时,使用Register ah增加1并减少1,我再次启动该应用程序,现在,同一个程序在同一时间运行了2次。
但这怎么可能呢?如果AH寄存器是CPU中的一个,那么两个程序如何共享该寄存器但是又与另一个程序共享该值? B'因为我甚至没有创建变量(标签)来将值存储在内存(RAM)中。此外,如果有数百个注册表但是应用程序仅限于使用每个注册表的一个副本,那么我怎么能说我的计算机可以处理多少进程?
答案 0 :(得分:3)
在context switches上(特别是在运行其他process时),operating system kernel正在保存流程状态(特别是在scheduler preemptive内多任务处理,特别是registers,位于memory。
硬件能够通过在内存中保存至少一些寄存器来经常处理interrupts。
如果您使用Linux或其他free software操作system,您将能够学习its源代码并查找所有这些详细信息。参见例如Linux Assembly HowTo
请阅读有关operating systems和computer architecture(包括instruction set架构)的更多信息。去图书馆,你会发现很多关于这些主题的书。