Важная информация

User Tag List

Страница 8 из 31 ПерваяПервая ... 456789101112 ... ПоследняяПоследняя
Показано с 71 по 80 из 304

Тема: DisAsm-11

  1. #71

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,507
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    .TSK с перекрытиями. Первый подход к снаряду
    Ну, если говорить строго, до перекрытий в данном случая я ещё не добрался (но программа с перекрытиями), только начал раскручивать информацию о них (правое верхнее окно, там же пример автогенерации комментариев), но началась отработка показа листингов для таких программ. Пока на так называемой multi-user task.

    Этот вариант поддерживается (ЕМНИП) только в M-Plus и основная мысль в их реализации - как можно сэкономить память. Секции с атрибутами RO и RW собираются в отдельные сегменты и сегмент RO как бы образует встроенную в .TSK dll библиотеку (в терминах RSX - Shared Library). Когда такая программа запускается в первый раз, операционка создаёт область памяти, в которую загружает RO сегмент, далее традиционным способом организуется задача (в Windows аналог - процесс) и часть её адресного пространства отображается на RO область (с защитой от записи). При втором и последующих запусках - область уже создана, так что нужно только создать задачу и отобразить на RO область - что позволяет ускорить запуск и сэкономить память. При этом, если завершены все экземпляры задач программы - RO область может остаться висет в памяти - если количество свободной памяти достаточно для запуска других программ (ускорение запуска нашей muliuser программы). Эта область может быть удалена из памяти - если памяти не хватает, а запущенных экземпляров multiuser программы нет, или "выгружена" - если они есть. Если планировщик выбирает multiuser задачу для выполнения, а любая её часть/части (включая RO область) выгружены - предварительно выгруженные части подгружаются. В данном случае "выгрузка" для RO части - на самом деле фикция - поскольку копия RO - при "выгрузке" она просто удаляется из памяти, а "загружена" она будет из файла программы.

    Пример содержимого памяти с запущенной multiuser задачей:
    Код:
    RSX-11M-PLUS V4.6  BL87   (KPXX01)  256K   UP 000:00:00 2022-08-24  11:05:02
    TASK=  *IDLE*                FREE=   SY0:165840.   P0:DMO
                                         VF1:1071.     P1:DMO            PARS
    POOL=4592.:4746.:15.         SECPOOL=368.:512.:71%
         4592.:4746.:15.                 368.:512.:71%                  SECPOL:P
                                                                        SYSPAR:D
    IN:                    D     M  TR  T  PD MV DP  .    F    F F      DRVPAR:D
    10                     I     C  KC  T  UU UF WM  .    C    1 1      GEN   :D
    63K                    R     R  TT  :  C: :: :T  .    S    1 1
    OUT:                   1     .  N.     O      .  A    R    A A
    0                      1     .   .     M      .  T    E    C C
    0K                     M     .   .            .  .    S    P P
                      !========!===>]=]===)!)()=))>-----+---! <>---+
    0*******16******32******48******64******80******96******112*****
    E----P----P-------D---------------D----------D------------------
    ----------------------------------------------------------------
    128*****144*****160*****176*****192*****208*****224*****240*****
    -->--+   !--->-->--->-><---->--->
     P  .    A Q   S  H  L    B   R                                     ERRSEQ
     I  .    C M   Y  R  P    A   M                                     0.
     P  .    D G   S  C  0    P   D
     T  P    2 .   L  .       0   T
     0  I    0 .   O  .           0
        P      .   G  .
    ...AT., ...PIP - RO сегменты
    PIPT0 - RW сегмент
    Обработчки командых файлов ICP (задача ...AT.) в текущий момент не запущен - в памяти только RO сегмент, а ...PIP был запущен, так что виден RO сегмент (...PIP) и RW сегмент запущенной задачи (PIPT0)

    - - - Добавлено - - -

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

    - - - Добавлено - - -

    Подкорректированный вариант

  2. #72

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,507
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Давно задуманный и наконец реализованный функционал
    Пока метка занёса руками Думаю, добавить в генерацию кода - благо в процедурах работы с перекрытиями достаточно стандартные метки Ну и задумки по работе со всяким из стандартных библиотек

    P.S. Слегка накосячил с картинкой, поправил, через некоторое время будет видна правильная (и эту строку уберу)
    Последний раз редактировалось Hunta; 19.11.2022 в 17:39.

  3. #73

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,507
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Пофиксил некоторое количество ошибок.

    Теперь, после появления возможности добавлять свои имена меток - анализатор может вставлять метки.
    Чем и воспользовался
    Все метки расставлены автоматически.

    - - - Добавлено - - -

    Случайно открыл. С чего всё начиналось. Поржал

  4. #74

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,507
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Начал раскручивать описание перекрытий
    Пока самый простой вариант - автозагрузка с диска. На картинке - фрагмент описания.
    А ещё могут быть перекрытия, резидентные в памяти, а ещё может быть программа, использующая сегменты кода и даных... А плюс ещё мультизадачные программы.. с поддержкой кода-данных.. А ещё прилинкованные библиотеки.. или разделяемые блоки данных... А ещё разделяемые библиотеки режиму супервизора... А ещё разные версии процедур поддержки перекрытий...

    Но пока более прозаичный вопрос - в каком формате это будет в DisAsm-е, что бы удобно было отображать картинки и что бы было удобно работать со всем этим барахлом...

    Плюс пришла ещё в голову идея, что неплохо бы иметь блочные (перед куском кода) комментарии...

    И да, всё это раскручено и прокомментированно самим DisAsm-ом, то есть я просто открыл программу в нём и переместился на интересные места.

  5. #75

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,507
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Идея пришла в голову - идея была реализована
    Сначала сделал немного по-другому, но там начали вылазить проблема за проблемой и в какой-то момент сказал - нахфик и сделал по другому. В целом, первый вариант мне был как-то больше по душе и может быть я его реализую - когда-нибудь, когда придумаю - как. А пока вот так
    Комментарий был слямзен с исходника, что опять как бы намекает на использования шаблонов - из исходников стандартных (в первую очередь из SYSLIB) процедур

    - - - Добавлено - - -

    Вдогонку - выхода на пользовательский интерфейс пока нет, но в варианте, который был реализован - работы минут на 10-15, надо будет только придумать - как будет выглядеть интерфейс

  6. #76

    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    483
    Спасибо Благодарностей отдано 
    139
    Спасибо Благодарностей получено 
    391
    Поблагодарили
    146 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Интересно стало как сдизассемблирует такой код? Навроде скажем реинициализация счетчика (ну а что, может ведь такое быть):
    Код:
    RSTTIM:	mov (pc)+, (pc)+
    TINIT:	.word 100
    TCURR:	.word 0
    	return
    Тут возможно сложновато ибо надо анализировать используются-ли эти адреса где-нибудь еще и если используются - делать нотацию через (PC)+ для понимания.

  7. #76
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #77

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,507
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    Интересно стало как сдизассемблирует такой код?
    Вот сходу не скажу (и лень смотреть по коду), щас подсуну и посмотрим

    - - - Добавлено - - -

    Первый вариант кода
    Второй вариант кода
    Кстати, если бы всё таки подумал - то нарисовал бы - что получится

  9. #78

    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    483
    Спасибо Благодарностей отдано 
    139
    Спасибо Благодарностей получено 
    391
    Поблагодарили
    146 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    щас подсуну и посмотрим
    Ну в принципе нормально что метки ставит рядом и понять можно будет в итоге. А то опасался что меток рядом не поставит. В принципе не прямо часто наверное пользуются похожей конструкцией (хотя лично я кое-где для экономии места юзаю)

  10. #79

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,507
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    Ну в принципе нормально что метки ставит рядом и понять можно будет в итоге. А то опасался что меток рядом не поставит
    Там зависит от того - будут ли ссылки на эти две ячейки откуда-то ещё (отслеживание идёт) - есть - метки поставит. И метки он ставит именно на ячейке, но когда не может (так как в ячейке второй или третий аргумент команды, например) - делает вот так. Хотя может быть и .-1 и .-2

    Почему я не стал делать с (PC)+) - лишний код проверки и неперевариемость MACRO-11 конструкции вида MOV (PC)+, #100 (а также MOV (PC)+, 100 и MOV (PC)+, @100) - а значит ещё лишний код проверок

    Вместо MOV - и другие двух-адресные команды

    Точнее - переварить то он переварит, но код сгенерит неверный

  11. #80

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,507
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    ибо надо анализировать используются-ли эти адреса где-нибудь еще
    Что-то как-то не обратил внимание на это предложение Комментарий к нему.
    Это было сделано с очень ранних версий DisAsm-а. К сожалению, из-за переноса кода под более свежую версию VS - коммиты остались, но дата-время самых первых - устрачены Но если посмотреть комменты здесь, то работа была начата примерно в районе 28.02.2021, а отслеживание ссылок началось 04.03.2021, то есть на пятый день возни с программой Всё это дело несколько поплыло после того, как начали появляться команды-подсказки и вроде только сегодня я добил последнюю(?) неправильность (скажем, ячейка с командой ссылалась на ячейку с данными, соотвественно - на ячейке с данными был метка, а потом ячейка с командой была помечена как НЕИЗВЕСТНОЕ - но метка оставалась, теперь, если это была последняя ссылка - метка убирается), но - даже до сегодня - лишние метки могли быть, пропущенных - вроде нет

    Ещё одна особенность DisAsm-а - он НЕ ГЕНЕРИРУЕТ исходник у себя где то в памяти. Загруженная программа - это массив ячеек со значениями и аттрибутами. И в зависимости от значения и аттрибутов - ячейка будет визуализирована (в окне или при генерации исходника) так или иначе. Причем, если какой-нибудь аттрибут поменяется - ячейка (при показе в окне) будет сразу перерисована. А кнопка - сгнерировать исходник - это записать некую префиксную часть (зависит от типа файла), а потом просто пробежаться по ячейкам и то, как они будут отрисованы в данный момент - записать в файл. Ну и этих аттрибутов достаточно много Например - список ссылок на данную ячейку


    Поправил немного ошибок, вынес возможность задавать описания на (стандартные) метки через файл, ещё позанимался с блочными комментариями - теперь они доступны через пользовательский интерфейс. Например. И например.
    Комменатрий - тоже аттрибут - и если он меняется - моментальная визуализация (посимвольных) изменений

    - - - Добавлено - - -

    А, да, DisAsm различает автоматически сгенерированные метки и поставленные руками.
    Поставленные руками - не убираются при отслеживании ссылок
    То есть пользователь поставил метку - она будет железной и будет использована вместо автоматически сгенерированной. Убрал ручную метку - и или не будет или появится автоматически сгенерированная

Страница 8 из 31 ПерваяПервая ... 456789101112 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Disasm with Sts 7.5...
    от Stl75 в разделе Софт
    Ответов: 3
    Последнее: 25.06.2018, 11:28

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •