nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 14 Nov 2018 11:41



Reply to topic  [ 29 posts ]  Go to page Previous  1, 2
Компиляторы ассемблера 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Я тут разыскал наш довольно древний пост - "Кроссассемблеры для 8080"
И там обнаружил ссылку на действительно весьма неплохую статью: Алгоритмы работы Ассемблеров

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

Всё, что касается вопросов по ассемблерам, начинается отсюда: Тема 2 Ассемблеры.
Это если кому-либо интересно здесь. Сам я еще тогда просматривал этот материал,
хотя смотрю сейчас - до макроассемблеров и кроссассемблеров я тогда недолистал...


P.S. Нет, это не одна книга оцифрована, а "дайджест" по нескольким книгам:
А.Д. wrote:
Основные источники, которые использовались при подготовке конспекта:
1. Донован Дж. Системное программирование. - М.: "Мир", 1975.
2. Бек А. Введение в системное программирование. - М.: "Мир", 1988.
3. Вишняков В.А., Петровский А.А. Системное обеспечение микроЭВМ. - Минск: "Вышэйшая школа", 1990.


P.P.S. А.Д. - это, видимо, А.С.Деревянко "Системное программирование"

_________________
iLavr


12 Oct 2018 03:50
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Кстати, есть вот такой сайт:
Writing Your Own Assembler - The Assembler Developer's Kit
Он мне уже много раз попадался в поиске, и я занес его к себе в ссылки.

Там утверждают, что написать ассемблер с нуля ("from scratch") и полезно и интересно,
но ассемблер профессионального качества проще и быстрее сделать из хороших заготовок.
Quote:
The purpose of the Assembler Developer's Kit is to provide documentation and source code to those individuals who are interested in writing a professional quality assembler, without all the work needed to create such a product from scratch. Using the ADK will allow a programmer to concentrate on the interesting and fun parts of writing an assembler (e.g., working on the instructions and the encoding of those instructions) while sparing themselves all the "grunt" work (e.g., writing high-performance symbol table management code, writing a lexical analyzer, parsing declarations, and so on).

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

Другое дело, что мне в данный момент интереснее допилить свой ассемблер "from scratch". :wink:
Но, может быть, кому-либо данная ссылка будет полезна...

_________________
iLavr


13 Oct 2018 09:56
Profile
Maniac
User avatar

Joined: 19 Feb 2017 04:46
Posts: 246
Location: Россия
Reply with quote
Post 
75 тысяч строк, что пакет ADK добавляет в самодельный ассемлер, наводят на мысль, что исходник всего полноценного ассемблера целиком будет содержать 80-100 тысяч строк. Но столько строк для 8-ми разрядки даже не странслировать в один файл, т.к в среднем одна строка исходника на ассемблере порождает 1.3...1.5 байтов и потому 75 тысяч строк после трансляции точно дадут более 64 кб. Т.е качественный ассемблер для 8-ми разрядки будет оверлейным, т.е двух или трёх файловым. Впрочем, там написано, что для экономии объёма кода можно добавлять в самодельный ассемблер не все функции.

Эти цифры наглядно иллюстрируют насколько сложно написать приличный ассемблер. Исходники качественных ассемблеров на Паскале обычно также содержат более 15 тысяч строк (а каждая строка ЯВУ генерит примерно десяток команд ассемблера).


17 Oct 2018 22:06
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
...я решил в этот раз совместить приятное с полезным и допилить в этот вариант корректную
работу с длинной строкой аргумента, содержащей скобки и математические операции.
Lavr wrote:
Просто не всегда это легко вделать в существующий уже исходник - иногда проще переписать заново.
Я вот сейчас с трудом пытаюсь это сделать. Ассемблер был написан отдельно, про обработку строки
я задумался в самом конце.
Отдельно попробовал алгоритм со стеками - он работает, но в исходник вписывается тяжело.

