.file "programa.c" #Nombre del archivo
.def ___main; .scl 2; .type 32; .endef
.section .rdata,"dr"
LC0: #Etiqueta L0
.ascii "A[%d]= \\0" #Texto ancii
LC1: #Etiqueta L1
.ascii "%d\\0" #Texto ancii
LC2: #Etiqueta L2
.ascii " %d \\0" #Texto ancii
LC3: #Etiqueta L3
.ascii "\\12\\0" #Texto ancii
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main: #Main
LFB6: #Etiqueta
.cfi_startproc
pushl %ebp #Instrucciones de pila
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp #Instrucciones de transferencia
son utilizados para mover los
contenidos
.cfi_def_cfa_register 5
andl $-16, %esp #Realiza la conjunción de los
operandos bit por bit.
subl $48, %esp #La fuente se resta del destino
y es el resultado almacena en el
destino.
call ___main #Llama a una subrutina
movl $0, 44(%esp) #Función de retorno
jmp L2 #Salta a L2
L3: #Etiqueta L3
movl 44(%esp), %eax #Mueve valores a eax
incl %eax #Añade un operador binario de
destino sin firmar
movl %eax, 4(%esp) #Guarda nuevo valor en 4 de esp
movl $LC0, (%esp) #Apunta LC0 a esp
call _printf #Pide que se imprima
movl 44(%esp), %eax #Mueve el valor de esp a eax
leal 0(,%eax,4), %edx #Transfiere la dirección de
eax para el registro edx
leal 24(%esp), %eax #Transfiere la dirección de
esp para el registro eax
addl %edx, %eax #Añade edx a eax y sustituye
el contenido original de eax.
movl %eax, 4(%esp) #Mueve el contenido de eax a esp
movl $LC1, (%esp) #Apunta LC1 a esp
call _scanf #Pide leer variable
incl 44(%esp) #Añade un operador binario de
destino sin firmar
Hace que incremente la "i" del arreglo
L2: #Etiqueta L2
cmpl $4, 44(%esp) #Resta fuente de destino y
actualiza las banderas
jle L3 #Salta a L3
movl $0, 44(%esp) #Asigna 0 a esp
hace que se pueda imprimir la primer
linea de arreglo
jmp L4 #Salta a L4
L5: #Etiqueta L5
movl 44(%esp), %eax #Mueve el valor de esp a eax
movl 24(%esp,%eax,4), %eax #Mueve los contenidos
movl %eax, 4(%esp) #Guarda nuevo valor en esp
movl $LC2, (%esp) #Apunta LC2 a esp
call _printf #Llama a printf
incl 44(%esp) #Añade un operador binario de
destino sin firmar
L4: #Etiqueta L4
cmpl $4, 44(%esp) #Resta fuente de destino y
actualiza las banderas
jle L5 #Salta a L5
movl $LC3, (%esp) #Apunta LC3 a esp
call _puts #Llama a puts
Hace salto de linea \\n
movl $4, 44(%esp) #Mueve el valor a esp
jmp L6 #Llama a L6
L7: #Etiqueta L7
movl 44(%esp), %eax #Mueve el valor de esp a eax
movl 24(%esp,%eax,4), %eax #Mueve los contenidos
movl %eax, 4(%esp) #Guarda nuevo valor en esp
movl $LC2, (%esp) #Apunta LC2 a esp
call _printf #Llama a printf
Imprime la inversa
decl 44(%esp) #Sin signo binario sustracción
desde el destino
L6: #Etiqueta L6
cmpl $0, 44(%esp) #Resta fuente de destino y
actualiza las banderas
jns L7 #Salta si se cumple la condición
call _getch #Llama a getch
movl $0, %eax #Asigna 0 a esp
leave #Libera las variables locales
creados por la anterior ENTER
la instrucción mediante la
restauración de SP y BP a su
condición antes de el marco de
pila procedimiento se inicia.
.cfi_restore 5
.cfi_def_cfa 4, 4
ret #Regresa control a SO
.cfi_endproc #Fin del cfi
LFE6: #Etiqueta
.def _puts; .scl 2; .type 32; .endef
.def _printf; .scl 2; .type 32; .endef
.def _scanf; .scl 2; .type 32; .endef
.def _getch; .scl 2; .type 32; .endef