Saludos!
Nitita, bienvenida al foro!
El direccionamiento indirecto consta en acceder a cualguiera de los registros de la ram a travez de un solo registro(incf) direccionando su ubicacion por medio de un puntero,en el cual se le carga la direccion del registro deseado (fsr).
Buena explicación picNIC!, pero el registro sería indf no? (colocaste incf, te lo resalté en negrilla)... más adelante sí lo escribiste bien, pero deberías corregirlo para que no se preste a confusión...
En principio lo que tengo que hacer es sumar dos campos ( destino y datos)
movlw 0x0c
movwf 0x04;fsr
addwf 0x0d; <---------aki es donde ya me pierdo un poko porque realmetne no se si hago bien metiendo otra direccion de memoria para okuparme del segundo operando que me hace falta para sumar.. pero si pongo eso de que manera estoy metiendome en "INDF"?
Se ve más elegante que declares al inicio de tu programa:
fsr equ 0x04
indf equ 0x00
temp equ 0x20 ;variable temporal
w equ 0
f equ 1
Entonces me imagino que quieres sumar los registros 0x0C + 0x0D mediante direccionamiento indirecto...
Sería:
movlw 0x0c
movwf fsr
movf indf,w ; Aquí se carga el valor del registro 0x0c (donde apunta fsr) a W
movwf temp ; cargas el valor de 0x0c en un registro temporal
movlw 0x0d
movwf fsr
movf temp,w ;mueve el valor de 0x0c que estaba en registro temporal a W
addwf indf,w ;suma el valor del registro 0x0d (donde está apuntando fsr) y guarda en w
movwf temp ; mueve el resultado a la variable temporal
Ok espero haberme explicado...
Si quieres volver a sumar dos registros lo que tienes que hacer es cambiar las direcciones de la primera y quinta línea... y listo, funcionará de lo lindo... y recuerda que el resultado siempre lo vas a tener en el registro 0x20, que yo llamé temp... por supuesto, eso lo puedes cambiar... si quieres asigna otro registro con otro nombre... como tú quieras!
Dale pues, nos leemos!