В общем, зело подумав, я предпринял следующий трюк. Поскольку очень не хотелось сильно переделывать
уже хорошо работающий исходник, я для строки, где есть математические операции, стал заносить в массив
меток на 1-м проходе "нелегальную" метку M#A#T#H.
На втором проходе, когда все адреса меток и константы уже известны, такая метка вызывает ошибку,
в этот момент я и вызываю функцию анализа математических операции в строке аргумента - ValTOKEN.
Если эта функция выдает результат, то строка успешно компилируется в код операции.
Если же функция ValTOKEN возвращается с ошибкой, то в листинг компиляции записывается:
"*** Error: Invalid Expression. ***************;".

Математику по предварительным тестам вычисляет правильно.
Attachment:
4math.gif
4math.gif [ 12.56 KiB | Viewed 676 times ]

С точки зрения элегантности всё выглядит несколько тяжеловато, но работает вполне нормально!

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

Ну и вот этот вопрос меня сейчас немного озадачил:
Lavr wrote:
Для 4-bit CPU в этом особой необходимости нет, но хочу сделать хороший программный шаблон
для компилятора ассемблера, ...
Действительно, для процессора с гарвардской архитектурой некоторые трюки типа $+2, STA M+1
не столь актуальны, как для архитектуры фон Неймана, поскольку память программ и данных разделены.
То есть, красивым трюком STA M+1 программу как в i8080 не подправишь, а с памятью данных такой
финт не выглядит эффективным - этой памяти всего 16 нибблов... :wink:

Поэтому на данный момент анализ мат.операции я вставил лишь для кодов с адресом, где результат
может достигать 4096. В остальных случаях аргумент не более 15, и есть ли необходимость что-либо
вычислять - я пока сомневаюсть. Глубину стеков, кстати, уменьшил до 20.

Поработаю пока с этим ассемблером и аппаратной частью 4-bit Processor-а, для которого он и был написан.
Результаты выложу по готовности. Всё равно сам по себе этот ассемблер никому отдельно не нужен...

_________________
iLavr


24 Oct 2018 04:54
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
И я тут копался у себя в архивах в поисках софта, который позволяет собрать HELP-файлы для Windows -
хочу сразу написать и HELP-файл к своему ассемблеру...

Но по пути нашел и корректный, весьма неплохо прокомментированный исходник 4-Кбайт ассемблера
из пакета RAMFOS "Специалиста".
Если кому он интересен, исходники в КОИ-7(8) здесь:
Attachment:
ASSM4K.zip [8.68 KiB]
Downloaded 12 times

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

Посморел я сам исходник, и меня очень удивила строка:
ORG 0100H :o
а я отлично помню, что ассемблер из пакета RAMFOS "Специалиста" запускается в верхних адресах
памати (вроде как: 0D800H). :-?

Я призадумался несколько... но память подсказала, что поскольку исходник корректный и правильно
собирается при любом стартовом адресе, у меня была авантюрная мысль пересобрать этот исходник
как СОМ-файл для DOS, но не переписывать его, а транслировать в коды 8086 автоматически.

С этой целью я уже весьма давно написал кросс-транслятор кодов 8080 в коды 8086.
Nedo-трансляторы для i8080

Полностью автоматической трансляции не получилось, хотя полученный код 8086 успешно компилировался.
Но необходимо было учесть различия архитектур "Специалиста" и IBM PC вручную, хотя вызовы RAMFOS
в вызовы BIOS я кое-где конвертировал автматически. Но ручная правка всё же нужна.
До конца я этот вариант не реализовал...

По ссылке есть также два сторонних варианта конвертеров кода 8080 в коды 8086.

_________________
iLavr


24 Oct 2018 06:23
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
И я тут копался у себя в архивах в поисках софта, который позволяет собрать HELP-файлы для Windows -
хочу сразу написать и HELP-файл к своему ассемблеру...

Немного этот вопрос меня притормозил... :-?

Сам я предпочитаю 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-файл собрался довольно-таки неплохо:
Attachment:
4-BIT-ASSM.zip [73.7 KiB]
Downloaded 16 times

Просьба посмотреть, как это будет выглядеть на других ОС и компьютерах.
Чисто для удобства корректировки .HTМL файлов я их конвертировал в кодировке Windows-1251,
а не в UTF, что, вероятно, было бы универсальнее. Вот и призадумался - не зря ли я так... :-?

