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:
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