Estudiante
Compiladores Tarea #7 Código Ensamblador
20 Julio 2011
Elabore un programa codificado en el lenguaje ensambladorde su elección, el cual ejecute el mismo conjunto de instrucciones siguientes (codificados en C) void main() { int alfa, beta, suma; alfa = 3; beta = 5; suma = alfa + beta; } Ejecutelo y proporcionelas instrucciones fuente codificadas en ensamblador, así como las instrucciones para ejecutarlo en su computadora. Primera versión (Sintaxis AT&T.) .data #variables globales alfa: .int 0 beta: .int 0suma: .int 0
.text #seccion de codigo .global _start _start: movl movl movl movl addl movl #salir movl $0, %ebx movl $1, %eax int $0x80
#primer argumento código de salida (exit 0) #segundoargumento numero de llamada al sistema (sys_exit) #llamada al kernel
alfa, %eax beta, %edx $3, %eax $5, %edx %edx, %eax %eax, suma
Compilación $ as -a --gstabs -o sum.o sum.s Enlazado $ ld -s -o sumsum.o Segunda Versión (Sintaxis ATT) .globl main .type main: pushl movl subl movl
3)
main, @function %ebp %esp, %ebp $16, %esp $3, -4(%ebp)
#variables locales se ubican debajo del registro ebp.Dado que se está trabajando con enteros, #los espacios de memoria utilizados serán de 4 bits. 3 se ha guardado en una variable local. (alfa =
movl movl movl leal
(suma=alfa+beta)
$5, -8(%ebp) #Setiene otra variable local que está almacenando 5.(beta=5) -8(%ebp), %eax #el contenido de la variable local beta se almacena en el registro %eax. -4(%ebp), %edx #el contenido de la variable localalfa se almacena en el registro %edx. (%edx,%eax), %eax #leal realiza una suma entre el registro %eax y %edx y almacena el resultado en
#el registro %eax. La operación que se está realizando aquí es:alfa+beta #%eax (el resultado de la suma de alfa+beta, se almacena en otra variable local.
movl %eax, -12(%ebp)
valores de regreso
#dado que se trata de un procedimiento, %eax, que es el...
Regístrate para leer el documento completo.