汇编语言中的rep指令的作用

0040106055pushebp004010618BECmovebp,esp0040106383EC48subesp,48h0040106653pushebx00401... 00401060 55 push ebp
00401061 8B EC mov ebp,esp
00401063 83 EC 48 sub esp,48h
00401066 53 push ebx
00401067 56 push esi
00401068 57 push edi
00401069 8D 7D B8 lea edi,[ebp-48h]
0040106C B9 12 00 00 00 mov ecx,12h
00401071 B8 CC CC CC CC mov eax,0CCCCCCCCh
00401076 F3 AB rep stos dword ptr [edi]
请问高手们,在main函数的反汇编代码中的一段代码,能告诉我这段代码有什么作用吗?
展开
 我来答
jiweix
推荐于2017-09-13 · TA获得超过584个赞
知道小有建树答主
回答量:275
采纳率:0%
帮助的人:0
展开全部
重复执行后面的指令
rep stos dword ptr [edi]
是将edi指向的区域初始化为0CCCCCCCCh
应该是12h*4个字节,可以理解为一个函数,传来的某个参数为指针,然后将这个指针指向的区域初始化
void fun(long *p)
{
int i;
// 12h=18
for(i=0;i<18;i++)
{
p[i]=0CCCCCCCCh;
}
}
相当于这个函数的功能
许诗文00
推荐于2017-09-22 · TA获得超过4290个赞
知道小有建树答主
回答量:425
采纳率:100%
帮助的人:26.4万
展开全部
1.rep movsd
每次ecx!=0便执行movsd ,然后ecx=ecx-1 movsd移动ds:[si] 到es:[di],在32位汇编下可以用esi代替si,edi代替di
2.同时由于在一般exe中ds = es
程序起始位置所以另esi = offset @s1就可以找到变量s1 ,edi= offset @s2就可以找到变量s2 。

3.movsd此类指令有个性质,当标志位d=0时执行一次esi = esi
+1,edi= edi+ 1

d=1时执行一次esi = esi +1,edi= edi+ 1

所以此段指令的含义是从s1复制ecx个dword到s2。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
轻薄的假像
2007-05-17 · TA获得超过390个赞
知道小有建树答主
回答量:368
采纳率:0%
帮助的人:0
展开全部
stos dword ptr [edi]
将此指令执行12次(根据ECX的值重复执行某行指令)
如果用汇编指令来描述他的作用的话就是
s: stos dword ptr [edi]
loop s
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
水芹翟元洲
2020-06-21 · TA获得超过3579个赞
知道大有可为答主
回答量:3103
采纳率:31%
帮助的人:199万
展开全部
一般都是用来循环赋值
比如说把一段内存拷到另一段里面去
比如说复制一段字符串到另一段里面去
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式