 |
nedoPC.orgCommunity of electronics hobbyists established in 2002 |
 |
...
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 09:08 Posts: 7777 Location: Россия
|
Я тут разыскал наш довольно древний пост - "Кроссассемблеры для 8080" И там обнаружил ссылку на действительно весьма неплохую статью: Алгоритмы работы АссемблеровСсылка оказалась до сих пор действующая, действительно, жаль, что нет оглавления там. Похоже, что оцифрована какая-то книга... Всё, что касается вопросов по ассемблерам, начинается отсюда: Тема 2 Ассемблеры. Это если кому-либо интересно здесь. Сам я еще тогда просматривал этот материал, хотя смотрю сейчас - до макроассемблеров и кроссассемблеров я тогда недолистал... P.S. Нет, это не одна книга оцифрована, а "дайджест" по нескольким книгам:P.P.S. А.Д. - это, видимо, А.С.Деревянко "Системное программирование"
_________________ iLavr
|
12 Oct 2018 03:50 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 09:08 Posts: 7777 Location: Россия
|
Кстати, есть вот такой сайт: Writing Your Own Assembler - The Assembler Developer's KitОн мне уже много раз попадался в поиске, и я занес его к себе в ссылки. Там утверждают, что написать ассемблер с нуля ("from scratch") и полезно и интересно, но ассемблер профессионального качества проще и быстрее сделать из хороших заготовок. На одном тематическом ресурсе отзывались об этом источнике весьма положительно... Другое дело, что мне в данный момент интереснее допилить свой ассемблер "from scratch". Но, может быть, кому-либо данная ссылка будет полезна...
_________________ iLavr
|
13 Oct 2018 09:56 |
|
 |
barsik
Maniac
Joined: 19 Feb 2017 04:46 Posts: 260 Location: Россия
|
75 тысяч строк, что пакет ADK добавляет в самодельный ассемлер, наводят на мысль, что исходник всего полноценного ассемблера целиком будет содержать 80-100 тысяч строк. Но столько строк для 8-ми разрядки даже не странслировать в один файл, т.к в среднем одна строка исходника на ассемблере порождает 1.3...1.5 байтов и потому 75 тысяч строк после трансляции точно дадут более 64 кб. Т.е качественный ассемблер для 8-ми разрядки будет оверлейным, т.е двух или трёх файловым. Впрочем, там написано, что для экономии объёма кода можно добавлять в самодельный ассемблер не все функции.
Эти цифры наглядно иллюстрируют насколько сложно написать приличный ассемблер. Исходники качественных ассемблеров на Паскале обычно также содержат более 15 тысяч строк (а каждая строка ЯВУ генерит примерно десяток команд ассемблера).
|
17 Oct 2018 22:06 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 09:08 Posts: 7777 Location: Россия
|

В общем, зело подумав, я предпринял следующий трюк. Поскольку очень не хотелось сильно переделывать уже хорошо работающий исходник, я для строки, где есть математические операции, стал заносить в массив меток на 1-м проходе "нелегальную" метку M#A#T#H. На втором проходе, когда все адреса меток и константы уже известны, такая метка вызывает ошибку, в этот момент я и вызываю функцию анализа математических операции в строке аргумента - ValTOKEN. Если эта функция выдает результат, то строка успешно компилируется в код операции. Если же функция ValTOKEN возвращается с ошибкой, то в листинг компиляции записывается: "*** Error: Invalid Expression. ***************;". Математику по предварительным тестам вычисляет правильно. С точки зрения элегантности всё выглядит несколько тяжеловато, но работает вполне нормально! Обратил также внимание, что если бы я предусмотрел такую функцию с самого начала написания этого транслятора с языка 4-битного ассемблера, код получился бы компактнее и проще. Поскольку на первом проходе уже можно было бы вычислить часть выражений, для которых известны все входящие операнды. В этом же случае подпрограммы как бы дублируются частично. Ну и вот этот вопрос меня сейчас немного озадачил: Действительно, для процессора с гарвардской архитектурой некоторые трюки типа $+2, STA M+1не столь актуальны, как для архитектуры фон Неймана, поскольку память программ и данных разделены. То есть, красивым трюком STA M+1 программу как в i8080 не подправишь, а с памятью данных такой финт не выглядит эффективным - этой памяти всего 16 нибблов... Поэтому на данный момент анализ мат.операции я вставил лишь для кодов с адресом, где результат может достигать 4096. В остальных случаях аргумент не более 15, и есть ли необходимость что-либо вычислять - я пока сомневаюсть. Глубину стеков, кстати, уменьшил до 20. Поработаю пока с этим ассемблером и аппаратной частью 4-bit Processor-а, для которого он и был написан. Результаты выложу по готовности. Всё равно сам по себе этот ассемблер никому отдельно не нужен...
_________________ iLavr
|
24 Oct 2018 04:54 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 09:08 Posts: 7777 Location: Россия
|

И я тут копался у себя в архивах в поисках софта, который позволяет собрать HELP-файлы для Windows - хочу сразу написать и HELP-файл к своему ассемблеру... Но по пути нашел и корректный, весьма неплохо прокомментированный исходник 4-Кбайт ассемблера из пакета RAMFOS "Специалиста". Если кому он интересен, исходники в КОИ-7(8) здесь: Я на этом ассемблере много работал и считаю его весьма удобным, хотя, возможно, это лишь привычка. Посморел я сам исходник, и меня очень удивила строка: ORG 0100H а я отлично помню, что ассемблер из пакета RAMFOS "Специалиста" запускается в верхних адресах памати (вроде как: 0D800H). Я призадумался несколько... но память подсказала, что поскольку исходник корректный и правильно собирается при любом стартовом адресе, у меня была авантюрная мысль пересобрать этот исходник как СОМ-файл для DOS, но не переписывать его, а транслировать в коды 8086 автоматически. С этой целью я уже весьма давно написал кросс-транслятор кодов 8080 в коды 8086. Nedo-трансляторы для i8080Полностью автоматической трансляции не получилось, хотя полученный код 8086 успешно компилировался. Но необходимо было учесть различия архитектур "Специалиста" и IBM PC вручную, хотя вызовы RAMFOS в вызовы BIOS я кое-где конвертировал автматически. Но ручная правка всё же нужна. До конца я этот вариант не реализовал... По ссылке есть также два сторонних варианта конвертеров кода 8080 в коды 8086.
_________________ iLavr
|
24 Oct 2018 06:23 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 09:08 Posts: 7777 Location: Россия
|

