comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Problema: Calcular la media en ASM

  • 0 Respuestas
  • 1841 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado snakingmax

  • *
  • Underc0der
  • Mensajes: 87
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Blog de SnakingMax
    • Email
« en: Agosto 08, 2011, 06:07:02 pm »
Bueno, hoy horrorc0de me propuso un problema por msn. Calcular la media de los siguientes valores:
7, 8, 5, 2, 9, 1, 0, 3
E imprimirla por pantalla.

Esta es mi solución para ASM Linux x86:

Código: ASM
  1. BITS 32
  2. section .data
  3.  
  4. section .text
  5.  
  6. global _start
  7. _start: ;
  8. mov eax, 0 ; eax empieza valiendo cero (inicializar a cero)
  9. add eax, 7 ; primera suma
  10. add eax, 8 ; segunda suma
  11. add eax, 5 ; tercera suma...
  12. add eax, 2
  13. add eax, 9
  14. add eax, 1
  15. add eax, 3 ; ultima suma.
  16.  
  17. mov ecx, 8 ; hay 8 sumandos
  18. div ecx ; Dividimos entre 8 para calcular la media
  19.  
  20. add eax, 48 ; El caracter cero es el ASCII numero 48 asi que se lo sumamos al resultado
  21.             ; para pasar el valor a codigo ascii y asi sacarlo por pantalla
  22.  
  23. push eax ; Metemos el valor de eax ya definitivo en la pila
  24.  
  25. ; Ahora vamos a hacer la llamada a write, el syscall de linux numero 4
  26. ; que necesita 3 parámetros
  27.  
  28. mov ebx, 1 ; Primer parametro necesario para la llamada, Descriptor de fichero 1
  29. mov ecx, esp ; Segundo parametro referencia al resultado que esta en ESP
  30. mov edx, 1 ;Longitud del resultado (en bytes).
  31. mov eax, 4 ;Writte es el syscall numero 4
  32. int 0x80 ; llamar al sistema operativo
  33.  
  34. ;Cuando termine la llamada, hay que finalizar el programa correctamente.
  35.  
  36. mov eax, 1          ; exit es la syscall número 1
  37. mov ebx, 0          ; ebx es el primer parámetro, salida correcta, un 0
  38. int 0x80
« Última modificación: Agosto 08, 2011, 07:50:37 pm por snakingmax »

 

¿Te gustó el post? COMPARTILO!