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

本文详细介绍了汇编语言中的LEA、MOV、MOVS、REP及STOS等指令的使用方法及应用场景,包括如何进行地址计算、数据复制及循环操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值