2010-09-29 68 views

回答

43

对于ecx重复,存储的eax内容到其中edi点,通过每次4个字节递增或递减edi(取决于方向标志) 。通常,这用于memset类型的操作。

通常,该指令简写为rep stosd。有经验的汇编程序员只需看到上面提到的所有细节。 :-)


ETA的完整性(感谢PHIS):每次迭代时,ecx被减1,并且当它达到零时的循环停止。对于stos,您只会观察到ecx最后被清除。但是,对于scas等,其中使用repz/repnz前缀,如果操作在耗尽ecx字节/字/发起方之前停止,则ecx可以大于零。

在你问之前,scas用于执行strchr类型的操作。 :-P

+0

你能举个例子吗? – COMer 2010-09-29 06:16:08

+4

@COMer - 它已经在anwser中:像memset - 它用给定的值(在eax中)填充指定的(ecx)内存量(在[edi])。 – PhiS 2010-09-29 07:05:43

+0

@Chris Jester-Young - 为了完整起见,我建议你提一下,它也会减少ecx每次迭代一次,直到ecx达到0. – PhiS 2010-09-29 07:11:27