В оригинале, как у меня, должно быть что-то примерно следующего вида:
Attachment:
4-BIT-ASSM-HELP.gif
4-BIT-ASSM-HELP.gif [ 30.57 KiB | Viewed 572 times ]

_________________
iLavr


31 Oct 2018 04:17
Profile
Maniac
User avatar

Joined: 21 Mar 2017 13:50
Posts: 313
Location: Spb
Reply with quote
На Вынь-10 с кодировками в оглавлении проблема, по форматированию вроде не видно косяков.


Attachments:
Безымянный.png
Безымянный.png [ 32.87 KiB | Viewed 566 times ]
31 Oct 2018 05:06
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
AlexanderZh wrote:
На Вынь-10 с кодировками в оглавлении проблема, по форматированию вроде не видно косяков.

Спасибо! Вот чего-то подобного я и боялся... Хотя оглавление формировал не я, а сам компилятор .СHМ-help.
Но посмотрю, что можно сделать, тем более, увидел и ошибку - "рператоров", хотя точно помню,
что одну такую исправлял...

_________________
iLavr


31 Oct 2018 05:09
Profile
God

Joined: 02 Jan 2006 03:28
Posts: 1371
Location: Abakan
Reply with quote
Под Ubuntu 18.04 в xCHM не открылось совсем.


31 Oct 2018 05:40
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
jdigreze wrote:
Под Ubuntu 18.04 в xCHM не открылось совсем.

Странно... :osad: А я как раз расчитывал, что *.CHM более универсальный формат HELP,
поскольку он опирается только на браузер.

Смею предположить, что HELP-файлы в формате .HLP для Windows, под Ubuntu уж точно не котируются.

_________________
iLavr


31 Oct 2018 06:12
Profile
God

Joined: 02 Jan 2006 03:28
Posts: 1371
Location: Abakan
Reply with quote
Lavr wrote:
Смею предположить, что HELP-файлы в формате .HLP для Windows, под Ubuntu уж точно не котируются.
Не проверял. Возможно дело в кодировке, но не факт. Может и стоит делать сейчас именно в HTML.


01 Nov 2018 06:32
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
В общем покопался я по разным сайтам, где обсуждают разные .CHM-компиляторы и сами .CHM-
файлы с неверной кодировкой.

Выяснил, что ошибка компиляции такая есть, и восходит она еще к M$ Help Workshop, который
с нуля не умел работать с UTF-8, а потом его то ли пропатчили, то ли еще что...
Но эта теория мне совсем не помогла... :osad:

Я тогда взял небольшой .CHM-Help файл из своей Windows-7 и декомпилировал его.
Увидел я следующее: TOC.hhc в оригинале записан просто в кодировке Windows-1251.
 TOC.hhc из файла SNMP.CHM Windows-7
Code:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<meta name="GENERATOR" content="Microsoft&reg; HTML Help Workshop 4.1">
<!-- Sitemap 1.0 -->
</HEAD><BODY>
  <UL>
  <LI> <OBJECT type="text/sitemap">
      <param name="Name" value="Вкладка агента SNMP">
      <param name="Local" value="html/80366ac5-42bd-42e9-8169-83696087e091.htm">
  </OBJECT>
  </UL>
  <UL>
  <LI> <OBJECT type="text/sitemap">
      <param name="Name" value="Вкладка безопасности SNMP">
      <param name="Local" value="html/e2c0fd7c-286c-4b02-a33b-8ed1780a681c.htm">
  </OBJECT>
  </UL>
  <UL>
  <LI> <OBJECT type="text/sitemap">
      <param name="Name" value="Вкладка ловушек SNMP">
      <param name="Local" value="html/68219299-c666-4737-ae36-3de0b3dd76cb.htm">
  </OBJECT>
  </UL>
</BODY>
</HTML>

А у меня компилятор .CHM-Help записывает его в странных кодах ("уши" вот отсюда): :wink:
 TOC.hhc в странной кодировке
