注册 登录
编程论坛 汇编论坛

rep movs汇编指令的问题

sharplong 发布于 2017-09-17 03:42, 11799 次点击
以下是vc6的disassembley 的一段代码,结构体的赋值操作。
22:       student = student1;
0040DE74   mov         ecx,8
0040DE79   lea         esi,[ebp-48h]
0040DE7C   lea         edi,[ebp-28h]
0040DE7F   rep movs    dword ptr [edi],dword ptr [esi]
我知道lea 是取地址,rep是重复,ecx,8是重复执行的次数。 movs是把esi指向的内存复制到edi指向的内存。
我这里猜想edi跟esi每次执行过后是会加4的。然后这段代码的功能是一段数据的复制。

------------------------------------------------------------------------------
不知猜想是否正确,edi esi真的加4吗,在哪里可以找到权威的集参考????比如movs , rep,esi edi这些  。
网上找的资料比较乱,我是初学者,求高手指点和给个权威参考书或网址。
4 回复
#2
Valenciax2017-09-17 20:06
rep movs dword ptr [edi],dword ptr [esi] 这句中 dword ptr [edi],dword ptr [esi] 不必要
基本上 rep movsd 就可以了
rep movsd表示每次移动两字dword,si和di加或减4 (视方向标志而定)
还有两种movs
rep movsw  ;字
rep movsb  ;字节
#3
sharplong2017-09-17 23:51
回复 2楼 Valenciax
嗯明白了,那么
改写成如下两种形式也是对的吗?
    rep movsd ptr [edi] ,ptr[esi](这种是不是不对??)
或直接
    rep movsd(会默认使用edi 跟esi吗??)

另外,我还想看一下其他指令的权威参考,版主有没有推荐呢??

[此贴子已经被作者于2017-9-17 23:52编辑过]

#4
Valenciax2017-09-18 20:23
rep movs? 就可以, 默认是ds:esi(或si) 移到 es:edi(或di)
最权威的参考自然是intel x86的六百多页的指令手册,
https://www.
#5
sharplong2017-09-18 23:31
回复 4楼 Valenciax
受教了,十分感谢。
1