;*************16-BIT ADDITION************
; BY: ENG'R ROLAND MICHAEL A. DELA PEŅA *
;****************************************
; RECALL:
; 16BIT BINARY DECIMAL
; 00000000 00000101 = 5
; HIGH BYTE LOW BYTE
; MSB LSB
LIST P=16F84
ERRORLEVEL -302
#include p16f84.inc
;************************************************************
; REGISTER DEFINITIONS
;************************************************************
CBLOCK 0CH
HBYTE ; HIGH BYTE OF THE 16 BIT RESULT
LBYTE ; LOW BYTE OF THE 16 BIT RESULT
ADD1HI ; HIGH BYTE FOR ADD ROUTINE
ADD1LO ; LOW BYTE FOR ADD ROUTINE
ADD2HI ; (CONSTANT) HIGH BYTE FOR ADD ROUTINE SET TO 00000000
ADD2LO ; (CONSTANT) LOW BYTE FOR ADD ROUTINE SET TO 00000101
SUB1HI ; HIGH BYTE FOR ADD ROUTINE
SUB1LO ; LOW BYTE FOR ADD ROUTINE
SUBT2HI ; (CONSTANT) HIGH BYTE FOR SUBTRACT ROUTINE SET TO 00000000
SUBT2LO ; (CONSTANT) LOW BYTE FOR SUBTRACT ROUTINE SET TO 00000101
ANSHI ; HIGH BYTE FOR THE ANSWER
ANSLO ; LOW BYTE FOR THE ANSWER
ROLAND ; TEST REGISTER
ENDC
GOTO START
;********************************************************************
; 16 BIT ADDITION
; THIS ADDS CONSTANT 5 TO THE 16 BIT RESULT - HBYTE LBYTE
; ADD1HI ADD1LO + ADD2HI ADD2LO = ANSHI ANSLO
;*********************************************************************
CLRF ADD2HI ; MAKE ADD2HI=0
MOVLW b'00000101' ; MOVE CONSTANT VALUE=5 TO W
MOVWF ADD2LO ; MOVE W TO ADD2LO REG. TO MAKE SB1LO=5
ADD
MOVFW HBYTE ; STORE THE 16-BIT RESULT TO ADD1HI & ADD1LO
MOVWF ADD1HI
MOVFW LBYTE
MOVWF ADD1LO
MOVFW ADD1LO
ADDWF ADD2LO,F ; ADD LOW BYTES ADD1LO & ADD2LO
BTFSC STATUS,C ; TEST IF THE RESULT EXCEEDED 256. IS THERE A CARRY?
INCF ADD2HI,F ; YUP, ADD 1 TO ADD2HI
MOVFW ADD1HI ; NOPE, DON'T ADD 1 TO ADD2HI
ADDWF ADD2HI,F ; ADD HIGH BYTES ADD1HI & ADD2HI
CLRW
MOVFW ADD2HI
MOVWF ANSHI ; STORE THE HIGH BYTE ANSWER TO ANSHI
MOVFW ADD2LO
MOVWF ANSLO ; STORE THE LOW BYTE ANSWER TO ANSLO
RETURN
; OR...
START ; EXAMPLE OF 100 + 357 = 457
MOVLW b'01100100'
MOVWF ADD1LO
MOVLW b'00000000'
MOVWF ADD1HI
MOVLW b'01100101'
MOVWF ADD2LO
MOVLW b'00000001'
MOVWF ADD2HI
CALL ADD0
; RESERVED FOR PROGRAM LINES
;
;
GOTO START
;********************************************************************
; OR...
; ADD1HI ADD1LO + ADD2HI ADD2LO = ADD2HI ADD2LO
;*********************************************************************
ADD0
MOVFW ADD1LO
ADDWF ADD2LO,W
MOVWF ADD2LO
MOVFW ADD1HI
BTFSC STATUS,C
ADDLW D'1' ; IF A CARRY OCCURRED, ADD 1
ADDWF ADD2HI,W
MOVWF ADD2HI
RETURN
END
               (
geocities.com/ece23314)