Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .file "catalan.c" #Hace referencia al archivo en su codigo original "catalan.c"
- .comm res,8,8 #declara un área de memoria a la variable res ya que es un dato sin inicializar
- .section .rodata # Sección de datos, en esta sección se colocan los datos iniciados, recibe el nombre de rodata ya que los datos nunca son modificados.
- .LC0: # etiqueta de segmento de codigo
- .string "\t\tNUMEROS DE CATALAN" #Impresión de la cadena "NUMEROS DE CATALAN" etiquetada como .LC0
- .LC1: # etiqueta de segmento de codigo
- .string "Numero: " #Impresión de la cadena "Numero:" etiquetada como .LC1
- .LC2: # etiqueta de segmento de codigo
- .string "%lf" #Lectura por teclado de tipo dato flotante etiquetado como LC2
- .LC3: # etiqueta de segmento de codigo
- .string "Catalan:%.0lf" #Impresión de la cadena "Catalan: " mas lectura de teclado de tipo flotante etiquetado como LC3
- .text #sección de texto, indica donde van a estar las instrucciones
- .globl main # comunica al ensamblador que la etiqueta con nombre main será globalmente visible en cualquier parte de este programa
- .type main, @function #main como una función (Indica que puede acceder en cualquier función del programa)
- main: #etiqueta de main
- .LFB0: #etiqueta local, que normalmente se usan como destinos de sucursales dentro de una función.
- .cfi_startproc #Se utiliza al comienzo de cada función. Se inicializan algunas estructuras de datos internas y emiten las instrucciones iniciales CFI.
- pushl %ebp #preserva marco de pila anterior
- .cfi_def_cfa_offset 8 #Modifica una regla para el cálculo, el desplazamiento es 8.
- .cfi_offset 5, -8 #Valor anterior de registro (5), se guarda en el desplazamiento (-8)
- movl %esp, %ebp #actualiza marco de pila
- .cfi_def_cfa_register 5 #A partir de ahora 5 se utilizara en lugar del anterior.
- andl $-16, %esp #Suma de $-16 al apuntador de pila
- subl $32, %esp #Reserva 32 bytes en la pila
- movl 8(%ebp), %eax #Mueve el apuntador de marco de pila 8 a %eax
- movl %eax, 24(%esp) #Mueve %eax al apuntador de pila 24
- movl 12(%ebp), %eax #Mueve el apuntador de marco de pila 12 a %eax
- movl %eax, 28(%esp) #Mueve %eax al apuntador de pila 28
- movl $.LC0, (%esp) #Mueve $.LC0 al apuntador de pila
- call puts #Llama a la función para agregar variable
- movl $.LC1, %eax #Mueve $.LC1 a %eax
- movl %eax, (%esp) #Mueve %eax al apuntador de pila
- call printf #Llama a la función imprimir
- movl $.LC2, %eax #Mueve $.LC2 a %eax
- leal 24(%esp), %edx #Mueve el apunatdor de pila 24 al registro de datos usado para una operación de entrada/salida
- movl %edx, 4(%esp) #Mueve %edx al apuntador de pila 4
- movl %eax, (%esp) #Mueve %eax al apuntador de pila
- call __isoc99_scanf #LLama a la funci{on __isoc99_scanf
- fldl 24(%esp) #apuntador de marco de pila a 24 declarado como double
- fstpl (%esp) #Se apila el valor como parametro para la llamada a la función printf.
- call numeroscatalan #Llama a la función numeroscatalan
- fstpl res #Desapila el contenido de %st(0) y lo mueve a la variable res.
- fldl res #res es declarado como .double
- movl $.LC3, %eax #Movemos la cadena y lectura de dato en .LC3 a %eax
- fstpl 4(%esp) #Desapila el contenido del tope de pila y lo mueve al apuntador de pila 4
- movl %eax, (%esp) #Mueve %eax al apuntador de pila
- call printf #Llama a la función printf
- leave #se prepara la pila para el retorno
- .cfi_restore 5 #La norma para el 5 es ahora la misma que al comienzo de la función
- .cfi_def_cfa 4, 4 #Toma el contenido del registro 4 y lo añade a 4
- ret #retorno de procedimiento (equivalente al return y fin, retorna 1)
- .cfi_endproc #Se cierra la función.
- .LFE0: #etiqueta local, que normalmente se usan como destinos de sucursales dentro de una función.
- .size main, .-main #Generado por los compiladores para incluir información de depuración auxiliar en la tabla de símbolos
- .globl numeroscatalan #comunica al ensamblador que la etiqueta con nombre numeroscatalan será globalmente visible en cualquier parte de este programa
- .type numeroscatalan, @function #numeroscatalan como una función (Indica que puede acceder en cualquier función del programa)
- numeroscatalan: #etiqueta de numeroscatalan
- .LFB1: #etiqueta local, que normalmente se usan como destinos de sucursales dentro de una función.
- .cfi_startproc #Se utiliza al comienzo de cada función. Se inicializan algunas estructuras de datos internas y emiten las instrucciones iniciales CFI.
- pushl %ebp # preserva marco de pila anterior
- .cfi_def_cfa_offset 8 #Modifica una regla para el cálculo, el desplazamiento es 8.
- .cfi_offset 5, -8 #Valor anterior de registr (5), se guarda en el desplazamiento (-8)
- movl %esp, %ebp #actualiza marco de pila
- .cfi_def_cfa_register 5 #A partir de ahora 5 se utilizara en lugar del anterior.
- subl $40, %esp #Reservamos 40 bytes en la pila
- movl 8(%ebp), %eax #Mueve el apuntador de marco de pila 8 a %eax
- movl %eax, -16(%ebp) #Mueve %eax al apuntador de marco de pila -16
- movl 12(%ebp), %eax #Mueve el apuntador de marco de pila 12 a %eax
- movl %eax, -12(%ebp) #Mueve %eax al apuntador de marco de pila -12
- fldl -16(%ebp) #apuntador de marco de pila a -16 declarado como .double
- fldz #Introduce el número cero en ST. (Apila +0.0)
- fucomip %st(1), %st #Revisa si los valores en $st(1) y en %st son validos y desapila
- fstp %st(0) #Desapila el dato del tope de la pila y lo mueve a otro registro(%st(0))
- jp .L3 #Saltamos a .L3 si hay paridad o salta si la paridad es par. (El salto se efectúa si PF = 1. )
- fldl -16(%ebp) #apuntador de marco de pila a -16 declarado como double
- fldz #Introduce el número cero en ST. (Apila +0.0)
- fucomip %st(1), %st #Revisa si los valores en $st(1) y en %st son validos y desapila
- fstp %st(0) #Desapila el dato del tope de la pila y lo mueve a otro registro(%st(0))
- jne .L3 #Salta a .L3 si no es igual o si no es cero
- .L6: #Etiqueta de segmento de código
- fld1 #Introduce el número cero en ST. (Apila +1.0)
- jmp .L5 #Salto incondicional directo a .L5
- .L3: #Etiqueta de segmento de código
- fldl -16(%ebp) #apuntador de marco de pila a -16 declarado como .double
- fld %st(0) #Apila un dato flotante al tope de la fila
- faddp %st, %st(1) #Suma %st con %st(1) y guarda el resultado en %st(1)
- fld1 #Introduce el número cero en ST. (Apila +1.0)
- fsubrp %st, %st(1) #Resta %st(1) a %st que son valores de punto flotante
- fld %st(0) #Apila un dato flotante al tope de la fila
- faddp %st, %st(1) #Suma %st con %st(1) y guarda el resultado en %st(1)
- fldl -16(%ebp) #apuntador de marco de pila a -16 declarado como .double
- fld1 #Introduce el número cero en ST. (Apila +1.0)
- faddp %st, %st(1) #Suma %st con %st(1) y guarda el resultado en %st(1)
- fdivrp %st, %st(1) #Divide %st entre %st(1) guarda el resultado en %st(1) y desapila %st
- fstpl -24(%ebp) #Desapila el contenido del tope de pila y lo mueve al apuntador de pila -16
- fldl -16(%ebp) #Apuntador de marco de pila a -16 declarado como .double
- fld1 #Introduce el número cero en ST. (Apila +1.0)
- fsubrp %st, %st(1) #Resta %st(1) a %st que son valores de punto flotante
- fstpl (%esp) #Se apila el valor como parametro para la llamada a la función printf.
- call numeroscatalan #Llamada ala función numeroscatalan
- fmull -24(%ebp) #Multiplica el tope de pila por valor de 64 bytes
- .L5: #Etiqueta de segmento de código
- leave #se prepara la pila para el retorno
- .cfi_restore 5 #La norma para el 5 es ahora la misma que al comienzo de la función
- .cfi_def_cfa 4, 4 #Toma el contenido del registro 4 y lo añade a 4
- ret #retorno de procedimiento(equivalente al returno y fin, retorna el valor del numero catalan)
- .cfi_endproc # Se cierra la función
- .LFE1: #etiqueta local, que normalmente se usan como destinos de sucursales dentro de una función.
- .size numeroscatalan, .-numeroscatalan # Generado por los compiladores para incluir información de depuración auxiliar en la tabla de símbolos
- .ident "GCC: (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1" # Versión del gcc (utilizado por algunos ensambladores para colocar etiquetas en los archivos de los objetos)
- .section .note.GNU-stack,"",@progbits #SUgerencia para el código enlazador que este fichero objeto no necesita una pila ejecutable
Add Comment
Please, Sign In to add comment