При классификации языков программирования выделялись:
1. Машинные языки;
2. Машинно-ориентированные языки (Assembler);
3. Алгоритмические языки;
4. Процедурно- и проблемно-ориентированные языки;
5. Интегрированная система программирования.
Самый нижний уровень из вышеперечисленных языков – машинный язык.
При составлении программ на машинном языке необходимо решить:
1. Распределение памяти для данных, обрабатываемых программой – сформировать таблицу символов (ТС). Например: сформировать таблицу в начале памяти.
Имя параметра | Адрес в ОЗУ | |
A | ||
B | ||
C | ||
… | … |
2. Распределить память для команд программы, начиная с адреса, который будет соответствовать вводу слова в ОЗУ с устройством ввода, по адресу 00000 (А) с кодом операции (КОП) 07. Машинные команды можно свести в таблицу кодов операций.
3. Составить программу, для чего записать коды машинных команд с указанием их размещения в ОЗУ, то есть программу можно представить в виде таблицы.
Адрес команды | КОП | Адрес операнда | Действия команды |
Ввод по адресу А |
При этом в ОЗУ между ячейками размещения данных и команд будут свободные ячейки, так как команды, начиная с 01000, будут записываться в память. Для оптимального использования ОЗУ эти ячейки необходимо заполнить. При отладке или корректировке размеры памяти меняются, поэтому приведенные шаги с 1 по 3 необходимо повторять.
Недостатки программно-машинного кода:
1. Неэффективное использование памяти.
2. Действия шагов 1 и 2 формальные не творческие, вызывают много ошибок при программировании. Их можно автоматизировать.
3. Реальные системные команды компьютера громоздкие (сотни различных команд), трудно воспринимаются, запись кодов – трудоемкий процесс.
Достоинства программно-машинного кода:
1. Высокое быстродействие.
2. Минимальные затраты памяти.
Поскольку машинные языки обладают недостатком высокую трудоемкость, используются языки более высокого уровня, в частности Assembler, для перехода от машинных команд. Отмеченные недостатки устраняются.
Ассемблерные языки программирования
Ассемблерные языки имеют особенности:
1. Вместо двоичных, восьмеричных, шестнадцатеричных кодов адресов используются их наглядная символьная запись. Перевод из символьной записи в двоичный код выполняется автоматически.
2. Размещение в ОЗУ данных и команд выполняется автоматически (транслятором – компилятором). Шаги 1 и 2 при этом выполняются без пустых ячеек – память используется оптимально.
3. Сохраняется оптимальность по быстродействию и памяти, то есть потери не превышают 5-10%.
Поэтому для системного программирования ассемблерные языки – основные.
Перекодировка ассемблерной команды выполняется транслятором за два подхода в следующей последовательности:
1й проход: составляется таблица символов;
2й проход: с использованием таблиц кодов и операций выполняется перекодировка команд в двоичные коды.
Макроассемблерные языки обладают возможностью ассемблерных языков с мощным аппаратом макровызовов и определений. Поэтому широко используются в системном программировании.
При их использовании потери быстродействия составляют 10-15%.
Алгоритмические языки
Алгоритмические языки – языки программирования высокого уровня (процедурные языки). Алгоритмические языки обеспечивают наибольшее удобство при записи программ, однако эффективность программы, написанной на языке высокого уровня, снижается в 2-4 раза. Для программ, написанных на языке С или С++ эффективность снижается в 1.5 раза, так как этот язык включает в себя множество средств ассемблерных языков.
ЯЗЫК ПРОГРАММИРОВАНИЯ С (С++)
Язык высокого уровня. Разработан в 1972 году Деннисом Ритчи в фирме Bell Laboratories (США). Был разработан в связи с созданием операционной системы Unix. Использовался как универсальный язык системного программирования. Эта операционная система была написана на C, что обеспечивало ее свободную переносимость на различные ЭВМ.
Для каждой архитектуры ЭВМ писали транслятор на языке C, и с его помощью Unix переносилась на другие ЭВМ соответствующей архитектуры.
Реализация С основана на компромиссе языка низкого уровня (Assembler) и языками высокого уровня. Значительная часть операций языка С: ввода-вывода, манипулирования строками – вынесены из языка и реализованы как подпрограммы, которые вызываются из основных программ. Это обеспечивает высокое быстродействие и малые затраты памяти.
Современный язык, включающий конструкции рекомендованной