(Пишу на асме)
понадобилось мне прыгнуть на адресс за предел начала BOOT сектора (адресс 0xff00),
с ходу пишу:
jmp 0xff00 при этом транслятор создает нормальный нех файл,
а в окне отладчика после програмирывания кристала и перехода в режим дизасемблера:
127: jmp RESET0 ;reset handle
+00000000: F786 BRTC PC-0x0F Branch if T flag cleared
+00000001: 796B ANDI R22,0x9B Logical AND with immediate
129: jmp EXT_INT0
+00000002: E682 LDI R24,0x62 Load immediate
+00000003: EEFD LDI R31,0xED Load immediate
131: jmp EXT_INT1
+00000004: 2BB6 OR R27,R22 Logical OR
+00000005: DFA7 RCALL PC-0x0058 Relative call subroutine
133: reti
+00000006: 99AE SBIC 0x15,6 Skip if bit in I/O register cleared
---- No Source ------------------------------------------------------------------------------------
+00000007: CDB7 RJMP PC-0x0248 Relative jump
стартовые адресса не соотвествуют истене, как только стоит убрать JMP и все становится на место:
127: jmp RESET0;RESETb ;reset handle
+00000000: 940C195C JMP 0x0000195C Jump
129: jmp EXT_INT0
+00000002: 940C0066 JMP 0x00000066 Jump
131: jmp EXT_INT1
+00000004: 940C0070 JMP 0x00000070 Jump
133: reti
+00000006: 9518 RETI Interrupt return
---- No Source ------------------------------------------------------------------------------------
+00000007: FFFF ??? Data or unknown opcode
---- l.asm ---------------------------------------------------------------------------
135: reti
+00000008: 9518 RETI Interrupt return
---- No Source ------------------------------------------------------------------------------------
+00000009: FFFF ??? Data or unknown opcode
---- l.asm ---------------------------------------------------------------------------
137: reti
+0000000A: 9518 RETI Interrupt return
---- No Source ------------------------------------------------------------------------------------
+0000000B: FFFF ??? Data or unknown opcode
---- l.asm ---------------------------------------------------------------------------
139: reti
+0000000C: 9518 RETI
пишу перед джампом или call или icall
ldi r16,(1<<rampz0)
out rampz,r16
и все прекрасно код получается нормальный рабочий.


если делать jmp 0xf000;boot
все нормально, стоит указать адресс дальше боота начинается ерунда с кодом.
В симуляторе всегда код получается правильный !
кто как далает длинные переходы ?
и если данному факту объяснение, почему переколбашивается код ?


