我最近偶然发现了以下汇编指令序列:
rep stos dword ptr [edi]
对于 ecx 重复,将 eax 的内容存储到 edi 指向的位置,每次递增或递减 edi (取决于方向标志)4个字节 . 通常,这用于 memset 类型的操作 .
ecx
eax
edi
memset
通常,该指令只是写成 rep stosd . 经验丰富的装配编码人员只要看到这一点就知道上面提到的所有细节 . :-)
rep stosd
完整性的ETA(感谢PhiS):每次迭代, ecx 递减1,循环在达到零时停止 . 对于 stos ,您唯一要注意的是 ecx 在结束时被清除 . 但是,对于使用 repz / repnz 前缀的 scas 等,如果操作在耗尽 ecx bytes / words / whatevers之前停止,则 ecx 可以大于零 .
stos
repz
repnz
scas
在您提出要求之前, scas 用于实现 strchr 类型的操作 . :-P
strchr
1 回答
对于
ecx
重复,将eax
的内容存储到edi
指向的位置,每次递增或递减edi
(取决于方向标志)4个字节 . 通常,这用于memset
类型的操作 .通常,该指令只是写成
rep stosd
. 经验丰富的装配编码人员只要看到这一点就知道上面提到的所有细节 . :-)完整性的ETA(感谢PhiS):每次迭代,
ecx
递减1,循环在达到零时停止 . 对于stos
,您唯一要注意的是ecx
在结束时被清除 . 但是,对于使用repz
/repnz
前缀的scas
等,如果操作在耗尽ecx
bytes / words / whatevers之前停止,则ecx
可以大于零 .在您提出要求之前,
scas
用于实现strchr
类型的操作 . :-P