Tod ist unvermeidlich, aber meist unbedeutend...
Mostrando entradas con la etiqueta Ensamblador. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ensamblador. Mostrar todas las entradas

viernes, 5 de abril de 2013

"Ich Bin L0ki" ASM GNU/Linux

;HOLA MUNDO ASM LINUX
;L0ki
section .data
    msg    db "Ich Bin L0ki",0x0A
    size   equ $ - msg

section .text      ;Instrucciones
   global _start 

_start:
    mov edx,size  ;Cargamos el tamanio de la cadena
    mov ecx,msg   ;Cargamos el mensaje
    mov eax,0x04  ;Salida por pantalla
    mov ebx,0x01  ;cargamos a 1 como argumento de la salida por pantalla
    int 0x80      ;Llamada al kernel
    mov eax,0x01  ;Para salir, funcions sys_exit() del kernel
    mov ebx,0x00  ;Codigo de salida 0
    int 0x80      ;Llamada al kernel
Lo único que hace este simple programa es mostrar en pantalla el mensaje "Ich bin L0ki". Simple programa demostrativo de la programación en lenguaje ensamblador en GNU/Linux.

sábado, 23 de marzo de 2013

Instalación del Simulador del Microprocesador Z80 en GNU/Linux

Esta vez vamos a instalar el simulador del microprocesador Z80 en GNU/Linux, para esto vamos a descargar el siguiente archivo:
wget http://wwwhomes.uni-bielefeld.de/achim/z80-asm/z80-asm-current.tar.gz


o también desde aquí
Y lo descomprimimos con:
tar -xzvf z80-asm-current.tar.gz
Una vez hecho esto nos dirigimos a la carpeta descomprimida y instalamos el programa con:
sudo make
Y despues:
sudo make install
Y veremos algo como esto:

Es puramente normal.
Una vez hecho esto vamos a crear un programa para verificar el funcionamiento, el programa es el siguiente:
MAIN:
    LD A,05
    LD B,0x0A
    ADD A,B
    LD (0050H),A
    HALT 

Ahora con el siguiente comando creamos la salida para que el simulador pueda usarla
z80-asm prueba.asm output

Y ahora con el comando
z80-mon
abrimos el simulador.
Cargamos el programa, pulsamos la tecla "L" asi en mayuscula y nos aparecera "Load File: " y escribimos "output", prodremos observar como se cargo el programa:

Pulsamos la tecla "r" minúscula y el programa se ejecutara hasta la instrucción HALT, y ahora nos moveremos a la direccion 0050 para ver el resultado, esto lo hacemos pulsando la tecla "m" minúscula y escribimos 0050H. Ahora podemos ver que en esa localidad de memoria tenemos un
 "0f" esto es un 15 en decimal. Por lo que nuestro programa funciona correctamente!


Loki!

martes, 19 de marzo de 2013

Multiplicación en ASM Z-80

Usando el Microprocesador Z80 programé el siguiente código, cuyo fin es la multiplicación de dos números previamente cargados en memoria, por ejemplo en la localidad 1000H cargamos un 5 y en la localidad 1001H cargamos un 10, y el resultado de la multiplicación lo cargamos en la localidad 1002H.
;Multiplicacion en ASM
;Usando el microprocesador Z80
;@GraggLoki
MAIN: 
    LD A,(1000H) ; A <- (1000H)
    CP 0         ; Comparacion con cero
    JR Z,ETI5    ; Si la bandera Z esta encendida vamos a ETI5
    LD B,A       ; Cargamos a B con el contenido de A
    LD A,(1001H) ; Cargamos a A con el contenido de la dir 1001H
    CP 0        
    JR Z,ETI5    
    CP B         
    JP P,ETI2
    LD C,A
    LD A,0
ETI3:
    ADD A,B
    DEC C       ; C=C-1
    JR NZ,ETI3
ETI5:
    LD (1002H),A
    HALT
ETI2:
    LD C,A
    LD A,0
ETI4:
    ADD A,C
    DEC B
    JR NZ,ETI4
    JR ETI5

Aquí podemos ver que, después de haberse ejecutado el programa, en la localidad 1002H tenemos como resultado un 32 en hexadecimal, que en decimal es 50.
3 * 16 = 48 + 2 = 50



Loki!