La máxima cantidad que puede representar el registro W es en 8 bits igual a b"11111111", es decir 255 decimal.
Supongamos que (W) = 5 en decimal = b"00000101" binario.
y se ejecuta la instrucción addlw 0xFF, es decir le sumas 255, resulta que: 255 + 5 = 260 decimal,
en binario: b"11111111" + b"00000101" = b"100000100" representado en nueve bits, pero como el registro de trabajo sólo puede contener los ocho bits más bajos resulta:
(W) = b"00000100" = 4 en decimal.
¿Y el noveno bit?. Va al bit de Carry que se pone a 1.
Así pues si a cualquier cantidad de 8 bits le suma 255 (addlw 0xff), resulta esta cantidad menos una unidad representada en 8 bits y el Carry se pone a 1 (que realmente es el noveno bit).
La demostración matemática podría ser:
255 + Cantidad = (256 - 1) + Cantidad = 256 + (Cantidad -1)
siendo el 256 decimal el valor posicional del noveno bit binario.
Espero haberte ayudado.
Adrian.