Karoshi MSX Community
06 de Julio de 2021, 12:26:15 am *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: LD HL,IX+15 ??? ES POSIBLE?  (Leído 5720 veces)
0 Usuarios y 1 Visitante están viendo este tema.
cybernoid
Karoshi Maniac
****
Mensajes: 368



WWW
« : 17 de Noviembre de 2008, 12:35:07 pm »

Hola,

Pues estaba yo tan contento utilizando registros indice cuando me encuentro con esta pequeña dificultad, necesito pasar igualar la dirección de HL con IX+15  ¿como podria hacer esto?


asias Smiley
En línea
SapphiRe_MSX
Visitante
« Respuesta #1 : 17 de Noviembre de 2008, 12:43:35 pm »

Prueba con

Código:
push ix
pop hl
ld de,15
add hl,de

O algo similar, claro está Cheesy
En línea
cybernoid
Karoshi Maniac
****
Mensajes: 368



WWW
« Respuesta #2 : 17 de Noviembre de 2008, 12:45:23 pm »

Prueba con

Código:
push ix
pop hl
ld de,15
add hl,de

O algo similar, claro está Cheesy


jorl! que chungo luego para leerlo, no hay nada mas "claro"

de momento usare eso Cheesy gracias Smiley
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #3 : 17 de Noviembre de 2008, 12:53:02 pm »

Pues aunque no sea en absoluto óptima, te sugeriría un enfoque directo:

Código:
push bc ; suponiendo que nos conviene mantener el valor original de BC
push ix
pop hl
ld bc,15
add hl,bc
pop bc ; recuperamos el valor original de BC

Así a ojo, 10 bytes de código y un montón de ciclos. Y que conste que no me gusta nada usar la pila, pero es lo que hay cuando tratamos de combinar HL y registros índice. La otra opción, si puedes usar el registro DE, es tratar de ir por el camino del medio con los registros IXh y IXl.

De todos modos, estoy seguro de que puedes encontrar una alternativa mejor a ese LD HL,IX+15

Creo que sin muchas dificultades se puede hacer también un ADD IX,BC si no necesitas conservar el registro original.

Versión heavy destructora de registros (machaca BC y DE, que podrían protegerse vía pila):

Código:
ld bc,15
ld e,ixl
ld d,ixh
ex de,hl
add hl,bc

Esta versión ocupa otros 10 bytes, pero no usa la pila.

En fin. Dadle caña. Seguro que Sap nos recorta unos cuantos ciclos e instrucciones.
En línea
cybernoid
Karoshi Maniac
****
Mensajes: 368



WWW
« Respuesta #4 : 17 de Noviembre de 2008, 01:04:32 pm »

Bueno, intentare buscar una alternativa, lo que pasa es que IX e IY van de coña para mirar propiedades de un objeto, pero claro, llega un momento en que almaceno las animaciones del objeto en un array y queria pasarle a HL un "puntero" para patearmelo.

pero me buscare otra solución, creo que sera lo mejor Smiley

gracias.

En línea
cybernoid
Karoshi Maniac
****
Mensajes: 368



WWW
« Respuesta #5 : 17 de Noviembre de 2008, 01:06:34 pm »

por cierto
otra solución seria

ld a,i
ld h,i
ld a,x
ld l,x
ld de,15
add hl,de

¿no?



se me acaba de ocurrir  Tongue


EDIT:vale, veo que no se puede accede por separado a IX Tongue que capullin soy
« Última modificación: 17 de Noviembre de 2008, 01:26:38 pm por gobblin » En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #6 : 17 de Noviembre de 2008, 01:31:25 pm »

El nombre de los registros de 8 bits que salen de IX son IXL (low) y IXH (high). El registro I es algo totalmente diferente y que no tiene que ver con los registros índice.

En cualquier caso, el problema que tienes es que no hay forma de combinar los registros HL, H y L con los registros IX, IXH y IXL en una misma instrucción. Si analizas los opcodes de estas instrucciones, verás que cuando empiezan por EDh se transforma HL por IX. Por lo tanto, una misma instrucción no puede tener acceso a ambos a la vez. No sé si me he explicado, pero vamos, la conclusión es que no se puede. Las instrucciones como LD H,IXH no existen en este universo, salvo error u omisión. Tongue

Conclusiones: usar IX e IY con moderación. Todas las instrucciones que operan con ellos son, en principio, un byte más largas y además, como no, más lentas. Usar con moderación y en casos en los que esté plenamente justificado. En donde sea posible, hay que buscar la mejor solución con los registros estándar.
En línea
SapphiRe_MSX
Visitante
« Respuesta #7 : 17 de Noviembre de 2008, 02:26:07 pm »

Versión heavy destructora de registros (machaca BC y DE, que podrían protegerse vía pila):

Código:
ld bc,15
ld e,ixl
ld d,ixh
ex de,hl
add hl,bc

Esta versión ocupa otros 10 bytes, pero no usa la pila.

En fin. Dadle caña. Seguro que Sap nos recorta unos cuantos ciclos e instrucciones.

Código:
ld hl,15
ld e,ixl
ld d,ixh
add hl,de

Una instrucción menos y unos cuantos ciclos menos... Grin Grin Grin
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #8 : 17 de Noviembre de 2008, 03:16:01 pm »

No esperábamos menos de ti, Sap!  Cheesy
En línea
WYZ
Visitante
« Respuesta #9 : 17 de Noviembre de 2008, 11:58:32 pm »

Código:

LD HL,15
LD SP,IX
ADD HL,SP


en tres lineas pero mas heavy destructora aun que la de Robsy.
« Última modificación: 18 de Noviembre de 2008, 12:12:53 am por WYZ » En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #10 : 18 de Noviembre de 2008, 10:27:48 am »

Jajaja! No te cargas más registros, pero volatilizas la pila entera... Grin
En línea
WYZ
Visitante
« Respuesta #11 : 18 de Noviembre de 2008, 05:42:09 pm »

jeje, guardando el puntero de la pila no habría problema no? Smiley . No suelo usar SP, porque la fijo al inicio del programa y me olvido si no da problemas, pero puede ser una solución rápida para hacer de puente entre los registros de 16 bits. La solución de Sapp es mas académica Grin.
En línea
SapphiRe_MSX
Visitante
« Respuesta #12 : 18 de Noviembre de 2008, 06:00:22 pm »

jeje, guardando el puntero de la pila no habría problema no? Smiley

Pero ocuparía más memoria y tardaría más.

Citar
No suelo usar SP, porque la fijo al inicio del programa y me olvido si no da problemas

Uuuuh... yo tengo una variable de memoria donde guardo el puntero de la pila cuando la necesito para hacer cosas rápidas. Un push a veces soluciona muchos problemas Cheesy

Citar
La solución de Sapp es mas académica Grin

De casta le viene al galgo, ¿verdad? Grin
En línea
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!