Еще кросспост: пишущим на ASM30 (хе-хе, "да их тут тысячи!"(с):) - подтвержденная бага http://forum.microchip.com/fb.aspx?m=336388&key=
Если аргументт выражения больше 0x8000u, то он сдуру считается знаковым, поэтому результат может не влезть в регистр и сгенерировать ошибку - например: mov #~(1 << 14),w0 - все ОК mov #~(1 << 15),w0 - будет ошибка "Invalid operand specified" Это препятствует использованию удобных форм написания выражений типа mov #~(1 << RB15),w0. Приходится писать так, чтобы не было нежелательного "знакового" расширения: mov #~(1 << RB15)&0xFFFF,w0 Подтверждено разработчиком ASM30, см. ссылку
Если аргументт выражения больше 0x8000u, то он сдуру считается знаковым, поэтому результат может не влезть в регистр и сгенерировать ошибку - например: mov #~(1 << 14),w0 - все ОК mov #~(1 << 15),w0 - будет ошибка "Invalid operand specified" Это препятствует использованию удобных форм написания выражений типа mov #~(1 << RB15),w0. Приходится писать так, чтобы не было нежелательного "знакового" расширения: mov #~(1 << RB15)&0xFFFF,w0 Подтверждено разработчиком ASM30, см. ссылку