现代处理器有多少个EAX寄存器?

时间:2014-01-19 11:44:24

标签: assembly

我是汇编编程的初学者,想知道单个EAX通用寄存器可以容纳多少和多少。作为初学者,似乎每个eax,ebx等只有一个。寄存器。

2 个答案:

答案 0 :(得分:5)

这些是逻辑寄存器名称。你是对的,假设每个正在运行的线程在程序的任何给定点都有一个有效的RAX值(顺便说一句 - 超线程这意味着每个核心两个),但实际上现代HW不包含单个值而是多个值

现代无序CPU将尝试根据源准备情况执行指令,因此对于下一个程序,例如:

mov rax, 1  ; #1
add rax, 2  ; #2
mov rax, 3  ; #3
add rax, 4  ; #4

CPU可以在解码后立即执行指令#1和#3,因为它们不需要满足任何依赖性(并且在rax中运行旧值)。另外,指令#2可以在之后并行执行,因为每个指令仅取决于前面的指令。但是,为了允许在HW中,您需要能够将结果保存在某个临时寄存器中 - 因为它们提出了register renaming - 而不是调用每个操作rax的结果,每条指令将分配一个具有一些唯一ID的新物理寄存器,并更新一些全局表(通常称为RAT - 寄存器别名表)rax现在由物理寄存器#37或其他表示。

重要的是,必须使用正确的版本维护源,因此它们也会在同一时刻重命名。指令#2不会使用rax,而是使用inst#1的目的地。 Inst#4将类似地使用inst#3的结果。如果您接受重命名按顺序,并且别名已正确更新,则很容易看到从逻辑寄存器名称到物理寄存器名称的每次转换都保持正确的程序顺序。

因此,虽然对于管道中存活的每条指令都有一个“正确”rax寄存器,但这不一定是相同的物理寄存器。从某种意义上说,你可以说你有多个不同的逻辑寄存器副本,每个副本只有在下一次写入相同的逻辑名时才有效。

答案 1 :(得分:1)

在任何现代处理器中,每个线程只有一个EAX

所有其他架构寄存器都是如此。虽然你可以说,例如,有8个MMX寄存器,但这意味着只有MM0MM1MM2等等......直到MM7