aaa si pero no se como decirlo no guardar sino solo representtarlo y si no me etendieron en b se agarran 4 bits + 4 bits del mismo puerto y las operacion de suma y resta se guardan en variables y se representan en el puerto c y el resultado se guarda en el puerto a se llama miren tengo este ejemplo pero tiene ke realizar los mismo solo ke lo ocupo con otras instrucciones
;iNSTRUCCIONES:
;CONFIGURAR PUERTOB COMO ENTRADA
;CONFIGURAR PUERTOC COMO ENTRADA:
;RC0=ADD
;RC1=SUB
;RC2=XOR
;RC3=OR
;RC4=AND
;RC5=COMPLEMENTO <0:3>
;RC6=EJECUTAR OP.
;PORTA = PUERTOB<0:3> OPERACION PUERTOB<4:7>
LIST p=16F877A ; Tipo de procesador PIC16F877A
#include "P16F877A.inc" ; Archivo de definicion de registros del micro
; Palabra de configuracion
__config _CP_OFF & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_ON & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
org 0x00
goto main
org 0x04
main
;***************CONFIGURACION DE PUERTOS*****************
;CAMBIAMOS AL BANCO 1 DONDE SE ENCUENTRA TRISB
BSF STATUS,RP0 ; base de datos es 0
BCF STATUS,RP1 ; base de datos es 1
;CONFIGURA EL PUERTOB COMO ENTRADA
MOVLW 0XFF
MOVWF TRISB
;CONFIGURA EL PUERTOC COMO ENTRADA
MOVWF TRISC
CLRW
;CONFIGURAMOS EL PUERTOA COMO DIGITAL
MOVLW B'00000110'
MOVWF ADCON1
;CONFIGURA EL PUERTOA COMO SALIDA
CLRF TRISA
;CAMBIAMOS DE NUEVO AL BANCO 0
BCF STATUS,RP0
BCF STATUS,RP1
;****************BUSCANDO OPERACION A REALIZAR****************
@1 BTFSS PORTC,6 ; BTFSS checa f en el bit 6 x un 1
GOTO @1 ; si es 1 se brinca una instrucion y se va al siguiente
@2 BTFSS PORTC,0 ; checa si hay un 1 y si lo hay ejecuta ADD
GOTO @3
CALL ADD
@3 BTFSS PORTC,1
GOTO @4
CALL SUB
@4 BTFSS PORTC,2
GOTO @5
CALL XOR
@5 BTFSS PORTC,3
GOTO @6
CALL OR
@6 BTFSS PORTC,4
GOTO @7
CALL AND
@7 BTFSS PORTC,5
GOTO @1
CALL COMP
GOTO @1
;*******************DEFINIENDO SUBRUTINAS********************
ADD
CALL NUMX2 ;llama a la divicion del num de 8 bits
MOVF 0X20,0 ; el registro 0x20 lo mueve a w
ADDWF 0X21,0 ; el registro suma w con f 0x21
MOVWF PORTA ; el registro w mueve a la salida al PORTA
CLRW ; limpiamos w
RETURN ; regresa al main
SUB
CALL NUMX2
MOVF 0X21,0
SUBWF 0X21,0
MOVWF PORTA
CLRW
RETURN
XOR
CALL NUMX2
MOVF 0X21,0
XORWF 0X21,0
MOVWF PORTA
CLRW
RETURN
OR
CALL NUMX2
MOVF 0X21,0
IORWF 0X21,0
MOVWF PORTA
CLRW
RETURN
AND
CALL NUMX2
MOVF 0X21,0
ANDWF 0X21,0
MOVWF PORTA
CLRW
RETURN
COMP
CALL NUMX2 ;llama a la divicion del num de 8 bits
COMF 0X21,0 ;complemento de f 0x21 a w
MOVWF PORTA ; movemos de w al puerto f
BCF PORTA,4 ; limpiamos PORTA el bit 4
BCF PORTA,5 ; limpiamos PORTA el bit 5
CLRW ;limpiamos w
CLRF 0X21 ;limpiamos f el registro 0x21
RETURN ; regreso al main
;****************SEPARANDO NIBBLES DEL PORTB*******************
NUMX2 ; divicion del num de 8 bits
;PRIMER NUMERO
MOVF PORTB,0 ;movemos a PORTB
MOVWF 0X20 ; mov w a f 0x20
BCF 0X20,7
BCF 0X20,6
BCF 0X20,5
BCF 0X20,4
;SEGUNDO NUMERO
MOVWF 0X21 ;mov w a f al 0x21
SWAPF 0X21,1 ; aqui cambia los 4 primeros bit por los 4 ultimos bits
BCF 0X21,7
BCF 0X21,6
BCF 0X21,5
BCF 0X21,4
CLRW
RETURN
END