Problema: Calcular la media en ASM

Iniciado por snakingmax, Agosto 08, 2011, 06:07:02 PM

Tema anterior - Siguiente tema

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

Agosto 08, 2011, 06:07:02 PM Ultima modificación: Agosto 08, 2011, 07:50:37 PM por snakingmax
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
BITS 32
section .data

section .text

global _start
_start: ;
mov eax, 0 ; eax empieza valiendo cero (inicializar a cero)
add eax, 7 ; primera suma
add eax, 8 ; segunda suma
add eax, 5 ; tercera suma...
add eax, 2
add eax, 9
add eax, 1
add eax, 3 ; ultima suma.

mov ecx, 8 ; hay 8 sumandos
div ecx ; Dividimos entre 8 para calcular la media

add eax, 48 ; El caracter cero es el ASCII numero 48 asi que se lo sumamos al resultado
            ; para pasar el valor a codigo ascii y asi sacarlo por pantalla

push eax ; Metemos el valor de eax ya definitivo en la pila

; Ahora vamos a hacer la llamada a write, el syscall de linux numero 4
; que necesita 3 parámetros

mov ebx, 1 ; Primer parametro necesario para la llamada, Descriptor de fichero 1
mov ecx, esp ; Segundo parametro referencia al resultado que esta en ESP
mov edx, 1 ;Longitud del resultado (en bytes).
mov eax, 4 ;Writte es el syscall numero 4
int 0x80 ; llamar al sistema operativo

;Cuando termine la llamada, hay que finalizar el programa correctamente.

mov eax, 1          ; exit es la syscall número 1
mov ebx, 0          ; ebx es el primer parámetro, salida correcta, un 0
int 0x80