SumaProd.s



### SumaProd.s: ejemplo en esamblador AT&T para Intel x86.
###
### Utiliza scanf() y printf() de la glibc.
###
### Funcionamiento:	z = (y+x)*(a+b)
### Compilar con:       'gcc SumaProd.s -o SumaProd'.
### Probar con:         (x=1, y=2, a=-3, b=-4) -> (z=-21).



.data   ### Inicio de la informacion

# formato para el scanf() y printf(), no tocar

FormatoScan:   .string "%d"
FormatoPrint:   .string "%d\n"

# variables

x:              .int    0
y:              .int    0
z:              .int    0
a:              .int    0
b:              .int    0
Total1:             .int    0
Total2:             .int    0
Total3:             .int    0



.text   ### codigo

                .global main    # Indica donde es el inicio, no tocar

main:   # Inicio, no tocar

# Porciones de codigo

                pushl $x                # get(x)
                pushl $FormatoScan
                call scanf
                addl $8, %esp

                pushl $y                # get(y)
                pushl $FormatoScan
                call scanf
                addl $8, %esp

                pushl $a                # get(a)
                pushl $FormatoScan
                call scanf
                addl $8, %esp

                pushl $b                # get(b)
                pushl $FormatoScan
                call scanf
                addl $8, %esp

                movl x, %eax            # T1=x+y
                addl y, %eax
                movl %eax, Total1

                movl a, %eax            # T2=a+b
                addl b, %eax
                movl %eax, Total2

                movl Total1, %eax           # T3=T1*T2
                mull Total2
                movl %eax, Total3

                movl Total3, %eax           # z=T3
                movl %eax, z

                pushl z                 # put(z)
                pushl $FormatoPrint
                call printf
                addl $8, %esp

                jmp end                 # stop

end:    # Inicio del fin, no tocar
                ret