### 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