|
|
  |
rjmp и branch is out of reach, все в пределах допустимого, а ассемблер ругается |
|
|
|
Sep 27 2010, 06:26
|
Частый гость
 
Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691

|
Почему ассемблер ругается (branch is out of reach) на следующий код? Код .org 0x00 rjmp start
.org 0x96E start: nop nop rjmp PC Смотрим хелп по rjmp: 16-bit opcode 1100 kkkk kkkk kkkk, где kkkkkkk=требуемый адрес-1 0x96E=0b1001 0110 1110 - все вполне укладывается. Более того, есть работающая программа с таким кодом. В чем дело?
|
|
|
|
|
Sep 27 2010, 06:43
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(tazik @ Sep 27 2010, 10:26)  Почему ассемблер ругается (branch is out of reach) на следующий код?
Смотрим хелп по rjmp: 16-bit opcode 1100 kkkk kkkk kkkk, где kkkkkkk=требуемый адрес-1 Смотрим там же - "-2K ≤ k < 2K". А 96E hex - это больше, чем 2K. Команда-то используется не только, чтобы переходить "вперед", но и "назад"... Цитата Более того, есть работающая программа с таким кодом. Работающая на каком кристалле ? И для какого кристалла ругается компилятор ?
|
|
|
|
|
Sep 27 2010, 07:05
|
Частый гость
 
Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691

|
Цитата(rx3apf @ Sep 27 2010, 14:43)  Смотрим там же - "-2K ≤ k < 2K". А 96E hex - это больше, чем 2K. Команда-то используется не только, чтобы переходить "вперед", но и "назад"...
Работающая на каком кристалле ? И для какого кристалла ругается компилятор ? В общем-то, да, порог 2kB. Кристалл Мега8. Если открываю хекс в студии, то симуляция проходит. Если пишу ручками, как в примере, то ассемблер ругается при компиляции начало hex-файла: Код :02 0000 02 0000 FC :10 0000 00 6DC9 1895 1895 9CC1 1895 1895 1895 1895 4F :10 0010 00 1895 83C1 1895 1895 1895 1895 CFC1 1895 FE C96D - rjmp 0x96D
2.rar ( 4.95 килобайт )
Кол-во скачиваний: 78
|
|
|
|
|
Sep 27 2010, 09:41
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(tazik @ Sep 27 2010, 10:05)  В общем-то, да, порог 2kB. Кристалл Мега8. У меги8 порог 2К слов, т.е. вся память доступна при помощи rjmp. Поэтому команда jmp вообще отсутствует. Одна половина памяти доступна прыжком вперед (возможно с переполнением), вторая - прыжком назад, также возможно с переполнением. Про название вашего ассемблера вы умолчали, если не изменяет память - у студийного была опция вроде "использовать прыжок назад для достижения дальних адресов".
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 28 2010, 01:15
|
Частый гость
 
Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691

|
Цитата(Сергей Борщ @ Sep 27 2010, 17:41)  У меги8 порог 2Кслов, т.е. вся память доступна при помощи rjmp. Поэтому команда jmp вообще отсутствует. Одна половина памяти доступна прыжком вперед (возможно с переполнением), вторая - прыжком назад, также возможно с переполнением. Про название вашего ассемблера вы умолчали, если не изменяет память - у студийного была опция вроде "использовать прыжок назад для достижения дальних адресов". Спасибо, сейчас покопаю. Ассемблер атмеловский, из AvrStudio
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|