# Translation of Loop

While loop
Take an example of this C code. This code is inside some function.
```int a = 4;
int b = 8;
int d = 0;
while(b > a)
{
d = a + 2;
b--;
}
```

Generated assembly code:
```    movl    \$4, -4(%ebp)
movl    \$8, -8(%ebp)
movl    \$0, -12(%ebp)
jmp .L2
.L3:
movl    -4(%ebp), %eax
movl    %eax, -12(%ebp)
subl    \$1, -8(%ebp)
.L2:
movl    -8(%ebp), %eax
cmpl    -4(%ebp), %eax
jg	.L3
```
Location of local variables of the stack (local variables are explained here)
```a => -4(%ebp)
b => -8(%ebp)
d => -12(%ebp)
```
The use of registers as temporary memory is described here
```# a = 4
movl    \$4, -4(%ebp)

# b = 8
movl    \$8, -8(%ebp)

# d = 0
movl    \$0, -12(%ebp)

# jump to label .L2. The condition for the while loop is evaluated at .L2
jmp .L2

# The label .L3. This is the start instruction inside while {}
.L3:

# tmp = a
movl    -4(%ebp), %eax

# tmp = tmp + 2

# d = tmp
movl    %eax, -12(%ebp)

# b = b - 1
subl    \$1, -8(%ebp)

# The instruction for evaluating the condition of while starts here
.L2:

# tmp = b
movl    -8(%ebp), %eax

# compare a to tmp
cmpl    -4(%ebp), %eax

# jump to start of loop block if the above tmp greater than a in above comparison
jg  .L3
```

For Loop
Take example of this C code:

```int a = 4;
int b = 8;
int d = 0;
for(b = 9; b > a; b--)
{
d = a + 2;
}
```
Generated assembly code:
```    movl    \$4, -4(%ebp)
movl    \$8, -8(%ebp)
movl    \$0, -12(%ebp)
movl    \$9, -8(%ebp)
jmp	.L2
.L3:
movl    -4(%ebp), %eax