我正在考虑使用char数组的一些IA-32 ASM示例。
当您需要读取数组时,我正在尝试理解ESI / EDI和EBX之间的主要区别。在我的示例中,有符号或无符号的char数组。 看来,当您不需要目标(EDI)时,可以使用ESI和EBX来读取数组。
我的问题来自这些寄存器的“标准”定义:ESI / EDI用于字符串操作,EBX用于存储器指向。好的,数组在内存中,但是:在这种情况下使用ESI或EBX有真正的区别吗?
我知道,这是一个愚蠢的问题,但我在网上找不到任何有用的东西。
答案 0 :(得分:2)
便利性和可用的寄存器是关于它的。有一些指令需要特定的寄存器,还有一些指令会在给定特定寄存器的情况下制作更短的指令(使用AX的16位代码会浮现在脑海中)。但是,对于标准寻址,我无法想到芯片本身带来的任何有价值的差异。您可以选择其中一个,因为哪些寄存器是空闲的(或者是为了避免保存/恢复操作)。
答案 1 :(得分:1)
有少量"字符串"使用E/RSI
和E/RDI
作为隐式源和目标指针的指令,以及E/RCX
作为这些指针的计数器。请参阅CMPS
,MOVS
,STOS
,INS
和OUTS
以及REP
,REPE
等前缀。
虽然这些是非常古老的说明,但我相信它们仍然有效,性能明智......特别是英特尔文档指出STOS
是清除内存块的最快捷方式。