0

我刚开始学习汇编,这似乎是一个愚蠢的问题,但我实际上对此感到困惑。我想知道每个进程寄存器是否有多个,比如说 eax 或 ebx。据我所知,该寄存器是全局使用的,似乎只有 1 个?(从我的整个应用程序中使用 eax 而不是 eax1 或 eax2看看我什么时候反汇编了我的应用程序)

但是如果有 1 那么不会有数据问题或一些类似的问题吗?如果有更多这样的 eax1,eax2,eax3 也不会更有效。

4

1 回答 1

2

只有一组寄存器,根据当前正在运行的进程,将换入和换出正确的值。交换寄存器称为上下文切换,并且确实会带来性能成本。

当单个进程正在运行时,当它用完用于存储数据的寄存器时,这些值必须存储在内存中,直到再次需要它们为止。这会发生很多,尤其是在函数调用中。

不同的架构将具有不同数量的寄存器。例如,基于 RISC 的处理器通常有更多的寄存器可供使用(尽管由于使用的指令集,您需要更多的寄存器,但这并不是免费的)。对于一个具体的示例,在基于 PowerPC RISC 的芯片上运行的 Xbox360 有 32 个通用寄存器加上一些特定的寄存器(指令指针等)。

现代基于 Intel/AMD x64 的芯片确实也有更多的寄存器(SSE 等),但这取决于您的编译器是否可以利用它们以及用于什么目的(因为它们的意图更加集中)。

于 2013-08-18T14:14:17.130 回答