Guest User

Untitled

a guest
Sep 22nd, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.69 KB | None | 0 0
  1. .file "catalan.c" #Hace referencia al archivo en su codigo original "catalan.c"
  2. .comm res,8,8 #declara un área de memoria a la variable res ya que es un dato sin inicializar
  3. .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.
  4. .LC0: # etiqueta de segmento de codigo
  5. .string "\t\tNUMEROS DE CATALAN" #Impresión de la cadena "NUMEROS DE CATALAN" etiquetada como .LC0
  6. .LC1: # etiqueta de segmento de codigo
  7. .string "Numero: " #Impresión de la cadena "Numero:" etiquetada como .LC1
  8. .LC2: # etiqueta de segmento de codigo
  9. .string "%lf" #Lectura por teclado de tipo dato flotante etiquetado como LC2
  10. .LC3: # etiqueta de segmento de codigo
  11. .string "Catalan:%.0lf" #Impresión de la cadena "Catalan: " mas lectura de teclado de tipo flotante etiquetado como LC3
  12. .text #sección de texto, indica donde van a estar las instrucciones
  13. .globl main # comunica al ensamblador que la etiqueta con nombre main será globalmente visible en cualquier parte de este programa
  14. .type main, @function #main como una función (Indica que puede acceder en cualquier función del programa)
  15. main: #etiqueta de main
  16. .LFB0: #etiqueta local, que normalmente se usan como destinos de sucursales dentro de una función.
  17. .cfi_startproc #Se utiliza al comienzo de cada función. Se inicializan algunas estructuras de datos internas y emiten las instrucciones iniciales CFI.
  18. pushl %ebp #preserva marco de pila anterior
  19. .cfi_def_cfa_offset 8 #Modifica una regla para el cálculo, el desplazamiento es 8.
  20. .cfi_offset 5, -8 #Valor anterior de registro (5), se guarda en el desplazamiento (-8)
  21. movl %esp, %ebp #actualiza marco de pila
  22. .cfi_def_cfa_register 5 #A partir de ahora 5 se utilizara en lugar del anterior.
  23. andl $-16, %esp #Suma de $-16 al apuntador de pila
  24. subl $32, %esp #Reserva 32 bytes en la pila
  25. movl 8(%ebp), %eax #Mueve el apuntador de marco de pila 8 a %eax
  26. movl %eax, 24(%esp) #Mueve %eax al apuntador de pila 24
  27. movl 12(%ebp), %eax #Mueve el apuntador de marco de pila 12 a %eax
  28. movl %eax, 28(%esp) #Mueve %eax al apuntador de pila 28
  29. movl $.LC0, (%esp) #Mueve $.LC0 al apuntador de pila
  30. call puts #Llama a la función para agregar variable
  31. movl $.LC1, %eax #Mueve $.LC1 a %eax
  32. movl %eax, (%esp) #Mueve %eax al apuntador de pila
  33. call printf #Llama a la función imprimir
  34. movl $.LC2, %eax #Mueve $.LC2 a %eax
  35. leal 24(%esp), %edx #Mueve el apunatdor de pila 24 al registro de datos usado para una operación de entrada/salida
  36. movl %edx, 4(%esp) #Mueve %edx al apuntador de pila 4
  37. movl %eax, (%esp) #Mueve %eax al apuntador de pila
  38. call __isoc99_scanf #LLama a la funci{on __isoc99_scanf
  39. fldl 24(%esp) #apuntador de marco de pila a 24 declarado como double
  40. fstpl (%esp) #Se apila el valor como parametro para la llamada a la función printf.
  41. call numeroscatalan #Llama a la función numeroscatalan
  42. fstpl res #Desapila el contenido de %st(0) y lo mueve a la variable res.
  43. fldl res #res es declarado como .double
  44. movl $.LC3, %eax #Movemos la cadena y lectura de dato en .LC3 a %eax
  45. fstpl 4(%esp) #Desapila el contenido del tope de pila y lo mueve al apuntador de pila 4
  46. movl %eax, (%esp) #Mueve %eax al apuntador de pila
  47. call printf #Llama a la función printf
  48. leave #se prepara la pila para el retorno
  49. .cfi_restore 5 #La norma para el 5 es ahora la misma que al comienzo de la función
  50. .cfi_def_cfa 4, 4 #Toma el contenido del registro 4 y lo añade a 4
  51. ret #retorno de procedimiento (equivalente al return y fin, retorna 1)
  52. .cfi_endproc #Se cierra la función.
  53. .LFE0: #etiqueta local, que normalmente se usan como destinos de sucursales dentro de una función.
  54. .size main, .-main #Generado por los compiladores para incluir información de depuración auxiliar en la tabla de símbolos
  55. .globl numeroscatalan #comunica al ensamblador que la etiqueta con nombre numeroscatalan será globalmente visible en cualquier parte de este programa
  56. .type numeroscatalan, @function #numeroscatalan como una función (Indica que puede acceder en cualquier función del programa)
  57. numeroscatalan: #etiqueta de numeroscatalan
  58. .LFB1: #etiqueta local, que normalmente se usan como destinos de sucursales dentro de una función.
  59. .cfi_startproc #Se utiliza al comienzo de cada función. Se inicializan algunas estructuras de datos internas y emiten las instrucciones iniciales CFI.
  60. pushl %ebp # preserva marco de pila anterior
  61. .cfi_def_cfa_offset 8 #Modifica una regla para el cálculo, el desplazamiento es 8.
  62. .cfi_offset 5, -8 #Valor anterior de registr (5), se guarda en el desplazamiento (-8)
  63. movl %esp, %ebp #actualiza marco de pila
  64. .cfi_def_cfa_register 5 #A partir de ahora 5 se utilizara en lugar del anterior.
  65. subl $40, %esp #Reservamos 40 bytes en la pila
  66. movl 8(%ebp), %eax #Mueve el apuntador de marco de pila 8 a %eax
  67. movl %eax, -16(%ebp) #Mueve %eax al apuntador de marco de pila -16
  68. movl 12(%ebp), %eax #Mueve el apuntador de marco de pila 12 a %eax
  69. movl %eax, -12(%ebp) #Mueve %eax al apuntador de marco de pila -12
  70. fldl -16(%ebp) #apuntador de marco de pila a -16 declarado como .double
  71. fldz #Introduce el número cero en ST. (Apila +0.0)
  72. fucomip %st(1), %st #Revisa si los valores en $st(1) y en %st son validos y desapila
  73. fstp %st(0) #Desapila el dato del tope de la pila y lo mueve a otro registro(%st(0))
  74. jp .L3 #Saltamos a .L3 si hay paridad o salta si la paridad es par. (El salto se efectúa si PF = 1. )
  75. fldl -16(%ebp) #apuntador de marco de pila a -16 declarado como double
  76. fldz #Introduce el número cero en ST. (Apila +0.0)
  77. fucomip %st(1), %st #Revisa si los valores en $st(1) y en %st son validos y desapila
  78. fstp %st(0) #Desapila el dato del tope de la pila y lo mueve a otro registro(%st(0))
  79. jne .L3 #Salta a .L3 si no es igual o si no es cero
  80. .L6: #Etiqueta de segmento de código
  81. fld1 #Introduce el número cero en ST. (Apila +1.0)
  82. jmp .L5 #Salto incondicional directo a .L5
  83. .L3: #Etiqueta de segmento de código
  84. fldl -16(%ebp) #apuntador de marco de pila a -16 declarado como .double
  85. fld %st(0) #Apila un dato flotante al tope de la fila
  86. faddp %st, %st(1) #Suma %st con %st(1) y guarda el resultado en %st(1)
  87. fld1 #Introduce el número cero en ST. (Apila +1.0)
  88. fsubrp %st, %st(1) #Resta %st(1) a %st que son valores de punto flotante
  89. fld %st(0) #Apila un dato flotante al tope de la fila
  90. faddp %st, %st(1) #Suma %st con %st(1) y guarda el resultado en %st(1)
  91. fldl -16(%ebp) #apuntador de marco de pila a -16 declarado como .double
  92. fld1 #Introduce el número cero en ST. (Apila +1.0)
  93. faddp %st, %st(1) #Suma %st con %st(1) y guarda el resultado en %st(1)
  94. fdivrp %st, %st(1) #Divide %st entre %st(1) guarda el resultado en %st(1) y desapila %st
  95. fstpl -24(%ebp) #Desapila el contenido del tope de pila y lo mueve al apuntador de pila -16
  96. fldl -16(%ebp) #Apuntador de marco de pila a -16 declarado como .double
  97. fld1 #Introduce el número cero en ST. (Apila +1.0)
  98. fsubrp %st, %st(1) #Resta %st(1) a %st que son valores de punto flotante
  99. fstpl (%esp) #Se apila el valor como parametro para la llamada a la función printf.
  100. call numeroscatalan #Llamada ala función numeroscatalan
  101. fmull -24(%ebp) #Multiplica el tope de pila por valor de 64 bytes
  102. .L5: #Etiqueta de segmento de código
  103. leave #se prepara la pila para el retorno
  104. .cfi_restore 5 #La norma para el 5 es ahora la misma que al comienzo de la función
  105. .cfi_def_cfa 4, 4 #Toma el contenido del registro 4 y lo añade a 4
  106. ret #retorno de procedimiento(equivalente al returno y fin, retorna el valor del numero catalan)
  107. .cfi_endproc # Se cierra la función
  108. .LFE1: #etiqueta local, que normalmente se usan como destinos de sucursales dentro de una función.
  109. .size numeroscatalan, .-numeroscatalan # Generado por los compiladores para incluir información de depuración auxiliar en la tabla de símbolos
  110. .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)
  111. .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