¿Cuál podría ser la forma más rápida de incrementar dos bytes combinados en el ensamblador (asumiendo que estoy trabajando en una CPU de 8 bits)? Actualmente estoy haciendo esto:
OVF1_handler: ; TIMER1 overflow ISR
lds r21, timerhl ; load low byte into working register; 2 cycles
add r21, counter_inc ; add 1 to working register (value of counter_inc is 1); 1 cycle
brbs 0, OVF1_handler_carry ; branch if bit 0 (carry flag bit) of SREG is set; 1 cycle if false . 2 cycles if true
sts timerhl, r21 ; otherwise write value back to variable; 2 cycles
reti ; we're done
OVF1_handler_carry: ; in case of carry bit is set
sts timerhl, r21 ; write value of low byte back to variable; 2 cycles
lds r21, timerhh ; load high byte into working register; 2 cycles
inc r21 ; increment it by 1 (no carry check needed here); 1 cycle
sts timerhh, r21 ; write value of high byte back to variable; 2 cycles
reti ; we're done
Así que en suma hay
255 * (2+1+1+2) + (2+1+2+2+2+1+2) = 1542 cycles
para contar de 0 a 256 (255 veces (2 + 1 + 1 + 2) porque no hay desbordamiento más 1 vez (2 + 1 + 2 + 2 + 2 + 1 + 2) cuando se produce un desbordamiento).
¿Mi cálculo es correcto y hay una manera más rápida?