Всем! Всем! Всем!
Действительно глюк компилятора точнее линковщика avr-ld. В интернете по этому поводу ничего вразумительного, и все проекты в инете имеют минимальный код чтоб обходится без JMP и CALL, используют только RJMP и RCALL , и всегда выбирают как правило AT90S8515. На двух сайтах людьми на форумах была поднята эта тема OPCODE JMP,CALL для WINAVR, никто не ответил ничего.
А глюк выдал себя вот так: как я говорил, если непосредственно записать числовое значение в эти команды, то OPCODE правильный. Если ставить текстовую метку в качестве адреса перехода на команду JMP, начинается проблема с генерированием OPCODE (хотя на командах RJMP и RCALL такое безобразие не проявляется(в этом и суть)).
Выявлял проблему так: разместил команду Start: JMP Start на нулевой адрес, OPCODE = 940C000 - правильный OPCODE. Далее поменял параметр JMP START+4, скомпилировал, получил OPCODE = 94100000 -уже неправильный OPCODE (правильный 940C0002). Далее еще увеличил параметр JMP START+4, получил также неправильный OPCODE 94140000 (правильный 940C0004).
Дальше еще лучше, короче глюченный линковщик и на этом точка. Я же немогу применять команды JMP при самостоятельных высчитах смещения адресов.
Но все-таки хорошее от WINAVR есть. Исправно генерит с "C" файла текстовый ассемблерный файл. Правда этот файл надо подредактировать, чтобы скормить ассемблеру в
AVR STUDIO. Этим далее я и буду заниматься позже - напишу утилиту переработки ассемблерного текста с avr-as на вид воспринимаемый ассемблером из
AVRSTUDIO.
Вот такие пироги.