6

这篇文章声称每个寄存器都有一个预期的目的,更重要的是,

当英特尔的工程师设计最初的 8086 处理器时,他们对每个寄存器都有一个特殊的用途。在设计指令集时,他们根据他们期望每个寄存器执行的功能创建了许多优化和特殊指令。根据英特尔最初的计划使用寄存器可以让代码充分利用这些优化。不幸的是,这似乎是一门失传的艺术。很少有程序员了解英特尔的整体设计,而且大多数编译器过于简单化或专注于执行速度,无法正确使用寄存器。然而,了解寄存器和指令集如何组合在一起是实现轻松大小编码的重要一步。

是否有任何其他来源可以证实这篇文章?如果是这样,我真的很想检查一下。

请注意,我不是在谈论像STOS使用快速操作这样的情况edi- 我只是想知道如果我使用eaxesi作为计数器而不是是否会导致性能下降,ecx或者仅仅是关于可读性?

4

2 回答 2

5

指令集中有使用特定寄存器的指令,这些寄存器比针对任何寄存器的等效函数更小(并且通常更快)。

于 2009-12-14T20:04:10.307 回答
4

不,不再是——或者至少不是很频繁。使用 ECX 作为计数器可让您使用 LOOP 指令。曾经,这是一个显着的优势,但在最近的 CPU 上,执行 LOOP 的时间比任何地方的 DEC ECX/JNZ 组合都要长。可能的优势是它减少了内存带宽使用,这越来越经常成为瓶颈。当/如果您可以使用其他形式(如 LOOPNZ)时,这也可能是一个优势,使用单独的指令进行模拟可能相对复杂。

于 2009-12-14T19:58:59.073 回答