Немного этот вопрос меня притормозил... Сам я предпочитаю HELP-файлы в формате .HLP для Windows, но уже в Windows 7 этот формат совсем не поддерживается и требует загрузки дополнительных файлов хотя бы из Windows ХР. Поэтому после некоторого раздумья решил я сделать HELP-файл в формате .СHМ. Тут снова возникло осложнение в том плане, что формат .HLP для Windows ориентируется на .RTF файлы Word, а формат .СHМ в своей основе имеет .HTМL файлы. Поскольку основа для HELP-файла готовилась в MS-Word, то и .HTМL файлы я попытался создать посредством экспорта из Word в .HTМL. Но оказалось, что Word не очень точно передаёт в .HTМL файл своё форматирование. Пришлось воспользоваться сторонним он-лайн конвертером: https://document.online-convert.com/ru/convert-to-html. Он более точно соблюдает разметку, и хотя она не полностью всё же идентична исходной, .СHМ HELP-файл собрался довольно-таки неплохо: Просьба посмотреть, как это будет выглядеть на других ОС и компьютерах. Чисто для удобства корректировки .HTМL файлов я их конвертировал в кодировке Windows-1251, а не в UTF, что, вероятно, было бы универсальнее. Вот и призадумался - не зря ли я так... В оригинале, как у меня, должно быть что-то примерно следующего вида:
_________________ iLavr
|
31 Oct 2018 04:17 |
|
 |
AlexanderZh
Doomed
Joined: 21 Mar 2017 13:50 Posts: 404 Location: Spb
|
На Вынь-10 с кодировками в оглавлении проблема, по форматированию вроде не видно косяков.
|
31 Oct 2018 05:06 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 09:08 Posts: 7777 Location: Россия
|
Спасибо! Вот чего-то подобного я и боялся... Хотя оглавление формировал не я, а сам компилятор .СHМ-help. Но посмотрю, что можно сделать, тем более, увидел и ошибку - " рператоров", хотя точно помню, что одну такую исправлял...
_________________ iLavr
|
31 Oct 2018 05:09 |
|
 |
jdigreze
God
Joined: 02 Jan 2006 03:28 Posts: 1380 Location: Abakan
|
Под Ubuntu 18.04 в xCHM не открылось совсем.
|
31 Oct 2018 05:40 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 09:08 Posts: 7777 Location: Россия
|
Странно...  А я как раз расчитывал, что *.CHM более универсальный формат HELP, поскольку он опирается только на браузер. Смею предположить, что HELP-файлы в формате .HLP для Windows, под Ubuntu уж точно не котируются.
_________________ iLavr
|
31 Oct 2018 06:12 |
|
 |
jdigreze
God
Joined: 02 Jan 2006 03:28 Posts: 1380 Location: Abakan
|
Не проверял. Возможно дело в кодировке, но не факт. Может и стоит делать сейчас именно в HTML.
|
01 Nov 2018 06:32 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 09:08 Posts: 7777 Location: Россия
|

В общем покопался я по разным сайтам, где обсуждают разные .CHM-компиляторы и сами .CHM- файлы с неверной кодировкой. Выяснил, что ошибка компиляции такая есть, и восходит она еще к M$ Help Workshop, который с нуля не умел работать с UTF-8, а потом его то ли пропатчили, то ли еще что... Но эта теория мне совсем не помогла... Я тогда взял небольшой .CHM-Help файл из своей Windows-7 и декомпилировал его. Увидел я следующее: TOC.hhc в оригинале записан просто в кодировке Windows-1251. TOC.hhc из файла SNMP.CHM Windows-7А у меня компилятор .CHM-Help записывает его в странных кодах ( "уши" вот отсюда): TOC.hhc в странной кодировкеПо образу и подобию TOC.hhc от Windows-7 я прописал всё в кодировке Windows-1251. Скомпилировалось нормально (заодно я убрал индексацию, раз уж её нет), в Windows-7 вижу всё правильно. Посмотрите, если не затруднит, на своих ОС. P.S. Неплохие ресурсы, поясняющие путь создания .CHM-Help, если кого это интересует:Создание файлов CHM; Как создать CHM файл (HTM2CHM и HTML Help Workshop в действии)
_________________ iLavr
|
03 Nov 2018 06:16 |
|
 |
AlexanderZh
Doomed
Joined: 21 Mar 2017 13:50 Posts: 404 Location: Spb
|
На 7-ке всё путём, на 10-ке тоже. Единственный минус CHM - без "разблокировки" файла после скачивания не отображается содержимое. Надо в реестре поискать этот пунктик.
|
03 Nov 2018 07:40 |
|
 |
jdigreze
God
Joined: 02 Jan 2006 03:28 Posts: 1380 Location: Abakan
|
Вот теперь всё нормально! Ubuntu 18.04/xCHM 1.23
|
03 Nov 2018 13:34 |
|
|
Who is online |
Users browsing this forum: No registered users and 4 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|