Code:
<HTML>
 <HEAD>
  <META name="GENERATOR" content="htm2chm 3.0.9.3">
  <!-- Sitemap 1.0 -->
 </HEAD>
<BODY>
 <OBJECT type="text/site properties">
  <PARAM name="Window Styles" value="0x800027">
  <PARAM name="ImageType" value="Folder">
 </OBJECT>
<UL>
 <LI><OBJECT type="text/sitemap">
  <PARAM name="Name" value="1. 4-&aacute;&egrave;&ograve;&iacute;&ucirc;&eacute; &iuml;&eth;&icirc;&ouml;&aring;&ntilde;&ntilde;&icirc;&eth; &iacute;&agrave; &euml;&icirc;&atilde;&egrave;&divide;&aring;&ntilde;&ecirc;&egrave;&otilde; &yacute;&euml;&aring;&igrave;&aring;&iacute;&ograve;&agrave;&otilde; &Ograve;&Ograve;&Euml;">
  <PARAM name="Local" value="1. 4-битный процессор на логических элементах ТТЛ.htm">
 </OBJECT>
 <LI><OBJECT type="text/sitemap">
  <PARAM name="Name" value="2. &Ocirc;&icirc;&eth;&igrave;&agrave;&ograve; &ecirc;&icirc;&igrave;&agrave;&iacute;&auml; &iuml;&eth;&icirc;&ouml;&aring;&ntilde;&ntilde;&icirc;&eth;&agrave;">
  <PARAM name="Local" value="2. Формат команд процессора.htm">
 </OBJECT>
 <LI><OBJECT type="text/sitemap">
  <PARAM name="Name" value="3. &Ntilde;&egrave;&ntilde;&ograve;&aring;&igrave;&agrave; &ecirc;&icirc;&igrave;&agrave;&iacute;&auml; &iuml;&eth;&icirc;&ouml;&aring;&ntilde;&ntilde;&icirc;&eth;&agrave;">
  <PARAM name="Local" value="3. Система команд процессора.htm">
 </OBJECT>
 <LI><OBJECT type="text/sitemap">
  <PARAM name="Name" value="4. &Auml;&egrave;&eth;&aring;&ecirc;&ograve;&egrave;&acirc;&ucirc; &agrave;&ntilde;&ntilde;&aring;&igrave;&aacute;&euml;&aring;&eth;&agrave; (&iuml;&ntilde;&aring;&acirc;&auml;&icirc;&icirc;&iuml;&aring;&eth;&agrave;&ograve;&icirc;&eth;&ucirc;)">
  <PARAM name="Local" value="4. Директивы ассемблера (псевдооператоры).htm">
 </OBJECT>
 <LI><OBJECT type="text/sitemap">
  <PARAM name="Name" value="5. &Auml;&aring;&ograve;&agrave;&euml;&egrave; &ntilde;&egrave;&ntilde;&ograve;&aring;&igrave;&ucirc; &ecirc;&icirc;&igrave;&agrave;&iacute;&auml;">
  <PARAM name="Local" value="5. Детали системы команд.htm">
 </OBJECT>
 <LI><OBJECT type="text/sitemap">
  <PARAM name="Name" value="5.1 &Ecirc;&icirc;&igrave;&agrave;&iacute;&auml;&ucirc; &ccedil;&agrave;&atilde;&eth;&oacute;&ccedil;&ecirc;&egrave; &egrave; &iuml;&aring;&eth;&aring;&ntilde;&ucirc;&euml;&ecirc;&egrave;">
  <PARAM name="Local" value="5.1 Команды загрузки и пересылки.htm">
 </OBJECT>
 <LI><OBJECT type="text/sitemap">
  <PARAM name="Name" value="5.2 &Ecirc;&icirc;&igrave;&agrave;&iacute;&auml;&ucirc; &euml;&icirc;&atilde;&egrave;&divide;&aring;&ntilde;&ecirc;&egrave;&otilde; &icirc;&iuml;&aring;&eth;&agrave;&ouml;&egrave;&eacute;">
  <PARAM name="Local" value="5.2 Команды логических операций.htm">
 </OBJECT>
 <LI><OBJECT type="text/sitemap">
  <PARAM name="Name" value="5.3 &Ecirc;&icirc;&igrave;&agrave;&iacute;&auml;&ucirc; &agrave;&eth;&egrave;&ocirc;&igrave;&aring;&ograve;&egrave;&divide;&aring;&ntilde;&ecirc;&egrave;&otilde; &icirc;&iuml;&aring;&eth;&agrave;&ouml;&egrave;&eacute;">
  <PARAM name="Local" value="5.3 Команды арифметических операций.htm">
 </OBJECT>
 <LI><OBJECT type="text/sitemap">
  <PARAM name="Name" value="5.4 &Ntilde;&egrave;&ntilde;&ograve;&aring;&igrave;&iacute;&ucirc;&aring; &egrave; &ntilde;&iuml;&aring;&ouml;&egrave;&agrave;&euml;&uuml;&iacute;&ucirc;&aring; &ecirc;&icirc;&igrave;&agrave;&iacute;&auml;&ucirc;">
  <PARAM name="Local" value="5.4 Системные и специальные команды.htm">
 </OBJECT>
 <LI><OBJECT type="text/sitemap">
  <PARAM name="Name" value="5.5 &Ecirc;&icirc;&igrave;&agrave;&iacute;&auml;&ucirc; &ouml;&egrave;&ecirc;&euml;&egrave;&divide;&aring;&ntilde;&ecirc;&egrave;&otilde; &ntilde;&auml;&acirc;&egrave;&atilde;&icirc;&acirc;">
  <PARAM name="Local" value="5.5 Команды циклических сдвигов.htm">
 </OBJECT>
 <LI><OBJECT type="text/sitemap">
  <PARAM name="Name" value="5.6 &Ecirc;&icirc;&igrave;&agrave;&iacute;&auml;&ucirc; &acirc;&ucirc;&ccedil;&icirc;&acirc;&icirc;&acirc; &egrave; &iuml;&aring;&eth;&aring;&otilde;&icirc;&auml;&icirc;&acirc;">
  <PARAM name="Local" value="5.6 Команды вызовов и переходов.htm">
 </OBJECT>
 <LI><OBJECT type="text/sitemap">
  <PARAM name="Name" value="6. &Ecirc;&icirc;&igrave;&iuml;&egrave;&euml;&yuml;&ouml;&egrave;&yuml; &agrave;&ntilde;&ntilde;&aring;&igrave;&aacute;&euml;&aring;&eth;&iacute;&icirc;&eacute; &iuml;&eth;&icirc;&atilde;&eth;&agrave;&igrave;&igrave;&ucirc;">
  <PARAM name="Local" value="6. Компиляция ассемблерной программы.htm">
 </OBJECT>
