ASM 使用寄存器但 CPU 仍然足够?

ASM uses registers yet the CPU still has sufficient?

看过一些ASM编程的教程,处于初级阶段。我有兴趣学习 x86 ASM,具有 C 语言背景,并且我在计算机科学课程中学习了一些初级 MIPS,这要求我编写非常基础的程序。我把寄存器当作变量来使用,但并没有真正理解它们。

我不明白 ASM 中的寄存器如何被如此自由地使用,当我相信 CPU 可能只有八个通用寄存器,而用于特定用途的寄存器更少。

当然,现代Windows/Linux/OSX系统上同时有许多不同的程序运行,寄存器会很快被其他程序占用吗?特别是如果大量的 ASM 编码程序是 运行,其中每个程序都想将 CPU 的寄存器用于不同的目的...

此外,我在 x86 ASM 中可以使用多少个寄存器有限制吗?如果我需要更多会发生什么,例如在 C 中我可以创建几乎无限数量的变量。

Windows/Linux/OSX system, the registers would quickly be occupied by other programs?

当 OS 从一个程序切换到另一个程序时(在同一个 CPU 上);它将前一个程序的值存储在寄存器中(在 RAM 中),然后将下一个程序的值加载到寄存器中(从 RAM 中)。

Also, is there a limit to how many registers I can use in x86 ASM? What happens if I need more, for example in C I could create an almost infinite amount of variables.

是的,有限制(例如,32 位 80x86 限制为 7 个通用寄存器,64 位 80x86 限制为 15 个)。如果您创建更多变量,那么一些变量只会在堆栈上使用 space ;并且编译器可以随时在堆栈和寄存器之间移动变量。