Be', una prima assunzione non necessariamente vera che vedo nel tuo codice è che l'unsigned short sia di dimensione doppia rispetto al char.
Tra l'altro
è un assembly-ismo? In C, se non vuoi offuscare il codice, di solito si scrivecodice:k^=k;
codice:k=0;