La resta se realiza sumando, en binario puro sin signo.
Al realizar la resta de 8 bits con signo el resultado no puede exceder de +127 ni de (-128).
El flag carry indica si es positivo (C se pone a "1") o negativo (C se pone a "0").
Pueden ocurrir tres casos:
- Si el el resultado es positivo distinto de cero, C = 1 y Z = 0.
- Si el resultado es cero, C = 1 y Z = 1.
- Si el resultado es negativo, C = 0 y Z = 0.
Para las instrucciones de resta podemos emplear:
sublw k
subwf f,d
;***************INSTRUCCIONES DE RESTA**************
;ZONA DE DATOS*********************************************************************
__CONFIG _CP_OFF& _WDT_OFF& _PWRTE_ON& _XT_OSC ;CONFIGURACION PALABRA DE CONTROL
LIST P=16F84A ;MICROCONTROLADOR UTILIZADO
INCLUDE <P16F84A.INC> ;ETIQUETAS DEL MICROCONTROLADOR ESPECIFICADO
RESTA EQU H'0C'
;ZONA DE CODIGOS*********************************************************************
ORG 0 ;INCIO DE PROGRAMA EN LA DIRECCION 0 DE MEMORIA DE PROGRAMA
INICIO
BSF STATUS,RP0 ;FIJA A 1 EL BIT 5 DEL REGISTRO STATUS PARA ACCESAR AL BANCO 1
CLRF TRISB ;LIMPIA LAS LINES DEL PTO B PARA CONFIGURARLO COMO SALIDA
MOVLW B'00000000'
MOVWF TRISA ;CARGAMOS EL CONTENIDO DEL REGISTRO DE TRABAJO W A TRIS A PARA CONFIGURARLO COMO ENTRADA
BCF STATUS,RP0 ;FIJA A 0 EL BIT 5 DEL REGISTRO STATUS PARA REGRESAR AL BANCO 0
PRINCIPAL
MOVLW H'04' ;CARGAMOS AL REGISTRO W CON EL DATO A3
MOVWF RESTA
MOVLW H'01'
SUBWF RESTA,W ;RESTAMOS AL RESGISTRO RESTA LO QUE CONTIENE EL REGISTRO W
MOVWF PORTB ;EL VALOR DEL REGISTRO W SE MUEVE AL PUERTO B Y ARROJA EL RESULTADO EN ESTE CASO EL DATO F2
SLEEP ;EL PROGRAMA ENTRA EN MODO BAJO CONSUMO DEL CUAL NO PODRA SALIR
END
No hay comentarios.:
Publicar un comentario