Consider the following loop that accesses the array elements x[0], x[1], ... x[N-1]:
for(int i = 0; i < N; i++) {
x[i] = 10;
}
The code generated might look like this:
**** for(int i = 0; i < N; i++) {
movl $0, -8(%ebp)
jmp .L2
.L3:
**** x[i] = 10;
movl -8(%ebp), %edx ; -8(%ebp) is i
movl -16(%ebp), %eax ; -16(%ebp) is the beginning address of array x
movl $10, (%eax,%edx,4) ; address: %eax + 4 * %edx
addl $1, -8(%ebp) ; i++
.L2:
movl -8(%ebp), %eax
cmpl -12(%ebp), %eax
jl .L3 ; if (i < N) goto L3