Primero que nada te recomiendo que uses las notaciones que vienen en los .inc
movwf REGISTRO,1
es mas sensato si usas:
movwf REGISTRO, F ;Resultado en REGISTRO
movwf REGISTRO, W ; para cuando es 0, y el resultado va a W
Tambien tenes definido los valores C, Z entre otros para usarlo con el registro STATUS, entonces te queda asi:
bcf STATUS, DC
bcf STATUS, Z
bcf STATUS, C
Hasta donde les comento entiendo mas o menos solo necesitaria que me indiquen si estoy haciendolo bien o si por el contrario estoy equivocado. a partir de bcf se que deberia en esta instruccion poner en 0 el bit 1 del file status pero no comprendo bien que hace.
Los primeros comentarios estan bien, pero recorda que los comentarios de ASM son con un punto y coma.
El BCF STATUS, DC pone a 0 el bit DC (carry digit), este bit se activa cuando el nibble inferior produce un overflow.. Ejemplo si tenes 0x0F y le sumas 1 y las banderas en C = 0, Z = 0, DC = 0, y le sumas 1 a ese numero, el resultado quedaria 0x10, y las banderas C = 0 , Z = 0 , DC = 1
Por ahi es insentato el programa que pasaste... vamos a ver paso a paso que hace:
movlw 0xff ; W = 0xFF
movwf REGISTRO, F ; REGISTRO = W = 0xFF
movlw 0x01 ; W = 0x01
addwf REGISTRO, F ; REGISTRO = W + REGISTRO = 0x01 + 0xFF = 0x00 , Aca se actualizan las banderas, las cuales tanto C, Z y DC van a estar en 1
bcf STATUS, DC ; Bandera DC en 0, quedando C = 1, Z = 1, DC = 0
decf REGISTRO, W ; REGISTRO = 0x00 - 1 = 0xFF , El DECF actualiza solo afecta a la bandera Z del STATUS, por lo tanto las demas no cambian, y quedan C = 1, Z = 0, DC = 0
movf REGISTRO, F ; El MOVF solo afecta la bandera Z, lo que hace aca es tomar el valor de REGISTRO y ponerlo en REGISTRO, es decir lo unico que hace es actualizar la bandera Z
Espero que se entienda lo ultimo, cada instruccion afecta a algunas o ninguna bandera del registro STATUS, lo tenes en la tabla. Si por ejemplo quisiera saber si el registro es 0, solo haria:
MOVF REGISTRO, F ; o lo pongo en W si no me molesta perder el valor de W
BTFSS STATUS, Z
NOP ; Aca si no es 0
NOP ; Aca si es 0