能力值:
( LV4,RANK:140 )
|
-
-
2 楼
jge后面是循环体内的内容
jmp后面的代码是对i进行自增1,自增1的内容是循环体执行完一次后执行
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
我来说说流程:
cmp dword ptr [i],0Ah //比较i是否大於10
jge wmain+5Ah (0A0141Ah) //大於或等於就跳出循环
你的代码不完整吧,应该在0a013FB到0a0141a这地址间的代码没贴出,应该是跳到i++这句话的
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
[QUOTE=pklong;1353691]我来说说流程:
cmp dword ptr [i],0Ah //比较i是否大於10
jge wmain+5Ah (0A0141Ah) //大於或等於就跳出循环
你的代码不完整吧,应该在0a013FB到0a0141a这地址间的代码没贴出,应该是跳...[/QUOTE]
没有了,就这一段代码,如果jpe不满足跳出循环条件的话,程序去哪执行?如果是去jmp下面执行的话,为什么?
|
能力值:
( LV4,RANK:140 )
|
-
-
5 楼
00A013FB jge wmain+5Ah (0A0141Ah) ;退出循环
00A013FB 后面应该有向上跳转的代码 jmp A013EE
for(i = 0; i < 10; i++)后面是什么代码 jge 就跳去执行什么代码
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
int _tmain(int argc, _TCHAR* argv[])
{
011713C0 push ebp
011713C1 mov ebp,esp
011713C3 sub esp,0CCh
011713C9 push ebx
011713CA push esi
011713CB push edi
011713CC lea edi,[ebp-0CCh]
011713D2 mov ecx,33h
011713D7 mov eax,0CCCCCCCCh
011713DC rep stos dword ptr es:[edi]
int i = 0;
011713DE mov dword ptr [i],0
for(i = 0; i < 10; i++)
011713E5 mov dword ptr [i],0
011713EC jmp wmain+37h (11713F7h)
011713EE mov eax,dword ptr [i]
011713F1 add eax,1
011713F4 mov dword ptr [i],eax
011713F7 cmp dword ptr [i],0Ah
011713FB jge wmain+5Ah (117141Ah)
{
printf("%d\n",i);
011713FD mov esi,esp
011713FF mov eax,dword ptr [i]
01171402 push eax
01171403 push offset string "%d\n" (1175740h)
01171408 call dword ptr [__imp__printf (11782D4h)]
0117140E add esp,8
01171411 cmp esi,esp
01171413 call @ILT+315(__RTC_CheckEsp) (1171140h)
}
01171418 jmp wmain+2Eh (11713EEh)
scanf("");
0117141A mov esi,esp
0117141C push offset string "" (117573Ch)
01171421 call dword ptr [__imp__scanf (11782DCh)]
01171427 add esp,4
0117142A cmp esi,esp
0117142C call @ILT+315(__RTC_CheckEsp) (1171140h)
return 0;
01171431 xor eax,eax
}
这是全部代码,jge后边没有跳转,难道被优化了?
|
能力值:
( LV4,RANK:140 )
|
-
-
7 楼
[QUOTE=ccdy;1353701]int _tmain(int argc, _TCHAR* argv[])
{
011713C0 push ebp
011713C1 mov ebp,esp
011713C3 sub esp,0CCh
011713C9 pus...[/QUOTE]
01171418 jmp wmain+2Eh (11713EEh) 这不就是吗
你这是明显没经过优化的代码
|
能力值:
( LV13,RANK:410 )
|
-
-
8 楼
for(i = 0; i < 10; i++)
011713E5 mov dword ptr [i],0 //赋值 i=0
011713EC jmp wmain+37h (11713F7h) //先进行条件检查于11713f7
处
011713EE mov eax,dword ptr [i]
011713F1 add eax,1
011713F4 mov dword ptr [i],eax
011713F7 cmp dword ptr [i],0Ah //检查条件i<10
011713FB jge wmain+5Ah (117141Ah) //跳转条件为大于或等于
{
printf("%d\n",i);
011713FD mov esi,esp //如果未满足条件, 执行for循环体内的代码
011713FF mov eax,dword ptr [i]
01171402 push eax
01171403 push offset string "%d\n" (1175740h)
01171408 call dword ptr [__imp__printf (11782D4h)]
0117140E add esp,8
01171411 cmp esi,esp
01171413 call @ILT+315(__RTC_CheckEsp) (1171140h)
}
01171418 jmp wmain+2Eh (11713EEh) //返回进行下一轮循环
scanf("");
0117141A mov esi,esp //如果满足条件,这里就已经循环.
0117141C push offset string "" (117573Ch)
01171421 call dword ptr [__imp__scanf (11782DCh)]
01171427 add esp,4
0117142A cmp esi,esp
0117142C call @ILT+315(__RTC_CheckEsp) (1171140h)
return 0;
01171431 xor eax,eax
}
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
嗨,我这眼睛是出气的了,谢谢你了,朋友。
|
|
|