Alguna duda con ASM...

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Responder
Avatar de Usuario
JBGV
Manic Miner
Mensajes: 279
Registrado: Vie Feb 11, 2011 9:16 am

Alguna duda con ASM...

Mensaje por JBGV » Mar Dic 10, 2013 9:45 pm

Hola, pues eso, a ver si alguien me puede ayudar con estas dudas: :roll:

1- Cómo puedo ver "el código comprimido" de (por ejemplo) un gráfico comprimido con el rlezx.c que se maneja en el curso de Compiler? http://wiki.speccy.org/cursos/ensamblador/compresion_rle ?

2- Qué diferencia hay entre usar en ensamblador DEFB, DEFW, DB, EQU ... para guardar datos?

3- Hasta ahora he usado ConTEXT como editor y PASMO, pero veo que hay programas que te indican la posición de memoria, ejecuciones linea a linea con los valores de los registros, etc. Recomendais alguno?

Gugleando me he encontrado con esto , qué os parece? http://www.oshonsoft.com/z80.html

Bueno, saludos y gracias :D

zup
Freddy Hardest
Mensajes: 666
Registrado: Vie Ago 15, 2008 2:43 pm

Re: Alguna duda con ASM...

Mensaje por zup » Mar Dic 10, 2013 10:52 pm

JBGV escribió:Hola, pues eso, a ver si alguien me puede ayudar con estas dudas: :roll:

1- Cómo puedo ver "el código comprimido" de (por ejemplo) un gráfico comprimido con el rlezx.c que se maneja en el curso de Compiler? http://wiki.speccy.org/cursos/ensamblador/compresion_rle ?


Si te refieres a los datos ya comprimidos, imagino que tirando de depurador. Si te refieres al gráfico a partir de los datos comprimidos... habrá que descomprimir primero.

JBGV escribió:2- Qué diferencia hay entre usar en ensamblador DEFB, DEFW, DB, EQU ... para guardar datos?


DEFB y DB son lo mismo, almacenas un byte. DEFW y DW almacenan dos bytes. EQU no almacena nada, solo hace constantes.

db 5, 3 ; esto se codifica como 05, 03
dw 5, 3 ; esto debería generar 05, 00, 03, 00
pi equ 3 ; no genera nada, pero ahora el ensamblador pondrá un 3 donde pongamos pi

JBGV escribió:3- Hasta ahora he usado ConTEXT como editor y PASMO, pero veo que hay programas que te indican la posición de memoria, ejecuciones linea a linea con los valores de los registros, etc. Recomendais alguno?

Gugleando me he encontrado con esto , qué os parece? http://www.oshonsoft.com/z80.html

Bueno, saludos y gracias :D


Mi entorno de desarrollo favorito es ZX Spin. Yo solo hago parches pequeños, estoy seguro de que hay ensambladores mejores. Sin embargo, es de lo mejor para depurar programas.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start...

Avatar de Usuario
JBGV
Manic Miner
Mensajes: 279
Registrado: Vie Feb 11, 2011 9:16 am

Re: Alguna duda con ASM...

Mensaje por JBGV » Mié Dic 11, 2013 7:14 am

Muchas gracias por la respuesta Zup !

No entendía porqué en los listados aparecían DEFW, DB, ... , ya lo se. :D

Voy a dar una oportunidad el ZX Spin a ver si me aclaro, no logro hacer funcionar el programa del enlace que os puse.

zup escribió:Si te refieres a los datos ya comprimidos, imagino que tirando de depurador. Si te refieres al gráfico a partir de los datos comprimidos... habrá que descomprimir primero.


Si, me refería a ver los datos comprimidos, no se muy bien a que te refieres con eso de usar un depurador :oops: , como ves me falta mucho aún.

Creo que es importante tener los datos comprimidos en un listado para poder colocarlos en el programa sin necesidad de conocer una dirección exacta.

Gracias !!

zup
Freddy Hardest
Mensajes: 666
Registrado: Vie Ago 15, 2008 2:43 pm

Re: Alguna duda con ASM...

Mensaje por zup » Mié Dic 11, 2013 10:01 am

Aclarando un poco (escribí lo otro en la tablet a toda prisa)...

Código: Seleccionar todo

org 16384
bytes: db 3,5 ; esto se codifica como 03 05
word: db 3,5 ; esto se codifica como 03 00 05 00
pi equ 3 ; esto no ocupa espacio en memoria

; bytes2: db 32768 ; esto es ilegal, db es de 8 bits y 32768 ocupa 16.

