Перейти к содержанию
    

дизассемблер IDA

Кто-нибудь занимался дизассемблированием бинарника для контроллера, у которого память представлена несколькими банками?

 

В частности, у архитектуры C166 есть несколько режимов адресации.

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

 

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

 

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

 

 

PS Пытаюсь сопрячь нашу железку с чужой. Документации нет и не будет (они большие, а мы маленькие...), метод разглядывания обмена особо не помогает...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вариант "в один регистр записывается номер data page, а в другой - 14-битное смещение внутри этой page" я в уме считаю с трудом.

...

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

Если там страницы даже не перекрываются - что там сложного?

Как бы Вы жили на этом самом x86, где страницы перекрывались внахлёст и одна и та же переменная находилась сразу во многих страницах по разному смещению :laughing:

И ничего - программировали в своё время без проблем и на асме в том числе.

Адресация шла через сегментные регистры. Для каждой команды были сегментные регистры по умолчанию (тогда они явно не указывались в коде команды) или можно было переопределить сегментный регистр (задавался соответствующим префиксом перед командой). Например: 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:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...