PIC Microcontroller Math Method

Multiply 8 x 8 bits

        LIST    P = 16C54, n = 66
;
;*******************************************************************
;                   8x8 Software Multiplier
;               ( Fast Version : Straight Line Code )
;*******************************************************************
;
;   The 16 bit result is stored in 2 bytes
;
; Before calling the subroutine " mpy ", the multiplier should
; be loaded in location " mulplr ", and the multiplicand in
; " mulcnd " . The 16 bit result is stored in locations
; H_byte & L_byte.
;
;       Performance :
;                       Program Memory  :  35 locations
;                       # of cycles     :  37
;                       Scratch RAM     :   0 locations
;
;
;       Program:          MULT8x8F.ASM
;       Revision Date:
;                         1-13-97      Compatibility with MPASMWIN 1.40
;
;  This routine is optimized for speed efficiency ( straight line code )
;  For code efficiency, refer to "mult8x8S.asm" ( looped code )
;*******************************************************************
;
mulcnd  equ     09      ; 8 bit multiplicand
mulplr  equ     10      ; 8 bit multiplier
H_byte  equ     12      ; High byte of the 16 bit result
L_byte  equ     13      ; Low byte of the 16 bit result
;
;
        include         "p16c5x.inc"

Same    equ     1

;
;****   Define a macro for adding & right shifting  **
;
mult    MACRO   bit             ; Begin macro
        btfsc   mulplr,bit
        addwf   H_byte,Same
        rrf     H_byte,Same
        rrf     L_byte,Same
        ENDM                    ; End of macro
;
; *****************************         Begin Multiplier Routine
mpy_F   clrf    H_byte
        clrf    L_byte
        movf    mulcnd,W        ; move the multiplicand to W reg.
        bcf     STATUS,C    ; Clear the carry bit in the status Reg.
        mult    0
        mult    1
        mult    2
        mult    3
        mult    4
        mult    5
        mult    6
        mult    7
;
        retlw   0
;
;********************************************************************
;               Test Program
;*********************************************************************
main    movlw   0FF
        movwf   mulplr          ; multiplier (in mulplr)     = 0FF
        movlw   0FF
        movwf   mulcnd          ; multiplicand(in mulcnd )   = 0FF
;
        call    mpy_F           ; The result 0FF*0FF = FE01 is in locations
;                               ; H_byte & L_byte
;
self    goto    self
;
        org     01FF
        goto    main
;
        END