I thought I would share my solution with you guys. Once I got the hang of one data table I was able to implement another 2 for a drastic reduction in my code size:
Table
addwf PCL,f ;add w to the program counter, so 0 goes to first char, 1 goes to 2nd etc
message dt "MESSAGE GOES HERE" ;stores each character in ASCII format followed by retlw
;so returns with current char in w
clrf offset ;end of message reset - if you get here you've gone past the end of the message
retlw "\n" ;for me "\n" creates a long pause before moving on to the next char
main
movf offset,w ;put offset in w
incf offset,f ;increment offset for next time
call Table ;go get the current char and return with it in w
movwf letter ;put it into letter
clrf soffset ;clear this
clrw ; and this (probably don't need this here actually)
call send
goto main
AlphaTable
addwf PCL,f ;This addition here is setting the Z flag to zero!
alphabet dt "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.? \n"
;;;letter not found if you make it this far, so...
; need to handle error somehow
nextL
incf soffset,f ;increment the alphabet offset
send ;coming from main with current char stored in w and soffset set to 0
movf soffset,w ;alphabet offset
call AlphaTable ;return from alphabet with message char stored in "letter", alphabet char in "w", alphabet # in "soffset"
subwf letter,w ; subtract the message char, from the alphabet char
btfss STATUS,Z ;if zero (STATUS,Z=1), character was a match, soffset holds offset of correct character to display/print/send so skip next inst.
goto nextL ;otherwise check next letter
movf soffset,w ;put the alphabet offset into w and then add it to the program counter
addwf PCL,f ;if 0 sendA, if 1 sendB, if 2 send C...
JumpTable
goto sendA
goto sendB
goto sendC
...
...
...
goto hell ;("\n" long pause)