//Etiqueta con el string a imprimir.
.LC0:
.string "%d\\n"
.text
//Se declara main como una etiqueta global.
//para que todos puedan accesar a ella
.globl main
.type main, @function
main:
//Instrucciones de inicio para reservar espacio
pushl %ebp
movl %esp, %ebp
subl $32, %esp
//Aqui asignamos 1, al registro 28(%esp), que
//seria la variable i, o el contador del for
movl $1, 28(%esp)
//Brincamos a la etiqueta .L2
jmp .L2
.L4:
//Movemos el valor del registro a eax
movl 28(%esp), %eax
//Y para saber si es par o impar le aplicamos
//la operacion AND, y guardamos el resultado en eax
andl $1, %eax
//Lo comparamos con sigo mismo para saber si es 0(par)
testl %eax, %eax
//Si no es 0(jne = jump when not equal), brincamos a .L3
jne .L3
//SI es 0, movemos el contenido de la etiqueta a eax
movl $.LC0, %eax
//Movemos el valor guardado en el registro 28(%esp) a edx
movl 28(%esp), %edx
//Ahora movemos edx, el valor del registro, al offset 4 del stack
movl %edx, 4(%esp)
//Y movemos el string al inicio.
movl %eax, (%esp)
//Lo imprimimos
call printf
.L3:
addl $1, 28(%esp)
.L2:
//Comparamos el registro que guarda el contador
//con 10, para saber si volver a repetir el ciclo
cmpl $10, 28(%esp)
//Si el valor del registro es menor o igual a 10
//brincamos a .L4
jle .L4
//Si no es asi, termino el ciclo, entonces
//liberamos el stack y terminamos
leave
ret