Just place an _underscore before any BASIC variables you want to access in assembler,
and an _underscore in front of the assembler label you want to call from BASIC.

Give this a shot.
Code:
crc_hi  VAR BYTE bank0
crc_lo  VAR BYTE bank0
temp    VAR BYTE bank0
ToCrc   VAR BYTE bank0
CRC     VAR WORD
X       VAR BYTE
Space   CON " "

Main:
    crc_lo = 0
    crc_hi = 0
    ToCrc = $ff
    CALL crc_8408

    ' Show HEX value
    HSEROUT ["Input = ",IHEX2 ToCrc,Space,"Output = ",_
    IHEX4 (crc_hi << 8 | crc_lo),13,10]
    
    ' Show ASCII values
    FOR X = 2 to 8
      ToCrc = X + "0" ' Convert X val to ASCII
      CALL crc_8408
      GOSUB Show
    NEXT X
    PAUSE 1000
    GOTO Main
    
Show:
    HSEROUT ["Input = ",DEC ToCrc-"0",Space,"Output = ",_
    IHEX4 (crc_hi << 8 | crc_lo),13,10]
    RETURN

ASM
_crc_8408
    movf	_ToCrc,W	;Load value into W
    xorwf	_crc_lo,W	;W = CD ^ ab ==> xy
    movwf	_temp		;temp = xy
    swapf	_temp,F		;W = yx
    rrf		_temp,w
    andlw	0x78		;y<<3
    xorwf	_crc_hi,W	;W = AB ^ (y<<3)
    movwf	_crc_lo		;LO = AB ^ (y<<3)
    swapf	_temp,W		;W = xy
    xorwf	_temp,W		;W = (y^x) | (x^y) = kk
    movwf	_crc_hi		;HI = kk
    andlw	0x0f		;W = 0k
    xorwf	_crc_lo,W	;W = AB ^ (y<<3) ^ k
    btfsc	_crc_hi,0	;
    xorlw	0x80		;W = AB ^ (y<<3) ^ k ^ (k<<7)
    movwf	_crc_lo		;LO = AB ^ (y<<3) ^ k ^ (k<<7)
    swapf	_temp,W		;W = xy
    andlw	0xf0		;W = x0
    xorwf	_crc_hi,F	;W = y<<4 | x^y
    rrf		_crc_hi,W	;W = (y<<4 | x^y) >> 1
    andlw	7		    ;W = x^y >> 1
    swapf	_crc_hi,F	;W = x^y<<4 | y
    xorwf	_crc_hi,F	;HI = kx ^ k>>1 = (k<<4) ^ y ^ (k>>1)
    return
ENDASM
Just be aware of bank & page switching as your program grows.