;ld a,bytes ; esto es ilegal, bytes es una dirección de 16 bits.
ld a,(bytes) ; a=3
ld hl,word ; hl=16386 (dirección de word)
ld hl,(word) ; hl=3 (lo que hemos definido en word)
ld a,pi ; a=3
ld a,(pi) ; a=$69
ret

; todo esto se codifica como
; 03 05 03 00 05 00 3A 00 40 21 02 40 2A 02 40 3E 03 3A 03 00 C9


(tal vez debería haber puesto un ejemplo más claro, donde se diferencien mejor los tipos de datos)

En cuanto a lo de usar un depurador... casi todos los depuradores tienen una ventana que permite ver los datos tal cual están almacenados en memoria (en forma de bytes). Solo es cuestión de averiguar dónde están tus datos y cotillear en esa dirección.

Lo del programa del curso de ensamblador: a bote pronto, le falta una directiva org. Con org, le decimos en qué dirección empieza nuestro programa en ensamblador. Si no hay un org, el ensamblador no podrá calcular direcciones absolutas para saltos, punteros y variables... con lo que no va a generar código. Ponle un org 30000 y lo ensamblará bien.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start...

Avatar de Usuario
Metalbrain
Freddy Hardest
Mensajes: 592
Registrado: Lun May 07, 2007 8:17 am
Ubicación: Sevilla
Contactar:

Re: Alguna duda con ASM...

Mensaje por Metalbrain » Mié Dic 11, 2013 12:41 pm

Que yo sepa, lo más común en los ensambladores Z80 era usar DEFB, DEFW, etc... Las versiones más cortas DB, DW, etc... se añadieron posteriormente por influencia de los ensambladores de 80x86. La mayoría de los ensambladores actuales admiten ambas formas, pero puede haber alguno que solo acepte una de ellas.
SevenuP se escribe con u minúscula y P mayúscula.

Z80user
Manic Miner
Mensajes: 215
Registrado: Vie Jun 08, 2007 9:42 am
Ubicación: En un lugar de la mancha
Contactar:

Re: Alguna duda con ASM...

Mensaje por Z80user » Mié Dic 11, 2013 2:14 pm

EQU $
Es otra forma de utilizar una direccion de memoria en lugar de una etiqueta y nos permite darle un offset

valor EQU $+1
rutina LD DE,#0000
LD HL, valor
INC DE
LD [HL], DE
RET
con esto podemos acceder al valor que cargamos en DE

Lo que hace $ es referenciar al primer byte de codigo de la siguiente linea de codigo.
Si posteriormente cambiamos algo como por ejemplo poner LD [IX+#01], D podemos apuntar al valor #01 de esta forma sin tener que estan poniendo y recordando el desplazamiento del byte que queremos modificar.
Cosa que con una etiqueta no podriamos hacer.

-------
El uso de ORG creo que siempre que no se usen saltos absolutos, es decir que se puedan solucionar con JR y no exista un CALL o JP u otros trucos de programacion no deberia de ser necesario el uso de la etiqueta, aunque siempre seria recomendable utilizarla, pero en las rutinas reubicables no seria necesario. En estas rutinas utilizar posiciones de memoria absolutas como por ejemplo acceder y modificar las variables del sistema es licito.
----------
Yo uso el ZXspin para depurar y programas aunque cono ensamblador me quedo con el sjasm.

hay ciertas cosas que no me gustaron del Pasmo. Cada uno tiene sus gustos.

En algunos ensambladores si pones XOR A, B lo sustituyen internamente por XOR A, A y XOR A, B esto permite ahorrar letras al escribir pero personalmente me gusta poner la A aunque el propio nemotecnico implique que solo se puede usar con A.
Cada compilador tiene sus cositas, es encontrar el que mejor se adapte a tus gustos.

Enviado desde mi GT-N7100 mediante Tapatalk
Si vas a tirar Hardware, primero pregunta si alguien lo puede recuperar.
No abandones un ordenador en un vertedero, donalo a alguien.

Avatar de Usuario
JBGV
Manic Miner
Mensajes: 279
Registrado: Vie Feb 11, 2011 9:16 am

Re: Alguna duda con ASM...

Mensaje por JBGV » Mié Dic 11, 2013 9:43 pm

Muchas gracias a todos, vaya lujo de foro :D

zup escribió:(tal vez debería haber puesto un ejemplo más claro, donde se diferencien mejor los tipos de datos)


Está muy claro, muchas gracias por la explicación !! :D , lo entiendo ahora perfectamente.

Z80user escribió:EQU $
Es otra forma de utilizar una direccion de memoria en lugar de una etiqueta y nos permite darle un offset


No tenía ni idea y creo que puede ser muy útil.

Me doy cuenta que programar en ASM es un mundo muy grande :roll:

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 12 invitados