【问题标题】:What's the main difference between ESI and EBX for char arrays?字符数组的 ESI 和 EBX 之间的主要区别是什么?
【发布时间】:2014-09-04 13:52:09
【问题描述】:

我正在考虑一些带有 char 数组的 IA-32 ASM 示例。

当您需要读取数组时,我试图了解 ESI/EDI 和 EBX 之间的主要区别。在我的示例中,有符号或无符号字符数组。 好像不需要目的地(EDI)的时候,可以同时使用ESI和EBX来读取数组。

我的问题来自这些寄存器的“标准”定义:ESI/EDI 用于字符串操作,EBX 用于内存指向。好的,数组在内存中,但是:在这种情况下使用 ESI 或 EBX 有真正的区别吗?

我知道,这是一个愚蠢的问题,但我在网上找不到任何有用的东西。

【问题讨论】:

  • 这些区别对 8086 处理器很重要。现在已经不是 1979 年了。

标签: assembly x86


【解决方案1】:

有少量“字符串”指令使用E/RSIE/RDI 作为隐式源和目标指针,E/RCX 作为它们的计数器。请参阅CMPSMOVSSTOSINSOUTS 以及 REPREPE 等前缀。

虽然这些是非常古老的指令,但我相信它们在性能方面仍然有效......英特尔文档特别指出,STOS 是清除内存块的最快方法。

【讨论】:

    【解决方案2】:

    方便和可用的寄存器是关于它的。有一些指令需要特定的寄存器,还有一些指令会在给定特定寄存器的情况下生成更短的指令(想到使用 AX 的 16 位代码)。但是,对于标准寻址,我想不出芯片本身带来的任何有价值的差异。您可以选择一个或另一个,因为哪些寄存器是空闲的(或避免保存/恢复操作)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-22
      • 2015-08-06
      • 2011-03-06
      • 2013-12-23
      • 2017-04-28
      • 2011-04-14
      • 2010-09-17
      • 2021-11-30
      相关资源
      最近更新 更多