multiple ways to skin a cat :
method 1:
define a 16 bit variable.
then create a pointer to that variable
write adcl to pointer, increment pointer write adh to pointer
read 16 bit number.
method 2 : create a structure of two bytes. obtain pointer to structure , read a 16 bit number from pointer address.
method 3: (my preferred one , but the language / compiler must have such capability)
#pragma location = 0x100
byte lsb;
#pragma location = 0x101
byte msb;
#pragma location = 0x100
int16 sixteenbit;
lsb and msb are two bytes , sixteenbit is .. well .. what it says.
lsb = 0x55
msb = 0xaa
print sixteenbit gives 0xaa55
it also works in reverse. throw some 16 bit value in 'sixteenbit' and you can snatch msb and lsb directly
the advantage is that it takes ZERO cpu instructions. it is memory operations
disadvantage : you need to know a bit about memroy layout of the cpu