</BODY>
</HTML>

По образу и подобию TOC.hhc от Windows-7 я прописал всё в кодировке Windows-1251.
Скомпилировалось нормально (заодно я убрал индексацию, раз уж её нет), в Windows-7 вижу всё правильно.
Attachment:
4-BIT-ASSM-W7.zip [75.49 KiB]
Downloaded 14 times

Посмотрите, если не затруднит, на своих ОС.

P.S. Неплохие ресурсы, поясняющие путь создания .CHM-Help, если кого это интересует:
Создание файлов CHM; Как создать CHM файл (HTM2CHM и HTML Help Workshop в действии)

_________________
iLavr


03 Nov 2018 06:16
Profile
Maniac
User avatar

Joined: 21 Mar 2017 13:50
Posts: 313
Location: Spb
Reply with quote
На 7-ке всё путём, на 10-ке тоже.
Единственный минус CHM - без "разблокировки" файла после скачивания не отображается содержимое. Надо в реестре поискать этот пунктик.


03 Nov 2018 07:40
Profile
God

Joined: 02 Jan 2006 03:28
Posts: 1371
Location: Abakan
Reply with quote
Вот теперь всё нормально! Ubuntu 18.04/xCHM 1.23


03 Nov 2018 13:34
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 29 posts ]  Go to page Previous  1, 2

Who is online

Users browsing this forum: No registered users and 3 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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.