literal EQU string

Foro dedicado a la programación en todo tipo de sistemas clásicos.
Avatar de Usuario
Bubu
Atari 1040 STf
Atari 1040 STf
Mensajes: 727
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 14 veces
Gracias recibidas: 21 veces

literal EQU string

Mensajepor Bubu » 22 Nov 2018, 10:30

¡Jarl, torpedos!

Estoy pogramando con el ensamblador (en concreto uso PASMO) y me encuentro el siguiente poblema: necesito que un literal equivalga a una cadena. Hasta ahora, cuando un literal quiero que equivalga a un número, pues hago esto:

Código: Seleccionar todo

YEAR EQU 2018


y ya sabéis que cá vez que en el pograma aparece YEAR, el compilador lo sustituye por 2018. Pero ahora necesito asignarle a un litaral no un número, sino una cadena de texto, algo tal que así:

Código: Seleccionar todo

NOMBRE EQU "BUBU"


No encuentro que esto se pueda hacer. ¿Sabéis si se puede o no hacer?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 2679
Registrado: 04 Sep 2009, 20:07
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Nintendo GameBoy
Ubicación: Navarra
Gracias dadas: 48 veces
Gracias recibidas: 196 veces
Contactar:

Re: literal EQU string

Mensajepor zup » 22 Nov 2018, 13:57

Código: Seleccionar todo

micadena:     db 'hola mundo'


Ten en cuenta que equ es "virtual" (si defines algo pero no se usa, no come memoria), mientras que db define una sucesión de bytes muy real.

La etiqueta te sirve para poder apuntar al inicio de la cadena.

Por otra parte, la cadena que he puesto no tiene ningún terminador, ni 0 (estilo C) ni $ff (estilo +3DOS) ni carácter+128
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!

Avatar de Usuario
Bubu
Atari 1040 STf
Atari 1040 STf
Mensajes: 727
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 14 veces
Gracias recibidas: 21 veces

Re: literal EQU string

Mensajepor Bubu » 22 Nov 2018, 14:27

DB no me vale. Tié que ser EQU. Es que lo quiero para tener por un lado una librería genérica:

Código: Seleccionar todo

sprite0: incbin file0
sprite1: incbin file1
sprite2: incbin file2

ld hl, sprite0
ld b, 8
ld a, (hl)
bla bla bla...


Y para usar esta librería, el pogramador tendría 3 archivos con los nombres que quiera, y entóns en su pograma hacer:

Código: Seleccionar todo

file0 EQU "protagonista.bin"
file1 EQU "enemigo.bin"
file2 EQU "coche.bin"


Con esto el pogramador no está obligado a tener los archivos con los nombres que le exija mi librería, sino que con lo del EQU le dice a mi librería (mapea) como se llaman los archivos del pogramador.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
explorer
MSX Turbo R
MSX Turbo R
Mensajes: 269
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias recibidas: 55 veces
Contactar:

Re: literal EQU string

Mensajepor explorer » 22 Nov 2018, 14:34

Según la documentación, no se puede:
EQU
EQUate. Must be preceded by a label. The argument must be a numeric expression, the result is assigned to the label. The label used can't be redefined.


En otros ensambladores se suele usar SET o el operador '=' para hacer asignación de constantes, pero parece ser que en este ensamblador tampoco existen. Solo comenta que los literales pueden ir entre comillas simples y dobles.

Avatar de Usuario
explorer
MSX Turbo R
MSX Turbo R
Mensajes: 269
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias recibidas: 55 veces
Contactar:

Re: literal EQU string

Mensajepor explorer » 22 Nov 2018, 16:08

Bubu escribió:Con esto el programador no está obligado a tener los archivos con los nombres que le exija mi librería, sino que con lo del EQU le dice a mi librería (mapea) como se llaman los archivos del programador.

Puedes hacerlo de otra manera: que la libreríabiblioteca recibe los PUNTEROS a los tres nombres de los archivos, que el programador ha escrito como etiquetas en los INCBIN. De esa manera le das la libertad al programador para que decida él dónde quiere colocar esos archivos.

Sí, la biblioteca podría encargarse de hacer los INCBIN, pero... no tendríamos mucho control del lugar donde están. Imagínate que en alguna ocasión, por temas de velocidad, el programador deseara que uno de esos archivos comenzase en dirección múltiplo de $0100.

Avatar de Usuario
explorer
MSX Turbo R
MSX Turbo R
Mensajes: 269
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias recibidas: 55 veces
Contactar:

Re: literal EQU string

Mensajepor explorer » 22 Nov 2018, 16:32

Creo que lo puedes hacer... con una MACRO.

Código: Seleccionar todo

pintarsprite MACRO file0,file1,file2
    local sprite0,sprite1,sprite2
    ld hl, sprite0
    ld b, 8
    ld a, (hl)
    ...
    ret
sprite0: incbin file0
sprite1: incbin file1
sprite2: incbin file2
        ENDM

Mírate el ejemplo macro.asm del Pasmo para saber más sobre las macros.

Avatar de Usuario
Bubu
Atari 1040 STf
Atari 1040 STf
Mensajes: 727
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 14 veces
Gracias recibidas: 21 veces

Re: literal EQU string

Mensajepor Bubu » 11 Ene 2019, 00:13

¡Ajá!

En esto de las macros es que soy un poco bastante novato, jiji, he de estudiar. ¿Y con las macros se podría tamién sustituir mnemónicos? P.ej.:

- Cá vez que necesite IX+1 quiero escribir _ancho
- Cá vez que necesite IX+2 quiero usar _alto
etc:

Código: Seleccionar todo

ld b, (_ancho)
ld c, (_alto)


Aunque pensándolo bien, es muy parecido a esto:

Código: Seleccionar todo

_ancho EQU +1
_alto EQU +2

ld b, (ix + _ancho)
ld c, (ix + _alto)
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!


Volver a “Programación”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado