ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Юрий выложил синтаксис своего ассемблера

Сообщений 1 страница 5 из 5

1

http://compiler.su/o-russkom-assemblere.php#56
https://disk.yandex.ru/d/qhBKuW4xcvgu9g

За что ему спасибо.

Сам я, конечно, смотреть это не буду (потому что не пойму ничего), но предлагаю это сделать Евгению.

Там есть .doc-файл:

Оглавление
Введение
Области применения языка ассемблера
Недостатки программирования на языке ассемблера
Преимущества программ, написанных на языке ассемблера
Пути улучшения синтаксиса языка ассемблера
Специальная часть
Описание языка ассемблера с упрощённым синтаксисом
Обзор команд ассемблера с упрощённым синтаксисом
Строки программы
Разделители лексем
Идентификаторы
Операции
Повторяющиеся операции
Десятичные литералы
Шестнадцатеричные литералы
Двоичные литералы
Адресные выражения
Префиксы
Операторы резервирования данных
Репликатор
Текстовые литералы
Метки
Комментарии
Обозначение регистров
Служебные слова упрощённого ассемблера и другие замены
Исходный код, трансляция и генерация кода
Режимы трансляции
Команды ассемблера в традиционной нотации
Трансляция
Обзор методов трансляции
Метод рекурсивного спуска
Лексический анализ
Синтаксический анализ
Семантический анализ
Оптимизация
Генерация кода
Сообщения об ошибках
Реализация программы-транслятора и её тестирование
Использование программы-транслятора
Программа-пример использования альтернативного синтаксиса
Выводы

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

Отредактировано Лис (2023-04-15 14:48:05)

0

2

«В ассемблерах универсальные математические обозначения не прижились, несмотря на высокую интуитивность их восприятия.»

И это неспроста. Есть тому причина. И она заключается в неединственности отображения математической операции на машинную команду.

«Было бы разумным отступить от правила ассемблеров «одна строка – одна команда». Запись нескольких команд в одной строке дала бы в некоторых случаях большую компактность кода и большую его читаемость.»

Так и до Си недалеко...

«Согласно легенде в своё время в недрах фирмы IBM действовало негласное правило: программный модуль должен целиком помещаться на экране монитора (в то время мониторы имели 25х80 знакомест)»

Не негласное, а неписанное.

«Таблица 1. Список команд языка ассемблера с упрощённым синтаксисом.»

...

«Перечисленный перечень не охватывает всей системы команд процессора х86. Но он предлагает самые очевидные замены, которые, за некоторым исключением, не придётся заучивать. При этом именно эти команды чаще всего встречаются в тексте программ. Можно даже дать приблизительную оценку: такое команды будут занимать 80-90% текста. Однако дальнейшее стремление заменить буквенные обозначения команд специальными символами может привести потере интуитивного восприятия. Поэтому традиционные буквенные обозначения следует сохранить, при этом для всех команд. В том числе для тех, для которых есть замена из вышеприведённой таблицы 1.»

«В связи с тем, что одиночные пробелы используются в идентификаторах (смотри  п. 2.1.4), то они не могут использоваться в качестве разделителей. Поэтому в качестве разделителей используется последовательность из двух и более пробелов, а так же символы табуляции и запятые – как обычно.»

«алфавит расширен за счёт символов кириллицы, а так же сделано возможным употреблять внутри идентификаторов одиночные пробелы.»

«Запись шестнадцатеричных констант с префиксом «16'» хотя и немного длиннее, но интуитивно понятнее»

буквы переведены транслитерацией (и это не круто)

«Внутри двоичных литералов двоичные цифры ... могут отделяться друг от друга одиночными пробелами.»

«Помимо цифр «0» и «1», могут быть употреблены строчные буквы «о» (латинская и русская). Это так же улучшает визуальное восприятие»

увеличивает вычурность и фриковатость

«вместо директив «DB», «DW», «DD», «DQ» и «DT» использованы директивы «_8», «_16», «_32», «_64» и «_80», смысл которых очевиден сразу и не нуждается в уточнениях.»

У меня была мысль заключать типы в квадратные скобки (чтобы не путалось с пробелами).
[80 бит] 2'01010101

«Нулевая строка  _8  40 раз 0    \\ 40 нулевых байтов»
40 раз [8 бит] 0

«Сообщение _8 'Текст внутри двойных кавычек', 0
Сообщение _8 "Текст внутри двойных кавычек "»

Двойные кавычки добавляют в конец ноль. Но что тут с кодировками, особенно для русских букв? Это UTF-8 или нет?

«символ «/» обозначает деление (DIV), а символы «//» обозначают деление со знаком (IDIV). поэтому однострочные комментарии начинаются с \\»

«два режима работы транслятора. В первом режиме исходный код просто копируется в выходной текст. Во втором производится анализ исходного кода и генерация на его основе выходного кода. Для перевода из одного режима в другой в исходном коде используются специальные последовательности символов: «((-» для перевода из режима копирования в режим анализа исходного текста и «-))»»

«Метод рекурсивного спуска ... объём синтаксических правил разрабатываемого языка ассемблера невелик, поэтому применение метода рекурсивного спуска вполне оправдано»

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

«Для реализации данной программы-транслятора использован язык C++, компилятор Visual Studio C++. Однако текст программы написан не на чистом C++, а на его русифицированном варианте.»

«разработанный транслятор может применяться и самым широким кругом разработчиков для платформы на базе микропроцессоров Intel x86.»

Уже не может. Он 32-х битный, а техника ушла вперёд. И операционка под которую он собран, покинула территорию необъятной.

«Ассемблер masm производства Microsoft Corporation позволяет программировать с использованием символов UNICODE и, значит, на кириллице.»

«гибкий (в некоторых пределах) синтаксис: его правила описаны в файлах типа CSV (редактируемых простым текстовым редактором) и  могут легко дополнены, заменены или откорректированы.»

Это называется, не переписали на кириллицу Lex & Yacc, потому что не осилили LALR.

«ожидается его использование на коммерческом предприятии  г. Москва.»

Уверен, что единственный заинтересованный сотрудник оттуда уже уволился, и разработка не прижилась.

Отредактировано Лис (2023-04-15 15:22:07)

0

3

Список литературы

л1). Ю.В. Пирогов. Ассемблер для Windows. — М.: Издатель Молгачева С.В., 2002.

л2). А. Ахо, Р.Сети, Дж. Ульман. Компиляторы. Принципы, технологии, инструменты. — М., Издательство «Вильямс», 2003.

л3). Р. Хантер. Проектирование и конструирование компиляторов. — М., Финансы и статистика. 1984.

л4). В.А. Серебряков, М.П. Галочкин. Основы конструирования компиляторов. — Курс лекций факультета ВМиК МГУ и факультета УиПМ МФТИ 1991-1999.

л5). Ю.В. Пирогов. Ассемблер учебный курс. — М.: Издатель Молгачева С.В., 2001.

л6). П.И. Рудаков, К.Г. Финогенов. Язык ассемблера: уроки программирования. — М.:Диалог-МИФИ, 2001.

6.2 Ссылки на материалы в Интернет

и1). Микропроцессоры для космических применений
      http://www.russianelectronics.ru/leader … doc/49818/

и2). Физика радиационных эффектов, влияющих на электронику в космосе.
      http://habrahabr.ru/post/189066/

и3). Микроэлектроника для космоса и военных
      http://habrahabr.ru/post/156049/

и4). KolibriOS на производстве
      http://board.kolibrios.org/viewtopic.php?f=25&t=897

и5). Algebraic Assembly Language
      http://www.terse.com/

и6). High Level Assembler
      http://www.plantation-productions.com/W … erence.htm

и7). Русский язык и программирование
      http://www.compiler.su/russkij-yazyk-i- … ovanie.php

и8). Проект ONBASS/ERRIC‎, язык ассемблера
      https://sites.google.com/site/zouev54/m … s/sort-era
и9). Шестнадцатиричные и двоичные константы
      http://www.compiler.su/shestnadtsatiric … stanty.php

и10). Flat assembler
      http://flatassembler.net/

