汇编语言rep的用法
程序员文章站
2024-02-10 11:18:58
...
rep表示重复
mov edi,dword ptr[ebp+c] ;将内存地址为[ebp+c]的值赋给edi
or ecx,0xFFFFFFFF ;ecx为0xFFFFFFFF
xor eax,eax ;eax清零
repne scasb ;开始搜索
not ecx ;ecx存储字符传长度的反码,对ecx取反
dec ecx ;将ecx值减一赋给ecx
repne scasb 扫描字符串到零时结束(字符串最后一个是0),并且每次ecx减一
所以扫描下来的ecx是个负数,经过变换后为正数。上述代码可以求字符串长度
mov edi,dword ptr[ebp+8] ;将内存地址位[ebp+8]的值赋给edi
mov edx,ecx ; 将ecx值赋给edx
mov esi,dword ptr[ebp+c] ;将内存地址位[ebp+c]的值赋给esi
shr ecx,2 ;将ecx右移两位
rep movsd ;以双字为单位重复从源地址向目的地址传送数据
mov ecx,edx ;将edx赋给ecx
and ecx,3 ;ecx和3相与值赋给ecx
rep movsb ;将剩下的复制到目的地址
- movsd以双字为单位进行移动
- movsw以字为单位进行移动
- movsb以字节为单位进行移动 以
上三个每次都是移动一次所以经常会和rep一起使用,上述代码实现共同实现了字符串的复制相当于c语言中的strcpy。
刚刚接触汇编语言,有不足的地方欢迎指正。