Página 1 de 1

Duda condicional relativamente absoluta

Publicado: 24 May 2016, 17:40
por Haplo
De vez en cuando le doy una vuelta a las rutinas para ver si le puedo arañar algunos ciclos a medida que voy aprendiendo trucos.
El caso es que hoy me ha surgido una duda que no acabo de verla bien resuelta en los sitios que he consultado. Se trata de la diferencia de velocidad entre JR cc,x y JP cc,xx. Tengo varias tablas de consulta de mnemónicos donde se indican que estas instrucciones consumen 12/7 y 10/1 ciclos respectivamente, es decir que JP cc,xx es más rápido tanto si la condición es cierta como si no... ¿esto es correcto?
Lo digo porque he leído en varios sitios que JR es más rápida cuando la condición no es cierta (7 t) :shock:

Código: Seleccionar todo

    LD E, H  ; H is the 2nd factor
    LD HL,0
    LD D, L  ; DE => H

    ;LD A, (NUM1) ;; Not needed, already done
LOOP:
    ;; RR A ; (Divide A by 2 - copying the 1's column bit into the carry flag.)
    RRA ; 1 byte, 4 T-states; RR A => 2 bytes, 8T-States and are equivalent!

    ; NOTE: JR is 3 T-States faster than JP when the condition is not met
    ; In this case, it's most likely numbers will be little ones (containing more 0s than 1s), so JP
    JP NC, JP1; (Jump over the add if we have to) ;
    ADD HL,DE ; 11 T-states

JP1:
    RET Z ; (Leave when we finish - A has gone to zero) ; 5 T-States if condition not met, 10 if met
    SLA E  ; 8 T-states
    ; RL D   ;; Multiply DE*2 ; Needless in 8 bit, only E is needed!
    JP LOOP ; 2 T-States faster

La diferencia sería más que notable...

Re: Duda condicional relativamente absoluta

Publicado: 24 May 2016, 18:24
por antoniovillena
JR y sus condicionales es más rápido (7 ciclos) cuano el salto no se toma. Pero la mayoría de las veces se ejecuta el salto tomado, por tanto la opción lenta, por lo que JP suele ser más rápido (10 ciclos frente a 12 de JR).

Re: Duda condicional relativamente absoluta

Publicado: 24 May 2016, 18:33
por Haplo
Entonces JP condicional siempre son 10 t???? :shock: Porqué me aparece como 10/1?

Re: Duda condicional relativamente absoluta

Publicado: 24 May 2016, 18:42
por antoniovillena
Haplo escribió:Entonces JP condicional siempre son 10 t???? :shock: Porqué me aparece como 10/1?
Sí, son siempre 10 ciclos. Lo del 1 será una errata porque ninguna instrucción tarda 1 ciclo en completarse, el mínimo es 4

Re: Duda condicional relativamente absoluta

Publicado: 24 May 2016, 19:34
por Haplo
Ya decía yo que no me cuadraban las cuentas cuando calculaba el tiempo de las rutinas...
Qué tonto leñe, no me había percatado de ese detalle del mínimo de 4 ciclos, ni que fuera un RISC :D .
Pues iré corrigiendo las erratas en el listado de mnemónicos que saqué hace tiempo, ahora no recuerdo bien dónde la encontré, pero que hice un copy/paste sí que estoy seguro.