Это я сразу проверил. Я уже к минимуму код свел:
0000: goto 0x200
...
0200: clr W14
0202: clr W0
0204: btsc W0, #0
0206: ulnk
Как видно, lnk вообще не выполняется, но и ulnk Не должен выполняться.
Если строчку
0x200: clr w14
заменить на
0x200: mov #0x800, w14
то после
перепрыгивания через
ulnk w14 (и w15 тоже) остается без изменений, а программа продолжает выполнение. В симуляторе все работает и с нулевым и с ненулевым W14, а в железе - ресет.