循环语句

Tutorial: C与汇编 Category: C语言 Published: 2026-04-07 13:58:26 Views: 20 Likes: 0 Comments: 0
1. 循环语句
  • 汇编前
#include <stdio.h>

int main()
{
    int j = 0;
    int k = 0;

    for (int i = 0; i < 5; i++)
    {
        printf("for 循环迭代: %d\n", i);
    }

    while (j < 5)
    {
        printf("while 循环迭代: %d\n", j);
        j++;
    }

    do
    {
        printf("do...while 循环迭代: %d\n", k);
        k++;
    } while (k < 5);

    return 0;
}
  • 汇编后
5:        int j = 0;
004109A8   mov         dword ptr [ebp-4],0
6:        int k = 0;
004109AF   mov         dword ptr [ebp-8],0
7:
8:        for (int i = 0; i < 5; i++)
004109B6   mov         dword ptr [ebp-0Ch],0
004109BD   jmp         main+38h (004109c8)
004109BF   mov         eax,dword ptr [ebp-0Ch]
004109C2   add         eax,1
004109C5   mov         dword ptr [ebp-0Ch],eax
004109C8   cmp         dword ptr [ebp-0Ch],5
004109CC   jge         main+51h (004109e1)
9:        {
10:           printf("for 循环迭代: %d\n", i);
004109CE   mov         ecx,dword ptr [ebp-0Ch]
004109D1   push        ecx
004109D2   push        offset string "for \xd1\xad\xbb\xb7\xb5\xfc\xb4\xfa: %d\n" (004270ec)
004109D7   call        printf (00410910)
004109DC   add         esp,8
11:       }
004109DF   jmp         main+2Fh (004109bf)
12:
13:       while (j < 5)
004109E1   cmp         dword ptr [ebp-4],5
004109E5   jge         main+73h (00410a03)
14:       {
15:           printf("while 循环迭代: %d\n", j);
004109E7   mov         edx,dword ptr [ebp-4]
004109EA   push        edx
004109EB   push        offset string "while \xd1\xad\xbb\xb7\xb5\xfc\xb4\xfa: %d\n" (004270d8)
004109F0   call        printf (00410910)
004109F5   add         esp,8
16:           j++;
004109F8   mov         eax,dword ptr [ebp-4]
004109FB   add         eax,1
004109FE   mov         dword ptr [ebp-4],eax
17:       }
00410A01   jmp         main+51h (004109e1)
18:
19:       do
20:       {
21:           printf("do...while 循环迭代: %d\n", k);
00410A03   mov         ecx,dword ptr [ebp-8]
00410A06   push        ecx
00410A07   push        offset string "do...while \xd1\xad\xbb\xb7\xb5\xfc\xb4\xfa: %d\n" (004270bc)
00410A0C   call        printf (00410910)
00410A11   add         esp,8
22:           k++;
00410A14   mov         edx,dword ptr [ebp-8]
00410A17   add         edx,1
00410A1A   mov         dword ptr [ebp-8],edx
23:       } while (k < 5);
00410A1D   cmp         dword ptr [ebp-8],5
00410A21   jl          main+73h (00410a03)
24:
25:       return 0;
00410A23   xor         eax,eax
26:   }
Prev: 分支语句 Next: 数组