char数组的ESI和EBX之间的主要区别是什么?

时间:2014-07-14 15:25:03

标签: assembly x86

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

当您需要读取数组时,我正在尝试理解ESI / EDI和EBX之间的主要区别。在我的示例中,有符号或无符号的char数组。 看来,当您不需要目标(EDI)时,可以使用ESI和EBX来读取数组。

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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