关于装配过程登记的困惑

时间:2013-08-18 13:45:08

标签: assembly

我刚刚开始学习装配,这可能看起来像一个愚蠢的问题,但我对此感到困惑。 我想知道每个进程寄存器是否有多个,让我们说eax或ebx.From我理解寄存器是全局使用的,似乎只有1?(eax而不是eax1或eax2在整个应用程序中使用来自我的看我什么时候拆开我的应用程序)

但如果有1然后不会出现数据问题或类似问题吗?如果有更多这样的问题,如eax1,eax2,eax3,那么效率会更高。

1 个答案:

答案 0 :(得分:2)

只有一组寄存器,根据当前正在运行的进程,正确的值将被换入和换出。交换寄存器称为context switch并且确实会产生性能成本。

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

不同的架构将具有不同数量的寄存器。例如,基于RISC的处理器通常有更多的寄存器可供使用(尽管由于使用的指令集,因为需要更多而不是所有的自由增益)。对于具体示例,在基于PowerPC RISC的芯片上运行的Xbox360具有32个通用寄存器和少数特定寄存器(指令指针等)。

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