; ; variable right shift INCLUDE "p16f873.inc" __CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;unsigned char vlshift(v,amt) ;unsigned char v, amt; ;{ ; while (amt) { ; v = v << 1; ; amt--; ; } ; return(v); ;} ; Parameter space for main CBLOCK 0x020 i,j,k ENDC org 0 ; initialize main program variables movlw 0x24 movwf i ; i = 0x24 movlw 0x2 movwf j ; j = 2 ;; setup subroutine parms movf i,w movwf v movf j,w movwf amt call vshift movwf k ; k = vshift(v,amt); here goto here ;; subroutines ; Parameter space for vlshift CBLOCK 0x040 v, amt ENDC ;; return value in w vshift movf amt,f vshift_loop btfsc STATUS,Z ; amt==0? goto vl_return bcf STATUS,C rlf v ; v = v << 1 decf amt,f ; amt-- goto vshift_loop vl_return movf v,w ;return(v) return end