I develop the code with x86 gcc.
The C code:
#include <stdio.h> void test() { int i; int array[3] = {0}; for (i = 0; i < 3; i++) printf("array[%d] = %d\n", i, array[i]); } int main(int argc, const char *argv[]) { test(); return 0; }
The assembly code:
.file "init.c" .section .rodata .LC0: .string "array[%d] = %d\n" .text .globl test .type test, @function test: pushl %ebp movl %esp, %ebp subl $40, %esp # Code for array initialization movl $0, -24(%ebp) movl $0, -20(%ebp) movl $0, -16(%ebp) movl $0, -12(%ebp) jmp .L2 .L3: movl -12(%ebp), %eax movl -24(%ebp,%eax,4), %edx movl $.LC0, %eax movl %edx, 8(%esp) movl -12(%ebp), %edx movl %edx, 4(%esp) movl %eax, (%esp) call printf addl $1, -12(%ebp) .L2: cmpl $2, -12(%ebp) jle .L3 leave ret .size test, .-test .globl main .type main, @function main: pushl %ebp movl %esp, %ebp andl $-16, %esp call test movl $0, %eax movl %ebp, %esp popl %ebp ret .size main, .-main .ident "GCC: (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3" .section .note.GNU-stack,"",@progbits