и11). Официальная документация по FASM
      http://fasm.su/Library/manual

и12). Инструкции архитектуры х86
      http://fasm.su/Library/manx86

и13). The MASM32 SDK
      http://www.masm32.com/

и14). Джек Креншоу. «Давайте создадим компилятор!»
      http://modernlib.ru/books/krenshou_dzhe … mpilyator/

и15). утилита транслитерации русского C/C++ в стандартный
      http://www.compiler.su/utilita-translit … artnyj.php

и16) Нуль-терминированная строка
      http://ru.wikipedia.org/wiki/Нуль-терми … ная_строка

и17) Андрей Хохлов. SLR(0)-анализатор
      http://avhohlov.narod.ru/p1940ru.htm

Мне понравилась нумерация, но когда я в своё время писал выпускную работу мне так сделать не дали, сказали нумеровать десятичными числами, заставили переделывать и исправлять.

Сейчас думаю можно было бы сделать:
к - книга
с - сайт
п - .pdf (сомнительно выделять их в отдельный пункт, но конкретно здесь я имею в виду документы из своей личной библиотеки)
много ещё других букв есть (д - DocBook, л - ЛаТеХ/LaTeX)

Книги от сайтов отличаются способом поиска. Чтобы найти книгу обращаются в издательство, которое ищут физически по адресу. Ну или в библиотеке.
К сайту обращаются через интернет.

А документы добывают хитрыми окольными путями в даркнетах и пиратских библиотеках. Поэтому можно оставить три буквы 'к', 'с' и 'п' (подразумевая что "п" - это "покупное" (а не пиратское!))

Отредактировано Лис (2023-04-15 15:44:28)

0

4

Лис написал(а):

И это неспроста. Есть тому причина. И она заключается в неединственности отображения математической операции на машинную команду.

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

Лис написал(а):

Так и до Си недалеко...

До Си еще далеко...

Лис написал(а):

«Запись шестнадцатеричных констант с префиксом «16'» хотя и немного длиннее, но интуитивно понятнее»

В записи двоичных и шестнадцатиричных констант родилось уже несколько вариантов:
Вариант Юрия: 2'01010111, 16'234567АБЦД
позднее:       2'01010111', 16'234567АБЦД'

У меня был такой вариант:
2"100100111, 16"234567АБЦД - он хорош для русифицированного варианта, когда возможна одновременно классическая запись 0x 23456ABCD

Лис, помнится предлагал вариант:
0б101010000, 0ш2345678АБВГД
На мой взгляд, варианты примерно равнозначные. Варианты с кавычками могут вызвать проблемы подсветки в некоторых редакторах. Лексер же без проблем разберет любой вариант.

Лис написал(а):

«вместо директив «DB», «DW», «DD», «DQ» и «DT» использованы директивы «_8», «_16», «_32», «_64» и «_80», смысл которых очевиден сразу и не нуждается в уточнениях.»

Согласен, что достаточно понятно. Но вот _7, _15, _31, _63 для целочисленных типов со знаком уже не так интуитивно понятны.
Мой вариант б8, б16, б32,б64 и ц8, ц16, ц32, ц64.

Лис написал(а):

Двойные кавычки добавляют в конец ноль. Но что тут с кодировками, особенно для русских букв? Это UTF-8 или нет?

По-моему у Юрия это СР1251. Но это не принципиальный момент.

Лис написал(а):

«символ «/» обозначает деление (DIV), а символы «//» обозначают деление со знаком (IDIV). поэтому однострочные комментарии начинаются с \\»

А вот это случай, когда интуитивная понятность и однообразие записи исчезает. Может это субъективно, но операции //, **, <<<, >>> для меня не очень интуитивно понятны.
Возможно это дело привычки.

Лис написал(а):

Это называется, не переписали на кириллицу Lex & Yacc, потому что не осилили LALR.

Не думаю, что это задача для дипломного проекта.
А в целом, идея интуитивно понятного синтаксиса для ассемблера мне очень нравится.

0

5

См. ранее
Почему не "просто перевод" синтаксиса?

0