I need to use pointer on structure that may start on byte boundaries. Therefore I write: #pragma pack(1) #pragma BYTEALIGN typedef struct TLG { unsigned int a0; unsigned char a1; unsigned int a2; unsigned char a3; unsigned char a4; unsigned char a5; }idata *idata tlg; tlg Messg; ........................................ In other module: #define B0 XVAR(unsigned, 0x80002) unsigned idata ti; ............................................................. void fun1(tlg Messg10) { ................................... ti = B0; //reading of external 16 bit register .................................... } For line <ti = B0;> compiler generate the folloving code: EXTS #8,#2 MOVB RL4,2 MOVB RH4,2 instead of: EXTS #8,#1 MOV R4,2 In C166 Compiler User Manual I read: "The BYTEALIGN directive causes the C166 Compiler to generate code that supports structure pointers that may start on byte boundaries. This directive is required when you use the PACK(1) directive." What ratio has the pointer on structure to call to the peripheral memory?