反汇编知识整理--for,while,do-while的循环机制 -- 老码识途任重而道远呀

for的机制

5:        int i=1,j;
00401268   mov         dword ptr [ebp-4],1
6:        for(i=3;i<=10;i+=2)
0040126F   mov         dword ptr [ebp-4],3 (执行for中第一句)
00401276   jmp         main+31h (00401281)  (跳到判断语句)
00401278   mov         eax,dword ptr [ebp-4]//
0040127B   add         eax,2                  //  (执行for中第三句的自加)
0040127E   mov         dword ptr [ebp-4],eax//
00401281   cmp         dword ptr [ebp-4],0Ah// 判断语句
00401285   jg          main+3Fh (0040128f) // ??????
7:        {
8:            j=i;
00401287   mov         ecx,dword ptr [ebp-4]
0040128A   mov         dword ptr [ebp-8],ecx
9:        }
0040128D   jmp         main+28h (00401278) // 跳到执行for中的第二句

for中三句话的先后顺序: 第一句,第三句,第二句

执行过程: 第一句,第二句,程序块 , 第三句,第二句,程序块……

while机制:

5:        int a=5;
00401268   mov         dword ptr [ebp-4],5
6:        while(a>1)
0040126F   cmp         dword ptr [ebp-4],1
00401273   jle         main+30h (00401280) //???????
7:        {
8:            a--;
00401275   mov         eax,dword ptr [ebp-4]
00401278   sub         eax,1
0040127B   mov         dword ptr [ebp-4],eax
9:        }
0040127E   jmp         main+1Fh (0040126f)

do-while机制:


5:        int a=10;
00401268   mov         dword ptr [ebp-4],0Ah
6:        do
7:        {
8:                a--;
0040126F   mov         eax,dword ptr [ebp-4]
00401272   sub         eax,1
00401275   mov         dword ptr [ebp-4],eax
9:        }while(a>4);
00401278   cmp         dword ptr [ebp-4],4
0040127C   jg          main+1Fh (0040126f)  // 从这里可以猜到jg有跳转的功能,那它与jmp有什么不同呢??? 跳到指定的指令地址上去?






你可能感兴趣的:(c,汇编)