本文声称每个寄存器都有预期的目的,更重要的是,
当英特尔的工程师设计原始的8086处理器时,他们对每个寄存器都有一个特殊的目的.在设计指令集时,他们根据每个寄存器要执行的功能创建了许多优化和特殊指令.根据英特尔原始计划使用寄存器允许代码充分利用这些优化.不幸的是,这似乎是一种迷失的艺术.很少有编码人员了解英特尔的整体设计,大多数编译器过于简单或专注于执行速度,无法正确使用寄存器.然而,理解寄存器和指令集如何组合在一起是迈向轻松尺寸编码的重要一步.
还有其他来源证实这篇文章吗?如果是这样,我真的很想看看.
请注意我不是在讨论像STOS使用这样的快速操作的情况edi- 我只是想知道如果我使用eax和esi作为计数器而不是ecx或者只是可读性是否会导致性能下降?
不,不再是这样了——或者至少不再经常这样了。使用 ECX 作为计数器可以让您使用 LOOP 指令。曾经,这是一个显着的优势,但在最新的 CPU 上,LOOP 的执行时间比 DEC ECX/JNZ 组合的执行时间更长。可能的优点是它减少了内存带宽的使用,而内存带宽的使用越来越成为瓶颈。当/如果您可以使用其他形式(例如 LOOPNZ)时,这也可能是一个优势,因为使用单独的指令进行模拟可能相对复杂。