From: Philipp K. K. <pk...@sp...> - 2018-04-06 12:23:57
|
Am 06.04.2018 um 14:12 schrieb Eric Rullens: > Dear Philipp, > > Apologies for bumping into this conversation (and thank you very much for > all the work!), but I think the assembler does what it should do. > > Please consider the following: > > […] > > 124 ; Load high and mid. > 00804E AE 33 22 [ 2] 125 ldw x, #(pattern>>8) This one is the problem. void main(void) { __asm nop ldw x, #(_main >> 8) nop __endasm; } results in this listing (comments removed): _main: 000000 9D [ 1] 87 nop 000001 AEr00r00 [ 2] 88 ldw x, #(_main >> 8) 000004 9D [ 1] 89 nop 000005 87 [ 5] 94 retf And this binary: :04F000008200F00892 :1DF00800AE00002707724F00005A26F9AE00002709D6F02AD700005A26F7CCF004F9 :04F00400AC00F02547 :06F025009DAE00F0C28761 :00000001FF As you can see, the second nop got overwritten by 0xc2. Whenever I use #(sym >> 8) where a 16-bit value is expected, I see the following instruction being overwritten. Philipp |