Skip to content

Instantly share code, notes, and snippets.

@pepgonzalez
Created March 6, 2012 13:29
Show Gist options
  • Save pepgonzalez/1986276 to your computer and use it in GitHub Desktop.
Save pepgonzalez/1986276 to your computer and use it in GitHub Desktop.
.file "algo.c" #nombre del archivo
.section .rodata
.align 8
.LC0: #etiqueta
.string "Ingrese el elemento %d del arreglo:" #definicion de string
.LC1: #etiqueta
.string "%d" #string
.align 8 #guardado de variables para 64 bits
.LC2:
.string "\n\n Ingrese el numero que se va a buscar en el arreglo:" #string
.align 8 #guardado de variables para 64 bits
.LC3:
.string "\n\n El numero %d aparece %d veces" #string
.text #empiezan instrucciones
.globl main #declarar main como global
.type main, @function #declarar main como funcion
main: #main
.LFB0: #etiqueta
.cfi_startproc #se utiliza al comienzo de funcion
pushq %rbp #copia registro al stack
.cfi_def_cfa_offset 16 #define reglas del calculo de funcion
movq %rsp, %rbp #cambio de direccion de rsp
.cfi_offset 6, -16 #guarda el valor anterior del registro
.cfi_def_cfa_register 6 #cambia las reglas de calculo de funcion
subq $64, %rsp #se reservan bits
movl $0, -8(%rbp) #asigna cero una parte del registro rbp
movl $0, -4(%rbp)
jmp .L2 #se va a la etiqueta .L2
.L3: #etiquta
movl $.LC0, %eax #string se mueve al inicio de la pila
movl -4(%rbp), %edx #valor de -4 de rpb apunta a edx
movl %edx, %esi #movimiento de variables
movq %rax, %rdi #Movimiento de variables
movl $0, %eax #asigna cero a eax
call printf #imprime
movl -4(%rbp), %eax #mueve valor de rpb a eax
cltq #desplazamiento de puntero de 64 bits
leaq 0(,%rax,4), %rdx #carga direcciones de rax a rdx
leaq -64(%rbp), %rax #carga direccion de -64 de rpb a rax
leaq (%rax,%rdx), %rdx #multiplica rax y rdx y lo guarda en rdx
movl $.LC1, %eax #mueve contenido de .LC1 a eax
movq %rdx, %rsi #movimiento de variables
movq %rax, %rdi #movimiento de variable
movl $0, %eax #asigna cero a eax
call __isoc99_scanf #se llama el scanf
addl $1, -4(%rbp) #suma valor rbp en -4
.L2: #etiqueta
cmpl $10, -4(%rbp) #comparacion de valores
jle .L3 #salta a la etuiqueta .L3
movl $.LC2, %eax #mueve el contenido de .LC2 a eax
movq %rax, %rdi #movimiento de variables
movl $0, %eax #asigna cero a eax
call printf #se llama a impresion
movl $.LC1, %eax #mueve el contenido de .LC1 a eax
leaq -12(%rbp), %rdx #carga direccion de -12 de rbp a rdx
movq %rdx, %rsi #movimiento de variables
movq %rax, %rdi #movimiento de variables
movl $0, %eax #asigna cero a eax
call __isoc99_scanf #se llama a scanf
movl $0, -4(%rbp) #asigna cero rpb en -4
jmp .L4 #salta a etuiqueta .L4
.L6: #etiqueta
movl -4(%rbp), %eax #mueve el conetnido de rbp en -4 a eax
cltq #deplazamiento de puntero de 64 bits
movl -64(%rbp,%rax,4), %edx #valor de -64 de rbp y rax apuntan a edx
movl -12(%rbp), %eax #valor de -12 de rbp apunta eax
cmpl %eax, %edx #comparacion de variables
jne .L5 #salto a .L5
addl $1, -8(%rbp) #asigna 1 a -8rbp
.L5: #etiqueta
addl $1, -4(%rbp) #asigna 1 a -4rbp
.L4: #etiqueta
cmpl $10, -4(%rbp) #comparacion de valores
jle .L6 #salto a etiqueta .L6
movl -12(%rbp), %ecx #valor de -12 de rbp apunta a ecx
movl $.LC3, %eax #mueve el contenido de .LC3 a eax
movl -8(%rbp), %edx #mueve el contendio de rbp en -8 a edx
movl %ecx, %esi #comparacion de variables
movq %rax, %rdi #comparacion de variables
movl $0, %eax #asigna cero a eax
call printf #llama a impresion
movl $10, %edi #asigna el valor de 10 a edi
call putchar #llama al I/O
movl $0, %eax #asigna cero a eax
leave #libera variables locales
.cfi_def_cfa 7, 8 #registro de instrucciones y guardado
ret #regresa al control de SO
.cfi_endproc #fin del .cfi
.LFE0: #etiqueta
.size main, .-main parametros del SO
.ident "GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2"
.section .note.GNU-stack,"",@progbits
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment