(三)LEA,REP,MOV,MOVS,STOS与内存的表现形式

LEA:取地址,也可以叫计算表达式

LEA有两个操作数,左边必须是寄存器,右边必须写成 宽度 PTR ds:[ 要计算的表达式]

 

例如,我们要取栈顶后面4位的地址,宽度为4字节,并存到EAX里

LEA EAX , DWORD PTR DS: [ESP + 4] 计算内容

可以看成右边是计算 然后存入LEA,所以取地址叫法也不标准

MOV:复制

复制指定的数据到另一块地址 一边必须是寄存器,不能内存到内存

例如:

复制esp的地址到eax

mov eax,esp

复制ESP的指向的数据到EAX

mov eax ,dword ptr ds: [esp]

 

MOVS :复制ESI指向的内存到EDI指向的内存,并ESI EDI加所复制的宽度(方向取决于DF标志寄存器)简写形式(MOVSB,MOVSW,MOVSD)

mov esi,0x18FFA0     设置要复制内存的起始地址
mov edi,0x18FF78    //设置要复制 到哪里的内存地址
std       //将DF标志寄存器设置为1,那么下面复制就会像低内存连续复制,也就是复制完毕ESI EDI会减宽度
movs dword ptr es:[edi],dword ptr ds:[esi]  //复制4字节数据到edi指向的内存  想要连续复制多少次 可以根据REP指定

 

REP: 循环

REP 后面跟要循环的语句 一般用于连续复制内存(MOVS)和填充某块内存(STOS)

循环次数取决于ECX(计数器寄存器)

  例如

MOV ECX,4           //设置计数器复制4次,这里是16进制

REP  movs dword ptr es:[edi],dword ptr ds:[esi]   //根据计数器循环复制4次,复制完毕向低位还是高位内存 取决于DF标志寄存器

 

STOS :将EAX 的数据复制到EDI指定的内存 简写形式(STOSB,STOSD,STODW)

例如EAX存的是0x11223344

将EAX复制到ESP指定的内存区别

STOS DWORD PTR DS: [ESP],EAX

循环复制也可以用REP

转载于:https://www.cnblogs.com/A-sync/p/6206601.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值