Cuantos bits tiene un registro? 8 bits.
2^8 = 256 (contando el 0 sería 255)
Si un registro tiene una cantidad de 2 y tu le restas 4 estará en 254 si no me equivoco.
Ese es el problema que tienes, realmente el programa esta actuando correctamente pero no interpretas bien los datos.
Cuando los datos son negativos (por debajo de 0) y quieres representarlo en decimal tendrías que complementarlo primero.
Ahí lo que estas haciendo primero es sumar 1+3 = 3 y lo guardas en un registro. Ahora sumas lo que hay en W que realmente es 3 y lo vuelves a sumar con lo que hay en el registro y te da 6. Por lo tanto si ahora le restas 10 tendras -4.
256-4=252
Ahora bien, cogemos el 252 y lo pasamos a binario. 11111100
Le damos la vuelta 00000011 y nos da un 3, le sumamos 1 y tenemos el cuatro que te da en ese resultado 00000100.
Esto es complementarlo a dos.
Ahora bien, ¿como saber cuando un resultado es negativo? tienes que comprobar el BIT C de el STATUS. Que cuando se pone a 1 quiere decir que el resultado es negativo.
Creo que el bit C no se pone a cero solo y no puedes editarlo metiendole un cero, pero si puedes hacerlo con la instrucción BCF (bit clear file).
2^8 = 256 (contando el 0 sería 255)
Si un registro tiene una cantidad de 2 y tu le restas 4 estará en 254 si no me equivoco.
Ese es el problema que tienes, realmente el programa esta actuando correctamente pero no interpretas bien los datos.
Cuando los datos son negativos (por debajo de 0) y quieres representarlo en decimal tendrías que complementarlo primero.
Ahí lo que estas haciendo primero es sumar 1+3 = 3 y lo guardas en un registro. Ahora sumas lo que hay en W que realmente es 3 y lo vuelves a sumar con lo que hay en el registro y te da 6. Por lo tanto si ahora le restas 10 tendras -4.
256-4=252
Ahora bien, cogemos el 252 y lo pasamos a binario. 11111100
Le damos la vuelta 00000011 y nos da un 3, le sumamos 1 y tenemos el cuatro que te da en ese resultado 00000100.
Esto es complementarlo a dos.
Ahora bien, ¿como saber cuando un resultado es negativo? tienes que comprobar el BIT C de el STATUS. Que cuando se pone a 1 quiere decir que el resultado es negativo.
Creo que el bit C no se pone a cero solo y no puedes editarlo metiendole un cero, pero si puedes hacerlo con la instrucción BCF (bit clear file).