"rep stos"x86汇编指令序列有什么作用?

COM*_*Mer 42 x86 assembly

我最近偶然发现了以下汇编指令序列:

rep stos    dword ptr [edi]
Run Code Online (Sandbox Code Playgroud)

Chr*_*ung 67

对于ecx重复,每次将内容存储eaxedi指向,递增或递减的位置edi(取决于方向标志)4个字节.通常,这用于a memset型操作.

通常,只需编写该指令rep stosd.经验丰富的装配编码人员只要看到这一点就知道上面提到的所有细节.:-)


完整性的ETA(感谢PhiS):每次迭代,ecx递减1,当循环达到零时循环停止.因为stos,你唯一会注意到的是ecx最后清除的东西.但是,对于使用/ 前缀scas的情况等,如果操作在耗尽字节/单词/ whatevers 之前停止,则可以大于零.repzrepnzecxecx

在你提出之前,scas用于实现strchr类型操作.:-P

  • @COMer - 它已经在anwser中:就像memset一样 - 它使用给定值(在eax中)填充指定(ecx)的内存量(在[edi]中). (6认同)
  • @ColeJohnson Close,除了使用`stosd`以外,dword中的各个字节可以具有不同的内容。 (2认同)