.data
s: .asciz "\nZeros:%d. Positius:%d. Negatius:%d.\n"
sd: .asciz "%d, "
n1: .long 8
v1: .long 7,9,2,3,-4,-5,-6,0
n2: .long 6
v2: .long 1,2,3,-4,-5,-6
n3: .long 1
v3: .long 1
.text
.global main
main:
 pushl $v1
 pushl n1
 call signes
 addl $8, %esp

 pushl $v2
 pushl n2
 call signes
 addl $8, %esp

 pushl $v3
 pushl n3
 call signes
 addl $8, %esp

 movl $0, %ebx
 movl $1, %eax
 int $0x80

signes:
 pushl %ebp
 movl %esp, %ebp
 subl $12, %esp
 pushl %ebx

 movl $0, -4(%ebp)
 movl $0, -8(%ebp)
 movl $0, -12(%ebp)
 movl $0, %ecx
 movl 12(%ebp), %ebx
signes_loop:
 cmpl 8(%ebp), %ecx
 jge signes_endloop # %ecx >= 8(%ebp)

 pushl %ecx
 pushl (%ebx,%ecx,4)
 pushl $sd
 call printf
 addl $8, %esp
 popl %ecx

 cmpl $0, (%ebx,%ecx,4)
# je signes_zero # == 0
 jg signes_posi # > 0
 jl signes_nega # < 0
# signes_zero:
 incl -4(%ebp)
 jmp signes_loopinc
signes_posi:
 incl -8(%ebp)
 jmp signes_loopinc
signes_nega:
 incl -12(%ebp)
# jmp signes_loopinc
signes_loopinc:
 incl %ecx
 jmp signes_loop
signes_endloop:

# pushl %ecx
 pushl -12(%ebp)
 pushl -8(%ebp)
 pushl -4(%ebp)
 pushl $s
 call printf
 addl $16, %esp
# popl %ecx

 popl %ebx
 addl $12, %esp
 popl %ebp
 ret

