Página 1 de 5

Menuda Optimización

Publicado: Dom Mar 22, 2015 9:27 am
por susso
Un aporte para ahorrar ciclos:
No usar esto, siempre que no vayas a sumarle mas de un byte.

LD BC,x
ADD HL,BC

es lo más fácil, si la velocidad es crítica aunque ocupe mas memoria es mejor usar la siguiente rutina:
LD A,x
ADD A,L
JP NC,$+4
INC H
LD L,A

¡te ahorras unos 4-5 ciclos!

Re: Menuda Optimización

Publicado: Dom Mar 22, 2015 11:31 am
por antoniovillena
Algo se me escapa:

Código: Seleccionar todo

LD BC,x       ; 10 ciclos
ADD HL,BC     ; 11 ciclos
              ; Total: 21 ciclos

LD A,x        ; 7 ciclos
ADD A,L       ; 4 ciclos
JP NC,$+4     ; 10 ciclos
INC H         ; 4 ciclos
LD L,A        ; 4 ciclos
              ; Total rama 1: 25 ciclos
              ; Total rama 2: 29 ciclos

Re: Menuda Optimización

Publicado: Dom Mar 22, 2015 11:35 am
por susso
10 ciclos el JP?????

Re: Menuda Optimización

Publicado: Dom Mar 22, 2015 11:38 am
por antoniovillena
susso escribió:10 ciclos el JP?????
Exacto

Re: Menuda Optimización

Publicado: Dom Mar 22, 2015 11:42 am
por susso
Mmmmm... Espera espera, necesito que me corrijáis, haciendo eso me sale menos consumo de ciclos entre dos breakpoints en speculator, pero...
En realidad me ahorro un LD b,0 en la primera rutina, no hay un LD BC,x y en la segunda A ya viene con un valor establecido.

Re: Menuda Optimización

Publicado: Dom Mar 22, 2015 11:45 am
por susso
Queda así...

PRIMERA:
LD C,A
LD B,0
ADD HL,BC

SEGUNDA:
ADD A,L
JP NZ,$+4
INC H
LD L,A

¿Ahora si?

Por cierto donde están los ciclos oficiales en un spectrum, en mi libro es básico para Z80, no especificó para spectrum.

Re: Menuda Optimización

Publicado: Dom Mar 22, 2015 12:01 pm
por antoniovillena
Ahora sí:

Código: Seleccionar todo

LD C,A      ;4
LD B,0      ;7
ADD HL,BC   ;11
            ;Total: 22

ADD A,L     ;4
JP NC,$+4   ;10
INC H       ;4
LD L,A      ;4
            ;Total: 18/22

Pero estás favoreciendo un caso con las condiciones iniciales. En la mayoría de los casos ADD HL,BC es más rápido. La segunda opción se emplea normalmente cuando no tienes registros libres, ya que en ese caso emplear la pila u otro mecanismo para liberarlos sí que sería más lento. Si por ejemplo hubiese que sumar un array de bytes, la primera opción sería rapidísima, ya que el LD B,0 formaría parte de la inicialización, no del bucle.

En el datasheet del Z80 están los ciclos de cada instrucción. También hay documentos de texto con listados de instrucciones y ciclos en www.z80.info.

Re: Menuda Optimización

Publicado: Dom Mar 22, 2015 12:04 pm
por susso
Ok! Muchas gracias por la aclaración, maestro. Si, efectivamente, no tenía registros libres.

Re: Menuda Optimización

Publicado: Dom Mar 22, 2015 7:43 pm
por Alxinho
Soys unos p#@s máquinas :lol:

Menuda Optimización

Publicado: Dom Mar 22, 2015 9:30 pm
por susso
Alxinho escribió:Soys unos p#@s máquinas :lol:
Bueno, aun no he sacado nada, tu si que tienes mérito. :-)

Re: Menuda Optimización

Publicado: Lun Mar 23, 2015 6:16 am
por Alxinho
Yo me tengo que poner en serio de verdad YA con el código máquina.
¿Pero estás con algún proyecto en marcha?¿Se puede ver algo?

Re: Menuda Optimización

Publicado: Lun Mar 23, 2015 10:58 am
por susso
Te animo a que lo hagas, aunque tenía ya conocimientos del asm 68000 del Amiga se me olvidó por completo, no trates de ponerte metas, hazlo poco a poco, no es difícil ni fácil, pero si es muy satisfactorio.
Con el z80 empecé con los tutos de Santiago Romero, alojados aquí en Speccy.org, si te atascas vuelve atrás. Sigue cada párrafo al detalle, no te saltes nada.
Y si, estoy haciendo algo, pero todavía es pronto para enseñar nada y no me corresponde a mi mostrarlo.
Un abrazo y ánimos.

Re: Menuda Optimización

Publicado: Lun Mar 23, 2015 11:47 am
por Alxinho
Es con lo que estoy, con los de Santiago. Gracias por los ánimos y a ver cuándo se puede ver algo! :D

Re: Menuda Optimización

Publicado: Lun Mar 23, 2015 12:18 pm
por susso
Cualquier duda me puedes encontrar por Twitter como @leanderpixel

Re: Menuda Optimización

Publicado: Lun Mar 23, 2015 1:45 pm
por Alxinho
Ok, muchas gracias :wink: