esaulenka 7 16 мая, 2017 Опубликовано 16 мая, 2017 · Жалоба Кто-нибудь занимался дизассемблированием бинарника для контроллера, у которого память представлена несколькими банками? В частности, у архитектуры C166 есть несколько режимов адресации. Вариант "в один регистр записывается номер data page, а в другой - 14-битное смещение внутри этой page" я в уме считаю с трудом. Как-то можно сказать "вот эта константа должна лежать в такой-то странице, сгенери для неё ссылки"? Вариант "номер data page берётся из DPPx" тоже почему-то работает криво. Вроде б в эти регистры пишутся один раз, при инициализации (точнее, два раза - при инициализации загрузчика, а потом при инициализации ядра), но половина переменных "промахивается" мимо SRAM... Все статьи - про x86, 16-битный режим там лет 20 не в чести :-) PS Пытаюсь сопрячь нашу железку с чужой. Документации нет и не будет (они большие, а мы маленькие...), метод разглядывания обмена особо не помогает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 224 17 мая, 2017 Опубликовано 17 мая, 2017 · Жалоба Вариант "в один регистр записывается номер 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 лет назад уж... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 36 17 мая, 2017 Опубликовано 17 мая, 2017 · Жалоба Plug-in для C166 существует? У его разработчиков поспрашивать… Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться