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)
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...