Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: дизассемблер IDA
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК
esaulenka
Кто-нибудь занимался дизассемблированием бинарника для контроллера, у которого память представлена несколькими банками?

В частности, у архитектуры C166 есть несколько режимов адресации.
Вариант "в один регистр записывается номер data page, а в другой - 14-битное смещение внутри этой page" я в уме считаю с трудом. Как-то можно сказать "вот эта константа должна лежать в такой-то странице, сгенери для неё ссылки"?

Вариант "номер data page берётся из DPPx" тоже почему-то работает криво. Вроде б в эти регистры пишутся один раз, при инициализации (точнее, два раза - при инициализации загрузчика, а потом при инициализации ядра), но половина переменных "промахивается" мимо SRAM...

Все статьи - про x86, 16-битный режим там лет 20 не в чести :-)


PS Пытаюсь сопрячь нашу железку с чужой. Документации нет и не будет (они большие, а мы маленькие...), метод разглядывания обмена особо не помогает...
jcxz
Цитата(esaulenka @ May 16 2017, 18:30) *
Вариант "в один регистр записывается номер data page, а в другой - 14-битное смещение внутри этой page" я в уме считаю с трудом.
...
Все статьи - про x86, 16-битный режим там лет 20 не в чести :-)

Если там страницы даже не перекрываются - что там сложного?
Как бы Вы жили на этом самом x86, где страницы перекрывались внахлёст и одна и та же переменная находилась сразу во многих страницах по разному смещению laughing.gif
И ничего - программировали в своё время без проблем и на асме в том числе.
Адресация шла через сегментные регистры. Для каждой команды были сегментные регистры по умолчанию (тогда они явно не указывались в коде команды) или можно было переопределить сегментный регистр (задавался соответствующим префиксом перед командой). Например: MOV AX, ES:[DI] - заменить сегментный регистр DS (default) на ES.
Или с прямой адресацией: MOV AX, CS:var1
Также перед кодом можно было определить какой сегментный регистр на какой сегмент указывает. Вот так:
ASSUME CS:text,DS:data,ES:NOTHING,SS:stack
Это говорит для последующего кода (до след. ASSUME), куда указывают каждый из приведённых сегментных регистров.
Тогда, если после этого скажем встретится команда: MOV AX, var2, а переменная var2 расположена в сегменте data, то будет сформирован код MOV AX, var2 без префикса переопределения сегментного регистра,
а если она находится в stack - то будет сформирован код: MOV AX, SS:var2 (с префиксом SS).
Можно было и везде явно указывать сегментный регистр для каждого имени.

PS: Эххх - давненько это было! Почти 20 лет назад уж... blush.gif
Obam
Plug-in для C166 существует? У его разработчиков поспрашивать…
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.