martes, 3 de mayo de 2022

Z80 - Desensamblador

  Página principal

Z80
Desensamblador


Después de haber programado un ensamblador de procesador Z80, el siguiente paso era crear un desensamblador.
El fichero de entrada debe ser un fichero binario, código maquina del Z80, la salida será un fichero de texto con formato *.asm .
El formato de entrada es:   
  
     ./disam fichero.bin

Si no se especifica nada el fichero de salida será file.asm
Además permite otros argumentos como:

        -pt Salida por pantalla
        -o nombre fichero asm


La mejor prueba es desemsamblar un fichero binario que antes hemos ensamblado con nuestro ensamblador.

/reloj.asm

    org &0
    ld a,&0
    ld b,a
    ld c,a
    ld d,a
    ld e,a
#inicio   
    ld a,&10
    inc b        /incrementar segundos
    cp b
    jr nz,#salto
    ld b,&0
    inc c        /incrementar decimales segundo
    ld a,&6
    cp c
    jr nz,#salto
    inc d        /incrementar minutos
    ld c,&0
    ld a,&10
    cp d
    jr nz,#salto
    ld d,&0
    inc e        /incrementar decimales minutos
    ld a,&6
    cp e
    jr nz,#salto
    ld e,&0
   
#salto
    nop
    jp #inicio
    nop
    nop
   
    end
    LD A,&0         / 00000 > 062 000             
   LD B,A          / 00002 G 071                 
   LD C,A          / 00003 O 079                 
   LD D,A          / 00004 W 087                 
   LD E,A          / 00005 _ 095                 
#salto01
   LD A,&10        / 00006 > 062 010          salto01  
   INC B           / 00008 . 004                 
   CP B            / 00009 . 184                 
   JR NZ,#salto00  / 00010   032 026            /GOTO #salto00  *DIR.00038
   LD B,&0         / 00012 . 006 000             
   INC C           / 00014 . 012                 
   LD A,&6         / 00015 > 062 006             
   CP C            / 00017 . 185                 
   JR NZ,#salto00  / 00018   032 018            /GOTO #salto00  *DIR.00038
   INC D           / 00020 . 020                 
   LD C,&0         / 00021 . 014 000             
   LD A,&10        / 00023 > 062 010             
   CP D            / 00025 . 186                 
   JR NZ,#salto00  / 00026   032 010            /GOTO #salto00  *DIR.00038
   LD D,&0         / 00028 . 022 000             
   INC E           / 00030 . 028                 
   LD A,&6         / 00031 > 062 006             
   CP E            / 00033 . 187                 
   JR NZ,#salto00  / 00034   032 002            /GOTO #salto00  *DIR.00038
   LD E,&0         / 00036 . 030 000             
#salto00
   NOP             / 00038 . 000              salto00  
   JP #salto01     / 00039 . 195 006 000        /GOTO #salto01  *DIR.00006
   NOP             / 00042 . 000                 
   NOP             / 00043 . 000                 
    END

Como pasaba en el ensamblador, la salida de números está en formato decimal.
El código de desensamblado es igual al fichero en lenguaje ensamblador.
Los salto de programa se representan con #salto**

Para ver todos los nemotécnicos admitidos, se pueden ver en los ficheros :
opcodes.txt
z80_code.txt

Espero que sea un principio para que realicéis vuestro propio desensamblador.


PROGRAMAS

Saludos.
Juan Galaz



Bibliografía:
http://www.z80.info/decoding.htm
https://espamatica.com/
http://map.grauw.nl/resources/



No hay comentarios:

Publicar un comentario