реклама на сайте
подробности

 
 
> дизассемблер IDA
esaulenka
сообщение May 16 2017, 16:30
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



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

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

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

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


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


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jcxz
сообщение May 17 2017, 07:33
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(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
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 19:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016