使用英特尔注册表来实现“预期目的”可以提高效率吗?

时间:2009-12-14 19:47:57

标签: assembly intel

This article声称每个注册簿都有预期目的,更重要的是,

  

当英特尔的工程师设计时   最初的8086处理器,他们有   每个人都有一个特殊的目的   寄存器。正如他们设计的那样   指令集,他们创造了许多   优化和特殊说明   基于他们期望的功能   每个注册表执行。运用   根据英特尔的注册   原始计划允许代码采取   充分利用这些优化。   不幸的是,这似乎是一个迷失   艺术。很少有程序员知道英特尔的   整体设计,大多数编译器都是   太简单化或专注于   执行速度使用寄存器   正常。了解如何   寄存器和指令集合适   但是,这是一个重要的问题   走在路上,毫不费力   大小译码。

还有其他来源证实这篇文章吗?如果是这样,我真的很想看看。

请注意,我不是在讨论像STOS这样的快速操作使用edi的情况 - 我只是想知道如果我使用eax和{{ 1}}作为计数器而不是esi还是只是关于可读性?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

不,不再是 - 或者至少不经常。使用ECX作为计数器可以使用LOOP指令。有一段时间,这是一个显着的优势,但在最新的CPU上,LOOP的执行时间比DEC ECX / JNZ的组合需要更长的时间。可能的优点是它减少了内存带宽使用,这是一个越来越频繁的瓶颈。当/如果你可以使用像LOOPNZ这样的其他形式时,这也是一个优势,使用单独的指令来模拟它可能相对复杂。