Робот-программист "Ванюша". Учим ASM.

Тема в разделе "WASM.ZEN", создана пользователем vladfind, 5 дек 2005.

  1. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши




    Вот не полный список проверок, прежде чем достичь положительного результата:

    <ol type=1><li> Платформа x86

    <li> Наличие OS WinXX :)

    <li> Живой путь к Файлу FASM 1.64

    <li> Внешний файл 'win32ax.inc' имеет ссылки на '*.inc' Всё должно быть доступно :)</ol>



    Т.е в окончательном виде нужно в рабочий каталог копировать все эти файлы и, обращаю внимание, версии всех используемых файлов должны быть в состоянии компиляции и проверки примера программы.
     
  2. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Мне собственно роботов никаких для повышения производительности не требуется. Вот только средство ввода информации в компьютер (клава) по медлительности - не устраивает. Вобщем надо думать в сторону создания интерактивного нейроинтерфеса с машиной, дабы можно было быстро писать(может даже рисовать) программный код, алгоритм.

    Кстати, если задуматься о программной составляющей подобной системы - наверняка понадобится новый язык программирования-проектирования-моделирования, позволяющий реализовывать связанный проект на разных уровнях абстракции. Может по сути это будет смесь описательных языков (HTML,XML) и обычных языков программирования (asm,C,pascal): представьте себе что в текст программы по ходу можно будет вставлять не только комментарии, но и рисунки, диаграммы, таблицы, и в пределах одного файла можно будет использовать несколько языков (если уж совсем загоняться - в один файл может поместиться и описание всего проекта с документаций, если конечно проект небольшой). Похоже из-за постепенного ИТ-индустрии смещения в зону Web-программирования, такое средство будет востребованно на рынке.
     
  3. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    Кстати насчет художников... Искусство - всего лишь способ выражения творческой мысли, и не вижу ничего плохого в том чтобы автоматизировать сам способ, инициатором творчества всегда будет человек, ясен пень, но автор и не ставил задачу автоматизировать иницитора...



    П.С. Кстати такой херью страдал Сёрра - художник-имрессионист :)
     
  4. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    alpet

    Вобщем надо думать в сторону создания интерактивного нейроинтерфеса с машиной, дабы можно было быстро писать(может даже рисовать) программный код, алгоритм.



    Вот... Еще один... Идея овладевает массами, а значит, недолго уже планетке осталось вертеться, потому что мы взорвем ее фпень :)



    представьте себе что в текст программы по ходу можно будет вставлять не только комментарии, но и рисунки

    Так ведь уже можно. В Delphi. Только там от этих иллюстраций пользы мало, потому что картинка НИКАК не связана с кодом.



    Однако встает вопрос: зачем иллюстрировать программу рисунком, если ее можно сделать рисунком. Причем трехмерным и рекурсивным. А все эти буковки-скобочки в начале третьего тыячелетия - плоды отсутствия соответствующих технологий 30 лет назад и неразвитости прогрессивного и креативного мышления сейчас.
     
  5. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898


    Literate Programming. примерно то что нужно -- документация разбавленная кодом, которая компилируется и работает :)
     
  6. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши
    Изучаем исходный код FASM Win32



    Собственно зачем? Измерим алфавит, словарный запас, статистику использования как символов, так и слов.



    В файле статистика исходного кода FASM:

    [​IMG] 391556322__flat_Win32_statistics.zip



    Сделал несколько любопытных наблюдений:

    <ul type=disc>

    <li>Размер файла: 597 613 байт

    <li>Количество строк: 20 675 строк

    <li>Количество слов: 66 356 слов

    <li>Алфавит: 95 символов из 256

    <li>Словарный запас: 1 497 слов

    </ul>



    Топ популярности используемых символов:

    <ol type=1>

    <li> Код 20h 'ПРОБЕЛ' -> 229 083

    <li> Код А0h -> 20 674

    <li> Код 0Dh -> 20 674

    <li> Код 65h 'e' -> 33 941

    <li> Код 73h 's' -> 18 370

    <li> Код 69h 's' -> 16 492

    </ol>



    Топ популярности слов:

    <ol type=1>

    <li> 'mov' -> 3 687

    <li> 'cmp' -> 2 402

    <li> 'al' -> 2 358

    <li> 'eax' -> 2 138

    </ol>



    Маленький промежуточный вывод. Пробелы в таком количестве компьютеру явно не нужны! Значит уже на этом этапе ощущается дух человека. Люди пишут программы, изменяют и используют для себя.





    Какой статистики не хватает? Хотелось бы посмотреть частоту использования мнемокода (тогда сразу будет ясность с чего начинать обучение!), количество макросов, количество инструкций препроцессора и т.д.



    Идеально, если робот-программист смог ответить на вопрос о количестве конструкций объектов, которые созданы в исходном коде программы.



    Цель этапа исследования:

    ИСХОДНЫЙ КОД ПРОГРАММЫ => ОПИСАНИЕ ГРАММАТИКИ ЯЗЫКА => РАЗДЕЛИТЬ КОД ПРОГРАММЫ НА МОДУЛИ => ПОМЕСТИТЬ ОПИСАНИЕ В БАЗУ ЗНАНИЙ.



    Что можно в перспективе сделать?

    а) Оптимизация кода на FASM модулей и функций

    б) Кодгенерация 'на лету' исходного текста ассемблера и получение объектного кода.

    в) Добавить фрагменты кода, которые зависят от целевой SYSTEM.

    г) Использовать модели описания FASM для построения компилятора, например Modula.

    д) Добавлять, изменять синтаксис FASM с потребностями текущего момента.

    е) Построить правила перевода текстов с FASM <--> MASM, чтобы транслировать и использовать готовые фрагменты примеров кода программ.
     
  7. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши




    Очень интересная идея! И реализуется достаточно легко используя кодогенерация.



    Наример рассмотрим фрагмент с сайта http://asm.shadrinsk.net/uroki.htm

    [TEXT]

    Перевод чисел в двоичную форму (в виде строки)



    Данная процедура конвертирует 16-битное слово в строку ASCIIZ, т.е. число 7 преобразовывается в строку 0000000000000111. Лидирующие нули включаются в строку. Строка ASCIIZ - это набор символов, завершающихся 0.

    [/TEXT]



    [ASM-MASM]

    NmbrToBi$ proc ;POW36

    ;Входные данные: AX - смещение строки, BX - число, которое необходимо преобразовать

    ;Выходные данные: Строка ASCIIZ. Регистры не сохраняются.

    mov DI,AX ;смещение строки

    mov DX,8000h ;проверочное слово, 1 в позиции 15

    mov CX,16 ;обрабатываем 16 бит

    NumberTo_B0:

    mov AL,48 ;символ '0'

    test BX,DX ;бит равен 1?

    jz NumberTo_B

    inc AL ;символ '1'

    NumberTo_B:

    stosb ;записываем в строку '1' или '0'

    shr DX,1 ;сдвигаем тестовый бит вправо

    loop NumberTo_B0

    mov [DI],DL ;завершаем строку 0

    ret

    NmbrToBi$ endp

    [/ASM-MASM]



    Ввели новые теги. Правило получения листинга "чистого ассемблера" после кодогенерации:

    <ul type=disc>

    <li> Всё что между [TEXT][/TEXT] вставим в начало строки ';' или удалим.

    <li> Теги [TEXT][/TEXT][ASM-MASM][/ASM-MASM] заменяем пробелами.

    </ul>



    Будет работать.
     
  8. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    CyberManiac

    1. По поводу "взорвем планету фпень". Мне более по душе альтернатива из "Газонокосильщик-2" - всем (заинтересованным) миром перебраться в виртуальную реальность.

    2. Насчет Delphi не знаю об такой возможности (и врядли стану ее использовать), но в любом случае там нет явно разделенного представления: контейнер для кода (пускай даже на XML) и собственно сам код. Файлы с исходниками попрежнему представляют собой обычный текстовые файлы...



    vladfind

    Впринципе да, это самый примитивный вариант контейнера для исходного кода. Но в перспективе развития он может обрасти множеством полезных свойств. Например очень неплохо было бы снабжать каждую функцию тегом времени модификации (или даже сохранять в контейнере несколько версий функции), что упростило-бы слежение за изменениями в файлах, когда проект одновременно разрабатывается несколькими программистами. Так-же полезно было бы вставлять в код гиперссылки, ведущие хоть на документацию, хоть на зависимый код. Мне также приогодилась бы возможность использования раскрываемых языко-независимых макросов (которые без тегов едва ли можно реализовать). Такие макросы при их вставке, сразу же раскрываются в исходный код (этот код будет изменяться везде где встречается тег вставки, при правке исходного макроса).
     
  9. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши




    См. выше статью Андреева. Автор высказал и воплотил идею перхода от текстового редактора программ к структурному. Эту мысль и подход ОБЯЗАТЕЛЬНО будет реализована в роботе-программисте! Это ключевая идея автора. В оболочке компилятора мы видим не текст(!), а структуру программы, похожу на обыкновенный текст из символов. Затронута большая тема и раскрывать будем её по мере осмысления и наработок.



    Сегодня решил посмотреть технологию программирования на языке Oberon (BlackBox). Пребываю в восхищении! "Весь век учись" - правильная поговорка.



    Приведу фрагмент кода программы:



    (* Модификации info21 2003-09-22:



    Изменено имя модуля.

    В процедуре HandleCtrlMsg поставлен CASE вместо IF в обработке клавиш и добавлены другие варианты клавиш.



    Esc — начать/остановить игру.

    Стрелка влево/вправо (или цифры 4/6) — сдвинуть фигурку влево/вправо.

    Стрелка вниз/пробел — сбросить фигурку.

    Стрелка вверх/5 — повернуть фигурку.

    *)



    (* Tetris.NewGame — кликнуть по коммандеру, чтобы начать игру. *)

    MODULE Tetris;



    IMPORT

    Dates, Services, Ports, Models, Views, Properties, Controllers, Stores;

    и т.д.



    Звёздочка выделена. Нажимаем на неё и программный модуль стартует и исполняется. ТЕСТ-ОПИСАНИЕ + КОД-ПРОГРАММЫ + ВЫПОЛНЕНИЕ.



    http://www.oberon.ch/prod/blackbox/



    Теперь есть ясный план для FASM:

    <ol type=1>

    <li> Выполнить переработку кода FASM по принципу Oberon!!!

    </ol>
     
  10. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    alpet

    По поводу "взорвем планету фпень". Мне более по душе альтернатива из "Газонокосильщик-2" - всем (заинтересованным) миром перебраться в виртуальную реальность.



    Можно и так, ползучая кибернетическо-психоделическая революция - тоже позитифф.



    но в любом случае там нет явно разделенного представления: контейнер для кода (пускай даже на XML) и собственно сам код

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



    Файлы с исходниками попрежнему представляют собой обычный текстовые файлы...

    В последних Делфях вроде пришли к пониманию прогрессивности использования UNICODE и идентификаторов из символов произвольного языка. Луч света в темном царстве современного программирования, однако. Психоделический прорыв в иные измерения, я бы даже сказал.



    vladfind

    Сегодня решил посмотреть технологию программирования на языке Oberon (BlackBox). Пребываю в восхищении! "Весь век учись" - правильная поговорка.

    Тогда, возможно, есть смысл посмотреть на XDS? Та же Модула2/Оберон, но не под собственный фреймворк, а с трансляцией в нативный код или в сишный исходник. Кроссплатформенное, стOит бесплатно :)
     
  11. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши




    Что писать? И, как писать?



    Цитата из одной из книг "Основы разработки ПО"



    Результатом конструирования - исходный код - часто является единственным описанием программы.

    <ul type=disc>

    <li>Зачастую единственным видом доступной программистам документации является сам исходный код. Спецификации требований и проектная документация могут устареть, но исходный код актуален всегда, поэтому он должен быть максимально качественным.

    <li>Последовательное применение методов улучшения исходного кода - вот ято отличает детальные, корректные и поэтому информативные программы...

    </ul>



    Лабороторный прототип. Черновик технического задания. Язык ассеблера FASM в базе знаний

    <ol type=1>

    <li>Исходный текст программы - это гипертекст-контейнер: описание, ссылки интернет ресурс, исходный текст на языке ассемблера.

    <li>Текст преобразуется в объекты: описание, ресурсы web, код программы.

    <li>Код программы преобразуется модулем синтактического анализа в структуру и систематизируется.

    <li>Из исходного кода ассемблера FASM реконструируем математическую модель и описываем граматику языка ассемблера.

    <li>На основании модели транслируем в язык высоко уровня (шаг 1. Java {удобно размещать отчеты на web страницах}, 2. Oberon {только он!}

    <li>Интерфейс дизайна реализован с помощью аппелата java.

    <ul type=disc>

    <li> Текстовый блок 'ИСХОДНАЯ ПРОГРАММА' (копируем через буфер)

    <li> Текстовый блок 'РЕЗУЛЬТАТ'

    (отображение промежуточных результатов и финального объектного кода)

    <li>Кнопка 'ПРОВЕРИТЬ ТЕКСТ'

    <li>Кнопка 'КОМПИЛИРОВАТЬ'

    <li>

    </ul>

    </ol>
     
  12. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    vladfind

    Что-то я не понял, что нужно сделать в 4 пункте? По исходному коду компилятора определить правила вывода которые порождают язык ассемблера? Насколько эта задача реальна? Есть ли у неё однозначное решение?



    В архиве пара примеров того, во что может превратиться текст поданный fasm'у на вход. Можно ли назвать это программами на основании того, что оно компилируется без ошибок? ;)

    [​IMG] _947658318__fasmart.zip
     
  13. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши




    Однозначное решение есть - сам код и алгоритм на FASM! Tomasz Grysztar по специальности прикладной матемтик. Для него грамматика языка, как нам анекдот пересказать. Собственно диалект FASM - это реализация модели. Жаль, что не выложил подробного описания по языку.



    Решение, т.е. генерация кода для процессора будет одназночной.

    <ul type=disc>КОД ПРОГРАММЫ >>> FASM -> BIN = "Робот-программист" -> BIN.</ul>

    (Если конечно полностью следовать исходному коду).
     
  14. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши




    Нужно исследовать. Одно могу точно скачать, что реализация FASM, т.е. на вход текст, на выходе объектная программа, не обязательно приведет к положительному результату.



    Работал я с замечательным коллегой и наставником Петром Семёновичем. Он со мной делился примерами из жизни. Они в качестве теста оформляли заголовок программы для Fortran'а и в тело записывали случайный набор символов. Большие ЭВМ машины, типа ЭС-1046, отправляли в состояние долгой задумчивости. Компилятор фортрана на такие входные данные явно не расчитывали...
     
  15. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши




    Испытал! Очень любопытная программа - пропуская через FASM программу на ассемблере получается графический файл изображение фрактала... Спасибо. Аналогов никогда не встречал.



    Мои ошибки:

    1. Из fractal.bat -> fractal.exe ERROR

    2. Из fractal.bat -> fractal.bin ERROR



    А ещё есть подобные этюды?
     
  16. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши
    Лекция Никлауса Вирта в Политехническом музее в Москве. Личные впечатления.

    <ul type=disc>Елена Филиппова

    дата публикации 22-09-2005 04:21, http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1155



    </ul>



    ...Затем пошел рассказ о среде программирования, которая должна позволять комфортно работать с языком. "Когда в 1979 году ОБЕРОН был создан", говорил профессор, "мой коллега Гуткнехт и я решили, что напишем такую систему сами. Она должна была работать с текстами, с графикой и документами. Мы занимались этим в свое свободное время в течение двух лет. Могу вас заверить, это был очень и очень полезный инструмент и занимал он всего 200К памяти. Ни одна из существующих сейчас на рынке систем не способна работать на таких малых ресурсах"...
     
  17. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши
    Ссылка на тему в форуме: http://www.wasm.ru/forum/index.php?action=vthread&forum=3&topic=12725



    Любая программа требует тестирования и изучения поведения в боевой обстановке. Делаю реконструкцию кода FASM, чтобы переписать ассемблер на языке "высокого уровня", понять КАК ТАМ всё работает. Комментировал строки файла. Добавил после символа ';' , т.е. комментария символ кода 1Ah и препроцессор fasm'а сдох. Да!?
     
  18. Aquila

    Aquila Самурай дзена

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    1.467
    Адрес:
    Russia, Moscow
    n0p



    Вопрос недзенский -).
     
  19. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши




    Сейчас просматриваю ссылки на сочетание слов "производительность программиста". Знающие индустрию коммерческого ПО делятся своими размышлениями на эту тему. Медленно работаем господа программисты! Медленно... Ещё обиднее, когда софт уже есть в виде кода на других языках, а воспользоваться нельзя. Вот несколько примеров.

    а) Есть программа на Pascal. Нужно переписать на другой диалект Паскаля, где, всего-то, немного по другому оформляются комментарии.

    В исходнике '(*..*)' - нужно в '/*...*/'. И не всегда простая операция "Наити/Заменить" имеет положительный результат.



    Наука начинается там, где начинаются измерения.

    Д. И. Менделеева



    Смотрим любой проект. Можно сразу сказать сколько процедур и функций в нём?



    Какие из них не используются? Сказать где та или иная функция, локальная она или глобальная. Быстро изменить наименование в области видимости идентификатора и т.д. и т.п.



    На вопрос "Зачем" отвечаю так:

    Ассемблер ближе всего к кодам процессора x86. Любой язык имеет ту или иную реализацию ассемблера для генерации проекта. Можно ли назвать прграммиста "программситом", который не попробовал бы написать или глубоко исследовать ассемблер? Многое, очень многое становиться понятным!



    Уже обозначил выше, что мне понравился инструмент написания кода в проекте 'BlackBox' Oberon. Предложенный лабороторный прототип выше (черновик технического задания, язык ассеблера FASM в базе знаний), инструмент для написания программ. В 'BlackBox' реализовано лаконично и красиво - полностью перекрывает мои пожелания! Хочу иметь для проектирования ASM кодов. Чтобы ссылки на ресурсы, справочники, иллюстрации - всё было представлено в тексте программы . Нужно сохранить простой текст программы в файле '*.asm' делаем "Экспорт". В 'BlackBox' уже всё продумано и реализовано! Имеем открытые исходные тексты на языке Oberon, авторы не возражают использовать в своих наработках... Есть у меня и компилятор с диалектом Oberon "Странник Модула-Си-Паскаль". Однако простым копирование файлов нельзя получить проект и 'EXE' файл для старта. Немного, чуть-чуть, синтаксис и семантика языков отличается. Знакомая ситуация!?



    Здесь-то и нужна автоматизация. Здесь планирую использовать базу знаний программиста.



    Вот диаграмма этапов по трансляции с одного диалекта в другой (будет обобщение для различных целевых языков):



    <font color="blue]

    {Исходный язык} -> G1-грамматика языка -> P1-правила преобразование в сематическое описание -> P2-правила преобразование из сематического описания -> G2-грамматика целевого языка -> {Целевой код для диалекта языка} -> Компиляция в машинный код.</font><!--color-->



    Клон FASM 1.64 пригодится на этапе компиляции. В "Страннике" есть ассемблер, но он простой. А хочется встроить макроассемблер с оптимизацией кода или расширять его функциональность с потребностями дня и моды.
     
  20. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши
    Графический файл отображения кода программы в ' 'BlackBox'. Текст программы + блок схема.



    [​IMG] _606401002__Sample.zip