PIC18 Assembly Handling 16 bits
On a 8 bit machine, you don't need to shift things around by 8 bits.  Just move them into the appropriate byte in the first place.

What you seem to be missing in the code snippet you show is that the accumulator and all data bytes are only 8 bits wide.  Shifting a byte left 8 times will just clear it regardless of the original value.

To do the equivalent of the C code you show:


;   In the variable definition section:
;
color1   res     2           ;reserve 2 bytes of RAM for the variable COLOR1

;   Later in executable code:
;
         movff   addrL, color1+0 ;copy addrH:addrL into color1
         movff   addrH, color1+2


Using color1 later would be done one byte at a time.  To add it with another 16 bit value, for example: Use ADDWF to add the low bytes, store the result, Use ADDWFC to add the high bytes, store the result.