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