Последние темы
» Вити больше нет!автор bug19 Пн Фев 20 2023, 19:54
» Собираем оригинальный Орион 128
автор bug19 Пн Фев 20 2023, 19:47
» Проблема плющеного экрана ОРИОНА
автор kanzler Пн Ноя 28 2022, 12:05
» Орион 128 и его клоны возрождение 2019-2022 год
автор kanzler Пн Ноя 28 2022, 12:03
» Электроника КР-04. Информация, документы, фото.
автор kanzler Пн Ноя 28 2022, 12:02
» Новости форума
автор kanzler Пн Ноя 28 2022, 11:52
» Орион-128 НГМД запуск 2021 года
автор matrixplus Сб Сен 10 2022, 17:36
» ПЗУ F800 для РК86
автор ведущий_специалист Сб Сен 10 2022, 10:37
» Микропроцессорная лаборатория "Микролаб К580ИК80", УМК-80, УМПК-80 и др.
автор Электротехник Вт Июл 26 2022, 19:33
» Орион-128 SD карта в Орионе
автор matrixplus Чт Июн 02 2022, 09:00
» 7 Мая. День Радио!
автор Viktor2312 Чт Май 12 2022, 10:58
» Серия: Массовая радио библиотека. МРБ
автор Viktor2312 Ср Май 11 2022, 12:17
» Полезные книги
автор Viktor2312 Пн Май 09 2022, 15:07
» Орион 128 Стандарты портов и системной шины Х2
автор matrixplus Вс Май 08 2022, 23:08
» Орион-128 и Орион ПРО еще раз про блоки питания
автор matrixplus Вс Май 08 2022, 19:09
» Орион-128 Программаторы
автор matrixplus Вс Май 08 2022, 19:02
» Орион ПРО история сборки 2021 до 2022
автор matrixplus Вс Май 08 2022, 18:47
» Анонсы монет (New coin).
автор Viktor2312 Сб Май 07 2022, 23:11
» Хочу свой усилок для квартиры собрать не спеша
автор Viktor2312 Сб Май 07 2022, 19:33
» Амфитон 25у-002С
автор Viktor2312 Сб Май 07 2022, 09:38
» Майнер: T-Rex
автор Viktor2312 Вс Май 01 2022, 09:12
» GoWin. Изучение документации. SUG100-2.6E_Gowin Software User Guide. Среда разработки EDA.
автор Viktor2312 Пн Апр 25 2022, 01:01
» GoWin. Изучение документации. UG286-1.9.1E Gowin Clock User Guide.
автор Viktor2312 Сб Апр 23 2022, 18:22
» GoWin. Documentation Database. Device. GW2A.
автор Viktor2312 Ср Апр 20 2022, 14:08
» GOWIN AEC IP
автор Viktor2312 Ср Апр 20 2022, 12:08
Самые активные пользователи за месяц
Нет пользователей |
Поиск
Язык программирования PL/M
Страница 1 из 1 • Поделиться
Re: Язык программирования PL/M
1
Очень интересная тема, буду следить за развитием, единственное просьба, если что-то разъясняете, постарайтесь как для очень очень начинающего, чтобы было максимально понятно, а так же желательно побольше ссылок на информацию, источники, документацию и т. д. Чтобы всё было в одном месте и объём всей необходимой информации был 100 %.
От себя добавлю немного информации из интернета:
PL/M
Нас как я понял интересует PL/M-80.
____PL/M (англ. Programming Language for Microcomputers) — процедурный язык программирования, разработанный в 1972 фирмой Digital Research для микропроцессоров Intel.
____Язык заимствовал идеи из PL/I, ALGOL, XPL и имеет интегрированный макропроцессор. Компиляторы PL/M существовали для ранних моделей процессоров Intel: 8008, 8080, 8051, 8086, 286, 386 и Intel 80486.
____В СССР язык был адаптирован под названием ПЛ/М-80 и использовался в ОС ДОС 1800 для микро-ЭВМ СМ 1800, версия для процессора 8086 под названием ПЛ/М-86 входила в состав набора операционных систем для микро-ЭВМ СМ 1810.
От себя добавлю немного информации из интернета:
PL/M
- Класс языка процедурный
- Тип исполнения компилируемый
- Появился в 1972 году
- Разработчик Килдалл, Гэри
- Диалекты PL/M-80, PL/M-86, PL/M-286, PL/M-386
Нас как я понял интересует PL/M-80.
____PL/M (англ. Programming Language for Microcomputers) — процедурный язык программирования, разработанный в 1972 фирмой Digital Research для микропроцессоров Intel.
____Язык заимствовал идеи из PL/I, ALGOL, XPL и имеет интегрированный макропроцессор. Компиляторы PL/M существовали для ранних моделей процессоров Intel: 8008, 8080, 8051, 8086, 286, 386 и Intel 80486.
____В СССР язык был адаптирован под названием ПЛ/М-80 и использовался в ОС ДОС 1800 для микро-ЭВМ СМ 1800, версия для процессора 8086 под названием ПЛ/М-86 входила в состав набора операционных систем для микро-ЭВМ СМ 1810.
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
Re: Язык программирования PL/M
3
barsik Посмотрите, может разберётесь, может пригодится, попалось в инете: Скачать
Я кстати нашёл, что вы уже делали изыскания в этом направлении:
Есть вот такое предложение на английском языке:
By 2018, Mark Ogden has decompiled ISIS and its PL/M tools into both PL/M and reconstructed into C programs. - Herb Johnson.
Я не знаю, поможет ли это вам или нет, но хотелось бы, чтобы вы разобрались и сделали что-то полезное и крутое для Ириши.
И вот такой текст, в следующем посте выложу, объёмный он:
Я кстати нашёл, что вы уже делали изыскания в этом направлении:
А это как раз потому, что на ассемблере программировать сложнее. Я уже предлагал всем программистам для РК86 переходить с ассемблера на PL/M, который из всех ЯВУ даёт самый эффективный код.
Программа написанная на PL/M всего лишь в 1.2...1.5 раза тормознее и объёмнее, чем аналог написанный на ассемблере. А Гарри Килдэлл, автор PL/M, вообще утверждал, что большая программа написанная на PL/M эффективнее, чем программа на ассемблере. Теоретически такое невозможно, но в реальности программисты выдают на ассемблере менее эффективный код, в их коде встречаются дублирующиеся фрагменты, да и при разработке на ЯВУ структура и алгоритм программы получается более оптимальной.
А улучшенный PL/M, т.е PLMX с оптимизацией кода, ещё более эффективен. В отличие от PL/M из 1973 года от Гарри Килдэлла, PLMX устраняет мелкие неудобства PL/M (например, не зависит от регистра символов), допускает многомодульность, объединение с кусками написанными на других ЯВУ или ассемблере и имеет поддержку BDOS функций CP/M. Кроме того, он даёт на выходе сразу ассемблерный исходник, пригодный для трансляции и линковки, а не кучу каких-то левых файлов, не пойми для чего предназначенных, как делает оригинал PL/M из 1973 года.
Но самое главное в том, что PLMX работает в CP/M (хотя не работает под TSR эмуляторами CP/M для MSDOS, типа 22NICE, RUNCPM). Достаточно использовать любой эмулятор в котором есть CP/M c достаточным уровнем TPA. Можно также транслировать на реальном ОРИОНЕ с дисководом или винчестером (на РК86 и СПЕЦИАЛИСТЕ не получится, там TPA слишком маленький).
Но оригинальной версии компилятора PL/M для CP/M до сих пор нет. Много людей пытались найти такой компилятор (в т.числе и иностранцы). Фирма Intell не перетранслировала компилятор PL/M для CP/M, чтобы не поддерживать конкурентов. Но компилятор PL/M для CP/M всё же был создан другой сторонней фирмой и, естественно, это не был оригинал от Гарри Килдэлла. Упоминания об этом встречал на англоязычных сайтах и даже ссылки на скачку (но они протухли более 10 лет назад). Вроде бы это написала фирма Tarbell, ставшая известной своим Tarbell Basic для CP/M.
Недавно оригинальные исходники PL/M на Фортране-IV были опубликованы. Но остаётся проблемой странслировать эти имеющиеся исходники PL/M. Нужен компилятор фортрана, что даёт на выходе код КР580 или Z80 для CP/M. Пока безрезультатно опробовал 3 компилятора фортрана для CP/M. А интелловский компилятор PL/M для ISIS не работает в Windows, т.к эмулятор ISIS написан для MSDOS. Исходя из дат файлов, чтобы его использовать надо загрузиться в MSDOS 3.30 и компилировать на дискете или на партиции размером не более 32 мб.
Итак, уже имеются две возможности писать на PL/M - это PLMX от Эммануля Роше и MSDOS кросс компилятор PL/M с предпроцессором на LUA от Kakos nonos-а. Последний, к сожалению, пока непонятно как переделать, чтобы транслировал не в формат RKA, а в формат RKS (понятно, лишние байты я забил, но как поменять порядок байтов в начальном, конечном адресе и КС, - неизвестно).
Конечно удобно, что кусок на ассемблере встраивается прямо в PL/M код (это же делает и PLMX), но никакие имеющиеся исходники программ на PL/M не компилируются. Стандарт PL/M предусматривает наличие точки с запятой после оператора. Если это убрано (видимо подставляет препроцессор), то в одной строке д.быть всего один оператор.
Кроме того, неудобно использовать TASM вместо нормального макроассемблера от Microsoft. С TASM непонятно как вставлять ассемблерные куски написанные в понятных мнемониках Z80. M80 позволяет, используя ключ .Z80 или .6502, вставлять куски в мнемониках Z80 или 6502. Возможно и TASM позволяет оперативно менять мнемоники в самом исходнике, но это неизвестно.
Мне кажется, что компилятор PLMX из 1980 более выгоден, чем компилятор PL/M из 1973 года. Хорошо бы провести сравнение генерируемого кода двух компиляторов и решить, что лучше. Мне PLMX нравится больше, т.к без введения своих процедур сразу позволяет писать для CP/M, что удобнее. А главное, можно прилинковывать свои процедуры странслированные любым ассемблером, а не быть привязанным к убогому TASM, использующему моторолловские соглашения.
Кстати, так и не понял, когда программисты всего мира собираются начать сбор денег на строительство памятника Гарри Килдэллу.
Есть вот такое предложение на английском языке:
By 2018, Mark Ogden has decompiled ISIS and its PL/M tools into both PL/M and reconstructed into C programs. - Herb Johnson.
Я не знаю, поможет ли это вам или нет, но хотелось бы, чтобы вы разобрались и сделали что-то полезное и крутое для Ириши.
И вот такой текст, в следующем посте выложу, объёмный он:
Последний раз редактировалось: Viktor2312 (Чт Авг 08 2019, 11:20), всего редактировалось 1 раз(а)
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
Re: Язык программирования PL/M
4
И вот ссылка на Гитхаб, где есть как вроде всё нужное, но сами разберётесь, я ничерта не понимаю как там файлы скачивать и вообще структуру и принцип этого Гитхаба:
https://github.com/ogdenpm/intel80tools
https://github.com/ogdenpm/intel80tools
Последний раз редактировалось: Viktor2312 (Пт Авг 09 2019, 16:04), всего редактировалось 2 раз(а)
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
Re: Язык программирования PL/M
5
Конечно описания в основном совпадут, но видимо более правильное описание версии для MSDOS - вот это, более древнее.
Я его хотел выложить, следующим постом, но лень обуздала, хотя может тот документ от Intel, что я хотел выложить и другой, но вряд ли, год совпадает 1975.
По части переводов, это уже вам делать, вы сами писали, что английский для вас как родной.
А так нужно конечно будет поискать хорошую книжку, она скорее всего уже выложена в разделе по литературе, которая издана в СССР, и уже на русском, не думаю, что PL/M-80 отличается от ПЛ/М-80.
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
Re: Язык программирования PL/M
6
Вы сами себе противоречите, сначала говорите:
А потом:
Ну это просто жесть, а если учесть и это:
То вообще ни вижу проблем для переводов, то есть для делания полезного дела для всех.
Это же ни как у меня, я вижу максимум 10 знакомых слов из 100 и тех перевод порой не помню, в результате общая картина не складывается. Недавно переводил абзац с техническим описанием дополнения слова до полных 512 бит, если оно меньше, так я чтобы понять сутки потратил.
Ну да ладно, не любите английский, значит не любите, я его тоже не люблю, но приходится пользоваться ежедневно, но тут google помогает неплохо.
Главное хотелось бы увидеть по итогу результат, программу компилятора для базовой Ириши и что-то ещё, желательно с нормальным описанием для полного новичка, если получится конечно...
Я знаю лишь немецкий.
А потом:
читал без словаря классику 18-века, а это сами англичане без Вебстера не могут
Ну это просто жесть, а если учесть и это:
В технических текстах и в фантастике, конечно, не встречаю незнакомых слов
То вообще ни вижу проблем для переводов, то есть для делания полезного дела для всех.
Это же ни как у меня, я вижу максимум 10 знакомых слов из 100 и тех перевод порой не помню, в результате общая картина не складывается. Недавно переводил абзац с техническим описанием дополнения слова до полных 512 бит, если оно меньше, так я чтобы понять сутки потратил.
Ну да ладно, не любите английский, значит не любите, я его тоже не люблю, но приходится пользоваться ежедневно, но тут google помогает неплохо.
Главное хотелось бы увидеть по итогу результат, программу компилятора для базовой Ириши и что-то ещё, желательно с нормальным описанием для полного новичка, если получится конечно...
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
Re: Язык программирования PL/M
7
компилятор PL/M для Z80 когда-то существовал
Про Z80, как-то вообще не интересно. В "ПЭВМ Ириша" применяется КР580ВМ80А, возможно будет когда-то 88-й, поэтому лучше забыть вообще про этот Z80, он не нужен...
Отвечать на этот пост не нужно, если вы не согласны, продолжайте дальше, это личное мнение, просто потом придётся при прочтении отделять полезную информацию от мусора связанного с Z80.
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
Язык программирования PL/M
8
.
____PL/M-80 – процедурный машинно-ориентированный язык программирования для систем на базе микропроцессоров Intel 8080 и 8085, а также совместимого с ними снизу вверх Z -80 фирмы Zilog. Аббревиатура расшифровывается как Programming Language for Microcomputers (язык программирования для микрокомпьютеров), а 80 – указывает тип микропроцессора, для которого реализована та или иная версия языка. PL/M был разработан в 1972 г. фирмой МАА (Microcomputers Applications Associates) по заказу корпорации Intel. Первый компилятор для этого языка написал Гарри Килдол (Gary Kildall)1, будущий автор операционной системы СР/М-80.
____Компиляторы с PL/M были сделаны для следующих микропроцессоров: Intel 4004, 8008, 8080/85, 8051, 80196, 8086/8088, 80188/80186, 286 и 386. Мы видим, что номер в названии языка соответствует типу микропроцессора, для которого он реализован. Соответственно PL/M для процессора 8051 называется PL/M-51. Для каждого микропроцессора язык имеет свои, иногда весьма существенные, особенности.
____Часто утверждается, что он основан на усечённом языке PL/1, но это совершенно не так, поскольку он заимствовал черты нескольких языков, Алгола, XPL и в том числе PL/1. Язык PL/M-80 исходно разрабатывался фирмой MAA (позднее она стала Digital Research ) в 1972 г. заказу корпорации Intel как самостоятельный язык [1], ориентированный на архитектуру микропроцессора i8080, и при более детальном знакомстве с ним вы увидите, что схожесть с PL/1 создаёт только ключевое слово DCL, служащее для объявления переменных. Язык процедурный, со строгой типизацией данных, имеет блочную структуру и правила видимости имён. Достоинство языка – его компактность. Интеловский компилятор с PL/M-80 создавал при трансляции очень компактный объектный код с коэффициентом расширения 6, то есть один оператор языка заменялся при трансляции в среднем шестью ассемблерными командами. Аналогично, объёмный коэффициент объектного кода по сравнению с эквивалентным ассемблерным лежал в пределах 1,2—1,3. То есть полученный после трансляции объектный код занимал в 1,2 раза больше памяти, нежели код программы, написанной на ассемблере i8080.
____Первоначально интеловский транслятор с PL/M -80 работал под операционной системой ISIS-II на системах разработки Intellec-800, Intellec Series II, Intellec Series III и замечательной двухпроцессорной портативной системе iPDS. Затем компиляторы для него появились под ОС CP/M-80, а с появлением PC – появились системы поддержки разработок на PL/M и на них, в частности, в виде эмуляторов CP/M-80 на PC. Компиляторы с PL/M были сделаны для следующих микропроцессоров: Intel 4004, 8008, 8080, 8051, 80196, 8086/8088, 80188/80186, 286 и 386. Режим программирования для микропроцессора i486 поддерживался в PL/M -386. В настоящее время Intel этот язык не поддерживает, однако существуют продукты других фирм, в том числе несколько конвертеров исходных текстов программ на PL/M в Си.
____Ниже дан краткий справочник по языку PL/M-80, а затем приведены различия между PL/M-86 и PL/M-80, PL/M-286 и PL/M-86, между PL/M-386 и PL/M-286.
Краткий справочник по языку PL/M-80.
Итак, программа на PL/M-80 состоит из предложений. Каждое предложение заканчивается знаком “;” (точка с запятой). Общий вид программы:
имя_программы: DO;
объявления и определения;
[исполняемые предложения;]
END имя_программы;
1. Алфавит PL/M-80.
Буквы: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Числа: 0 1 2 3 4 5 6 7 8 9
Спецсимволы: $ = . / ( ) + - ' * , < > : ; и пробел
____Все другие символы рассматриваются компилятором как пробелы. PL/M не различает символы в верхнем и нижнем регистрах, за исключением символов в строковых константах. Несколько идущих подряд пробелов рассматриваются компилятором как один пробел.
____Наименьшей значимой единицей языка в предложении PL/M является токен. Каждый токен принадлежит к одному из следующих классов: переменные, зарезервированные слова, простые разделители (это все специальные символы за исключением знака доллара), составные разделители (<>, <=, >=, :=, /*, */), числовые константы, строковые константы.
____Комментарий может быть использован как разделитель, а пробелы в любом количестве могут быть вставлены вокруг токена.
2. Идентификаторы.
____Идентификаторы задают имена переменных, процедур, констант и предложений. В последнем случае они именуются также метками. Идентификаторы могут быть длинной от 1 до 31 символа, причём первым символом должна быть буква, а остальные – буквы, цифры и знак доллара, который добавляется для улучшения читабельности текста, но игнорируется компилятором. Так что идентификатор TEST$$$EXAMPLE и TESTEXAMPLE для него одинаковы. Кроме того, знак доллара не может быть первым в имени идентификатора. Идентификаторы должны отличаться от ключевых слов.
____Переменные могут быть скалярами, массивами или структурами.
3. Зарезервированные (ключевые) слова.
____Следующие слова зарезервированы в языке и не могут использоваться в качестве идентификаторов:
ADDRESS
AND
BASED
BY
BYTE
CALL
CASE
DATA
DECLARE
DISABLE
DO
ELSE
ENABLE
END
EOF
GOTO
GO
HALT
IF
INITIAL
INTERRUPT
LABEL
LITERALLY
MINUS
MOD
NOT
PLUS
PROCEDURE
RETURN
OR
THEN
TO
WHILE
XOR
4. Типы данных.
____В языке всего два типа данных. Тип данных BYTE ссылается на 8-битовые данные, а тип ADDRESS – на 16-битовые. Переменная типа BYTE занимает соответственно один байт памяти и принимает беззнаковые целые значения от 0 до 255, а переменная типа ADDRESS занимает два байта памяти и принимает беззнаковые целые значения от 0 до 65535 (0FFFFh). Можно создавать массивы и указатели любого из этих типов.
4.1. Константы.
____Константа – это значение, которое не изменяется в ходе исполнения программы. Они бывают числовыми и строковыми. Числовые константы в PL/M-80 целочисленные, 8- и 16-битовые. Они могут быть записаны как двоичные (суффикс B), восьмеричные (суффиксы O и Q), десятичные (D) и шестнадцатеричные (H) числа. Для обозначения системы счисления используется соответствующий суффикс числа, если он опущен, то число считается десятичным.
____Шестнадцатеричные константы должны начинаться с цифры, чтобы их не путать с переменными, для этого впереди её пишется ноль, например 0Ah, и заканчиваться суффиксом h. Это нужно делать обязательно, так как число типа 09D без суффикса h будет воспринято как десятичное. Как и с идентификаторами, знак доллара может встраиваться в числовую константу. Это иногда удобно для записи двоичных чисел. Строковые константы – последовательность символов, заключённых в кавычки (апострофы). Разумеется, чтобы включить в состав строки саму кавычку, её следует при записи удвоить. Строки символов представлены 7-битным кодом ASCII. Строк длинной в 1 символ рассматривается как значение типа BYTE; длинной 2 – как ADDRESS. Строки длиннее двух символов могут использоваться только с помощью dot-оператора. (На самом деле он представляет собой обычный указатель). Максимальная длина строки – 255 знаков.
5. Выражения и структуры.
5.1 Арифметические операторы.
____В PL/M – семь арифметических операторов, которые могут выполнять действия над данными типа BYTE или ADDRESS. Таким образом, арифметика в языке только целочисленная, поскольку в системных программах для этого процессора плавающая арифметика не требуется. Однако она может быть реализована с помощью специальной библиотеки.
Список операторов:
____Операции умножения и деления всегда дают результат типа ADDRESS. Другие операции дают в результат типа BYTE, если оба операнда имеют тип BYTE, и тип ADDRESS, в других случаях.
5.2 Логические операторы.
____В PL/M реализовано четыре логических оператора, выполняющих булевские операции над 8- или 16-битовыми величинами.
____Результат операции имеет тип BYTE, если оба операнда типа BYTE. Во всех других случаях – результат имеет тип ADDRESS, причём, если необходимо, то старшие разряды результата дополняются нулями.
5.3 Операторы отношений.
____В языке имеется шесть операторов отношений. Все они возвращают результат 0FFH – представляющий "true" или 00H – означающий "false".
5.4. dot-оператор.
____В PL/M имеется оператор, именуемый dot-оператором (dot — точка). Это унарный оператор, возвращающий адрес памяти, по которому расположен его операнд. Операндом может быть константа, переменная, строка (байтовый массив) и т. д.
Формат:
.variable$name
.constant
.(constant)
.(constant, ...)
____Последняя форма записи широко используется для передачи подпрограмме адреса сообщения, например:
.('Message', 0DH, 0AH, 0H)
5.5. Старшинство операций.
____В выражении, если порядок не задан явно с помощью скобок, операторы вычисляются в соответствии со старшинством операций. Ниже дан список старшинства операций по степени его убывания:
*
/
MOD
+
-
PLUS
MINUS
<
<=
=
=>
>
<>
NOT
AND
OR
XOR
5.6. Комментарии.
____В PL/M комментарий представляет собой последовательность символов ограниченных слева разделителем /*, а справа – парными ему знаками */. Комментарий может появиться в тексте программы везде, где может появиться пробел.
/* текст комментария игнорируется компилятором */
5.7. Исполняемые предложения.
____Присваивание.
variable = expression;
или
variable, variable, ... = expression;
____Встроенное присваивание может использоваться внутри выражения. (Правда, я ни разу не встречал в текстах, чтобы кто-то им пользовался.
(variable := expression)
ALT + (CORR := TCORR + PCORR) - (ELEV := HT/SCALE);
даст точно такой же результат как и
ALT + (TCORR + PCORR) - (HT/SCALE);
Но при этом двум переменным будут попутно присвоены промежуточные значения.
Простой блок DO-END.
DO;
statement; ...;
END;
____Блоки могут быть вложенными. Глубина уровней вложенности определяется реализацией компилятора PL/M.
____С блоками связаны границы видимости имён. 1. Имя, если оно не объявлено как PUBLIC, видимо только внутри блока, где оно объявлено. 2. Если внутри вложенного блока объявлено переменная с таким же именем, как у переменой во внешнем блоке, то действует имя внутренней переменной.
Цикл DO - WHILE.
Исполняется пока выражение истинно.
DO WHILE expression;
statement; ...;
END;
Итеративный цикл DO.
DO variable = expression1 TO expression2 [BY expression3];
statement; ...;
END;
Например:
DO J=0 TO 8;
VECTOR(J) =0;
END;
Предложение DO - CASE.
Исполняется n-е предложение, где n – результат вычисления выражения, причём предложения нумеруются с нуля.
DO CASE expression;
statement0;
statement1;
...;
END;
Условный оператор имеет несколько форм:
IF - THEN.
IF expression THEN statement;
IF - THEN - ELSE.
IF expression THEN statement; ELSE statement;
Обратите внимание, что там, где указан один оператор, он может быть заменён на простой блок DO, например:
IF TMP>5 THEN
DO
INCR = INCR +3;
COUNT = COUNT – INCR;
END;
ELSE COUNT = 0;
Оператор безусловного перехода GO TO.
В PL/M GO TO и GOTO -- синонимы.
GO TO label;
или
GO TO number;
или
GO TO variable;
____В первом случае управление передаётся на оператор с указанной меткой, во втором – на абсолютный адрес памяти, в третьем – на адрес памяти, содержащийся в переменной.
Продолжение в следующем посте...
.
Язык программирования PL/M-80 и его потомки.
Эдуард Пройдаков
(Исправлены опечатки и грамматические ошибки.)
____PL/M-80 – процедурный машинно-ориентированный язык программирования для систем на базе микропроцессоров Intel 8080 и 8085, а также совместимого с ними снизу вверх Z -80 фирмы Zilog. Аббревиатура расшифровывается как Programming Language for Microcomputers (язык программирования для микрокомпьютеров), а 80 – указывает тип микропроцессора, для которого реализована та или иная версия языка. PL/M был разработан в 1972 г. фирмой МАА (Microcomputers Applications Associates) по заказу корпорации Intel. Первый компилятор для этого языка написал Гарри Килдол (Gary Kildall)1, будущий автор операционной системы СР/М-80.
____Компиляторы с PL/M были сделаны для следующих микропроцессоров: Intel 4004, 8008, 8080/85, 8051, 80196, 8086/8088, 80188/80186, 286 и 386. Мы видим, что номер в названии языка соответствует типу микропроцессора, для которого он реализован. Соответственно PL/M для процессора 8051 называется PL/M-51. Для каждого микропроцессора язык имеет свои, иногда весьма существенные, особенности.
____Часто утверждается, что он основан на усечённом языке PL/1, но это совершенно не так, поскольку он заимствовал черты нескольких языков, Алгола, XPL и в том числе PL/1. Язык PL/M-80 исходно разрабатывался фирмой MAA (позднее она стала Digital Research ) в 1972 г. заказу корпорации Intel как самостоятельный язык [1], ориентированный на архитектуру микропроцессора i8080, и при более детальном знакомстве с ним вы увидите, что схожесть с PL/1 создаёт только ключевое слово DCL, служащее для объявления переменных. Язык процедурный, со строгой типизацией данных, имеет блочную структуру и правила видимости имён. Достоинство языка – его компактность. Интеловский компилятор с PL/M-80 создавал при трансляции очень компактный объектный код с коэффициентом расширения 6, то есть один оператор языка заменялся при трансляции в среднем шестью ассемблерными командами. Аналогично, объёмный коэффициент объектного кода по сравнению с эквивалентным ассемблерным лежал в пределах 1,2—1,3. То есть полученный после трансляции объектный код занимал в 1,2 раза больше памяти, нежели код программы, написанной на ассемблере i8080.
____Первоначально интеловский транслятор с PL/M -80 работал под операционной системой ISIS-II на системах разработки Intellec-800, Intellec Series II, Intellec Series III и замечательной двухпроцессорной портативной системе iPDS. Затем компиляторы для него появились под ОС CP/M-80, а с появлением PC – появились системы поддержки разработок на PL/M и на них, в частности, в виде эмуляторов CP/M-80 на PC. Компиляторы с PL/M были сделаны для следующих микропроцессоров: Intel 4004, 8008, 8080, 8051, 80196, 8086/8088, 80188/80186, 286 и 386. Режим программирования для микропроцессора i486 поддерживался в PL/M -386. В настоящее время Intel этот язык не поддерживает, однако существуют продукты других фирм, в том числе несколько конвертеров исходных текстов программ на PL/M в Си.
____Ниже дан краткий справочник по языку PL/M-80, а затем приведены различия между PL/M-86 и PL/M-80, PL/M-286 и PL/M-86, между PL/M-386 и PL/M-286.
Краткий справочник по языку PL/M-80.
Итак, программа на PL/M-80 состоит из предложений. Каждое предложение заканчивается знаком “;” (точка с запятой). Общий вид программы:
имя_программы: DO;
объявления и определения;
[исполняемые предложения;]
END имя_программы;
1. Алфавит PL/M-80.
Буквы: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Числа: 0 1 2 3 4 5 6 7 8 9
Спецсимволы: $ = . / ( ) + - ' * , < > : ; и пробел
____Все другие символы рассматриваются компилятором как пробелы. PL/M не различает символы в верхнем и нижнем регистрах, за исключением символов в строковых константах. Несколько идущих подряд пробелов рассматриваются компилятором как один пробел.
____Наименьшей значимой единицей языка в предложении PL/M является токен. Каждый токен принадлежит к одному из следующих классов: переменные, зарезервированные слова, простые разделители (это все специальные символы за исключением знака доллара), составные разделители (<>, <=, >=, :=, /*, */), числовые константы, строковые константы.
____Комментарий может быть использован как разделитель, а пробелы в любом количестве могут быть вставлены вокруг токена.
2. Идентификаторы.
____Идентификаторы задают имена переменных, процедур, констант и предложений. В последнем случае они именуются также метками. Идентификаторы могут быть длинной от 1 до 31 символа, причём первым символом должна быть буква, а остальные – буквы, цифры и знак доллара, который добавляется для улучшения читабельности текста, но игнорируется компилятором. Так что идентификатор TEST$$$EXAMPLE и TESTEXAMPLE для него одинаковы. Кроме того, знак доллара не может быть первым в имени идентификатора. Идентификаторы должны отличаться от ключевых слов.
____Переменные могут быть скалярами, массивами или структурами.
3. Зарезервированные (ключевые) слова.
____Следующие слова зарезервированы в языке и не могут использоваться в качестве идентификаторов:
ADDRESS
AND
BASED
BY
BYTE
CALL
CASE
DATA
DECLARE
DISABLE
DO
ELSE
ENABLE
END
EOF
GOTO
GO
HALT
IF
INITIAL
INTERRUPT
LABEL
LITERALLY
MINUS
MOD
NOT
PLUS
PROCEDURE
RETURN
OR
THEN
TO
WHILE
XOR
4. Типы данных.
____В языке всего два типа данных. Тип данных BYTE ссылается на 8-битовые данные, а тип ADDRESS – на 16-битовые. Переменная типа BYTE занимает соответственно один байт памяти и принимает беззнаковые целые значения от 0 до 255, а переменная типа ADDRESS занимает два байта памяти и принимает беззнаковые целые значения от 0 до 65535 (0FFFFh). Можно создавать массивы и указатели любого из этих типов.
4.1. Константы.
____Константа – это значение, которое не изменяется в ходе исполнения программы. Они бывают числовыми и строковыми. Числовые константы в PL/M-80 целочисленные, 8- и 16-битовые. Они могут быть записаны как двоичные (суффикс B), восьмеричные (суффиксы O и Q), десятичные (D) и шестнадцатеричные (H) числа. Для обозначения системы счисления используется соответствующий суффикс числа, если он опущен, то число считается десятичным.
____Шестнадцатеричные константы должны начинаться с цифры, чтобы их не путать с переменными, для этого впереди её пишется ноль, например 0Ah, и заканчиваться суффиксом h. Это нужно делать обязательно, так как число типа 09D без суффикса h будет воспринято как десятичное. Как и с идентификаторами, знак доллара может встраиваться в числовую константу. Это иногда удобно для записи двоичных чисел. Строковые константы – последовательность символов, заключённых в кавычки (апострофы). Разумеется, чтобы включить в состав строки саму кавычку, её следует при записи удвоить. Строки символов представлены 7-битным кодом ASCII. Строк длинной в 1 символ рассматривается как значение типа BYTE; длинной 2 – как ADDRESS. Строки длиннее двух символов могут использоваться только с помощью dot-оператора. (На самом деле он представляет собой обычный указатель). Максимальная длина строки – 255 знаков.
5. Выражения и структуры.
5.1 Арифметические операторы.
____В PL/M – семь арифметических операторов, которые могут выполнять действия над данными типа BYTE или ADDRESS. Таким образом, арифметика в языке только целочисленная, поскольку в системных программах для этого процессора плавающая арифметика не требуется. Однако она может быть реализована с помощью специальной библиотеки.
Список операторов:
____Операции умножения и деления всегда дают результат типа ADDRESS. Другие операции дают в результат типа BYTE, если оба операнда имеют тип BYTE, и тип ADDRESS, в других случаях.
5.2 Логические операторы.
____В PL/M реализовано четыре логических оператора, выполняющих булевские операции над 8- или 16-битовыми величинами.
____Результат операции имеет тип BYTE, если оба операнда типа BYTE. Во всех других случаях – результат имеет тип ADDRESS, причём, если необходимо, то старшие разряды результата дополняются нулями.
5.3 Операторы отношений.
____В языке имеется шесть операторов отношений. Все они возвращают результат 0FFH – представляющий "true" или 00H – означающий "false".
5.4. dot-оператор.
____В PL/M имеется оператор, именуемый dot-оператором (dot — точка). Это унарный оператор, возвращающий адрес памяти, по которому расположен его операнд. Операндом может быть константа, переменная, строка (байтовый массив) и т. д.
Формат:
.variable$name
.constant
.(constant)
.(constant, ...)
____Последняя форма записи широко используется для передачи подпрограмме адреса сообщения, например:
.('Message', 0DH, 0AH, 0H)
5.5. Старшинство операций.
____В выражении, если порядок не задан явно с помощью скобок, операторы вычисляются в соответствии со старшинством операций. Ниже дан список старшинства операций по степени его убывания:
*
/
MOD
+
-
PLUS
MINUS
<
<=
=
=>
>
<>
NOT
AND
OR
XOR
5.6. Комментарии.
____В PL/M комментарий представляет собой последовательность символов ограниченных слева разделителем /*, а справа – парными ему знаками */. Комментарий может появиться в тексте программы везде, где может появиться пробел.
/* текст комментария игнорируется компилятором */
5.7. Исполняемые предложения.
____Присваивание.
variable = expression;
или
variable, variable, ... = expression;
____Встроенное присваивание может использоваться внутри выражения. (Правда, я ни разу не встречал в текстах, чтобы кто-то им пользовался.
(variable := expression)
ALT + (CORR := TCORR + PCORR) - (ELEV := HT/SCALE);
даст точно такой же результат как и
ALT + (TCORR + PCORR) - (HT/SCALE);
Но при этом двум переменным будут попутно присвоены промежуточные значения.
Простой блок DO-END.
DO;
statement; ...;
END;
____Блоки могут быть вложенными. Глубина уровней вложенности определяется реализацией компилятора PL/M.
____С блоками связаны границы видимости имён. 1. Имя, если оно не объявлено как PUBLIC, видимо только внутри блока, где оно объявлено. 2. Если внутри вложенного блока объявлено переменная с таким же именем, как у переменой во внешнем блоке, то действует имя внутренней переменной.
Цикл DO - WHILE.
Исполняется пока выражение истинно.
DO WHILE expression;
statement; ...;
END;
Итеративный цикл DO.
DO variable = expression1 TO expression2 [BY expression3];
statement; ...;
END;
Например:
DO J=0 TO 8;
VECTOR(J) =0;
END;
Предложение DO - CASE.
Исполняется n-е предложение, где n – результат вычисления выражения, причём предложения нумеруются с нуля.
DO CASE expression;
statement0;
statement1;
...;
END;
Условный оператор имеет несколько форм:
IF - THEN.
IF expression THEN statement;
IF - THEN - ELSE.
IF expression THEN statement; ELSE statement;
Обратите внимание, что там, где указан один оператор, он может быть заменён на простой блок DO, например:
IF TMP>5 THEN
DO
INCR = INCR +3;
COUNT = COUNT – INCR;
END;
ELSE COUNT = 0;
Оператор безусловного перехода GO TO.
В PL/M GO TO и GOTO -- синонимы.
GO TO label;
или
GO TO number;
или
GO TO variable;
____В первом случае управление передаётся на оператор с указанной меткой, во втором – на абсолютный адрес памяти, в третьем – на адрес памяти, содержащийся в переменной.
Продолжение в следующем посте...
.
Последний раз редактировалось: Viktor2312 (Пн Авг 12 2019, 08:12), всего редактировалось 2 раз(а)
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
Похожие темы
» "ВМИР". Статьи, очерки, разное...
» ЛИСП (Lisp) язык обработки списков: общие вопросы
» Изучаем язык программирования С. Вариант-1.
» Изучаем язык программирования Си. Вариант-2.
» ПРОЛОГ (Prolog) декларативный язык программирования
» ЛИСП (Lisp) язык обработки списков: общие вопросы
» Изучаем язык программирования С. Вариант-1.
» Изучаем язык программирования Си. Вариант-2.
» ПРОЛОГ (Prolog) декларативный язык программирования
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|