first: it is very bad design to create functions that have global side effects e.g. get their arguments or pass their results via globals.
second: there is absolutely no reason to use assembly on this. especially not if you pass the result to comparable slow printing routines.
If you really want to have functions for that I would suggest to introduce small inline functions
static inline uint8_t u16High(uint16_t v){ return (uint8_t)(v >> 8); }
static inline uint8_t u16Low (uint16_t v){ return (uint8_t)(v); }
Another (in my eyes ugly) option would be:
static inline uint8_t* u16decompose(uint16_t* v){ return (uint8_t*)v; }
But beware: this only is allowed for uint8_t*
you may not use this for 'decompose' uint32_t
into uint16_t
because this violates the strict aliasing rule.