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

时间:2010-09-29 05:03:23

标签: assembly x86

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

rep stos    dword ptr [edi]

2 个答案:

答案 0 :(得分:58)

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

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


完整性的ETA(感谢PhiS):每次迭代,ecx递减1,循环在达到零时停止。对于stos,您唯一要注意的是ecx最后会被清除。但是,对于使用scas / repz前缀的repnz之类,如果操作在耗尽ecx之前停止,ecx可能会大于零字节/字/凡是。

在您提问之前,scas用于实施strchr类型的操作。 :-P

答案 1 :(得分:0)

Empty array: 
char buff[256] = { }; 

 776      1c5:   48 8d 95 e0 fc ff ff    lea    -0x320(%rbp),%rdx
 777      1cc:   b8 00 00 00 00          mov    $0x0,%eax
 778      1d1:   b9 20 00 00 00          mov    $0x20,%ecx
 779      1d6:   48 89 d7                mov    %rdx,%rdi
 780      1d9:   f3 48 ab                **rep stos %rax,%es:(%rdi)**