31. Машинно–ориентированные языки.
Языки программирования. С момента начала использования ЭВМ для расчетов и проектирования возникла проблема общения человека с машиной. Первоначально программа для ЭВМ готовилась в машинных кодах. Такие машинные программы могли разрабатываться только узкими специалистами – программистами, знающими устройство и особенности конкретной ЭВМ. В этом случае имела место цепочка: пользователь – программист – машинная программа – ЭВМ. Такая цепочка приводила к большим затратам трудовых ресурсов и времени, Программирование задач на машинном языке ограничивало использование ЭВМ.Эту проблему позволило решить создание алгоритмических языков высокого уровня, отличающихся универсальностью. Для того чтобы машина понимала языки высокого уровня, для нее необходим переводчик с этого языка на машинный. Таким переводчиком является транслятор, т. е. программа, которая преобразует программу, написанную на языке высокого уровня, в машинную программу. Таким образом, возникает следующая цепочка: пользователь – программа на языке высокого уровня – транслятор – машинная программа–ЭВМ. Эта цепочка сделала революцию в применении ЭВМ. Число активных пользователей ЭВМ стало быстро расти, что в свою очередь послужило толчком к еще более быстрому развитию ЭВМ.Таким образом, среди языков программирования различают машинно–ориентированные, называемые языками ассемблера и автокодами, и алгоритмические языки высокого уровня. Автокод – язык, предложения которого по структуре подобны машинным командам. Язык ассемблера – автокод, расширенный макрокомандами, выражениями, средствами, обеспечивающими модульность программ. Машинно–ориентированные языки. Эти языки позволяют сокращать время составления программы за счет использования более удобных средств описания алгоритмов, передавать ЭВМ работу по распределению оперативной и долговременной памяти, обнаруживать самой ЭВМ ошибки кодирования и выполнения программ и выдавать в удобной для программиста форме информацию. К таким языкам программирования относятся язык Ассемблер и др. Языки уровня Ассемблера соответствуют системам команд конкретных ЭВМ и позволяют составлять программы в форме, удобной для человека. В основе машинно–ориентированных языков лежит символическая адресация и кодирование, а это шаг в направлении автоматизации программирования. В то же время эти языки программирования имеют существенный недостаток машинных языков – они сильно отличаются от традиционных математических языков. В последнее время языки Ассемблера нашли широкое применение при программировании на мини–, микро– и персональных ЭВМ из–за необходимости написания эффективных программ, например, программ, входящих в состав графического редактора. Однако языки типа Ассемблера отличаются большей универсальностью, выражающейся в широких возможностях описания кодов различных форматов, логических операций и процедур. В то же время при использовании этих языков требуются меньшие затраты машинного времени и памяти. Так, например, для транслятора с языка ПАСКАЛЬ требуется увеличение затрат машинного времени в 1,5. 2,5 раза по сравнению с машинно–ориентированным языком типа Ассемблера. Учитывая положительные особенности машинно–ориентированных и алгоритмических языков высокого уровня, их можно применять одновременно при разработке САПР для решения различных задач. При этом язык Ассемблера используют: при разработке модулей с большим количеством логических операций и операций над отдельными группами разрядов машинных слов, так как в этой ситуации возможности алгоритмических языков высокого уровня недостаточны; при жестких требованиях к модулю по показателям затрат машинных
времени и памяти. В остальных случаях определяющими требованиями становятся производительность труда программистов и инвариантности к типам ЭВМ, что обусловливает применение языков высокого уровня. Использование машинно–ориентированных языков позволяет достигать наивысшей эффективности объектных программ с точки зрения затрат вычислительных ресурсов –машинных времени и памяти. Эти языки универсальны в смысле применимости к решению задач различных классов – научно–технических и экономических, системных и прикладных. Однако программирование на этих языках требует высокой квалификации программиста и приводит к увеличению сроков разработки прикладного программного обеспечения. Главный недостаток этих языков – непереносимость программ на ЭВМ с системой команд, отличной от той, на которую ориентирован язык.
32. Алгоритмические языки высокого уровня. в сравнении с машинно–ориентированными языками удобнее для реализации алгоритмов численного анализа, легче осваиваются инженерами, позволяют повысить производительность труда программистов при разработке программ и их адаптации к различным типам ЭВМ. Алгоритмические языки высокого уровня – основное средство разработки прикладного ПО. В САПР наибольшее распространение получили языки ФОРТРАН, ПЛ/1, Паскаль, Си, АДА, ЛИСП, ПРОЛОГ, БЭЙСИК. Выделяется два подкласса языков: проблемно–ориент. и процедурно–ориент. Проблемно–ориен. языки программирования направлены на решение узкого класса задач. Программирование ведется в понятиях, характерных для конкретной проблемной области. Процедурно–ориен. языки созданы для описания алгоритмов решения задач. Среди них можно выделить машиннозависимые языки программирования высокого уровня и алгоритмические. Достоинства перечисленных языков программирования: высокая производительность труда программиста, самодокументируемость программ, простота эксплуатации, возможность переноса программ с одной ЭВМ на другую, наличие средств контроля и отладки. Если создаваемая САПР предназначена для решения инженерных задач, лучше воспользоваться языками программирования СИ, ФОРТРАН; для экономической информации – КОБОЛ либо СУБД, для геометрических моделей – ЛИСП. Язык ФОРТРАН предназначен для научных и инженерных задач, решаемых на ЭВМ. Этот язык разработан в 56 г. Язык программирования ФОРТРАН стал первым языком, в котором материализовалось понятие “модульность”. Хорошо разработанные библиотеки стандартных подпрограмм являются ярким примером преимущества модульного принципа программирования. Недостатки: в нем нет средств для удобного описания разнообразных структур данных, запрещены рекурсивные обращения к процедурам, нет строгого описания языка. Несмотря на недостатки, ФОРТРАН широко использовался в САПР, особенно разработанных в 60–70–е годы, благодаря простоте разработки эффективных трансляторов. В настоящее время применяется усовершенствованная версия языка – ФОРТРАН–77. 2 языком, получающим все большее распространение в САПР, является алгоритмический язык РL/1, разработанный в 66 г. В отличие от языка ФОРТРАН, этот язык имеет больше возможностей при обработке больших массивов информации и описании структур исходных данных. Этот язык ориентирован на крупные модели ЭВМ. В начале для малых и микро–ЭВМ получил большое распространение язык БЕЙСИК, разработанный в 65 г. Язык очень похож на ФОРТРАН, только проще. Язык ПАСКАЛЬ является претендентом на роль основного языка для написания ПО. Положительные св-ва этих языков – развитые средства для написания хорошо структурированных программ, для представления различных типов и структур данных, удачное сочетание простоты и строгости в описании языков. Язык СИ является другим претендентом на роль основного языка программирования в САПР. Он сочетает черты языков высокого уровня и языков ассемблера, что делает удобным его применение при разработке системного (ПО). Язык АДА можно назвать наиболее универсальным среди созданных языков. В этот язык включены средства для описания параллельных процессов. Однако трансляторы с этого языка пока не получили достаточного распространения.
33. Языки проектирования. Трансляторы и интерпретаторы.
Для обеспечения процесса проектирования объектов в САПР используются следующие виды языков: входной; выходной; сопровождения, промежуточные, внутренние. Входной предназначен для представления задания на проектирование, т.е. инфы об объектах и задачах проектирования, передаваемой от человека к ЭВМ. Для задания исходной инфы в САПР должны быть предусмотрены средства описания объектов проектирования в форме, удобной для отображения и ввода в ЭВМ. В большинстве входных языков можно выделить две части: непроцедурную, служащую для описания структур объектов, и процедурную, предназначенную для описания заданий на выполнение определенных проектных операций. Среди языков описания объекта различают языки описания схем, чертежей, процессов функционирования. Выходной предназначен для представления какого–либо проектного решения, включая результат проектирования в форме, удовлетворяющей требованиям его дальнейшего применения. В состав этого вида языков входят различные средства описания результатов проектирования в виде чертежей, технических карт, таблиц, а также представление формы промежуточных результатов проектирования, используемых в различных подсистемах САПР. Языки сопровождения применяются для корректировки и редактирования данных при выполнении проектных процедур. В диалоговых режимах работы с ЭВМ средства языков входного, выходного и сопровождения тесно связаны и объединяются под названием диалогового языка. Промежуточные языки используются для описания инфы о задачах проектирования на определенной стадии трансляции. Введение единого для программно–методического комплекса промежуточного языка облегчает адаптацию комплекса к новым входным языкам, т. е. делает комплекс открытым по отношению к новым составляющим лингвистического обеспечения. Внутренние языки являются языками внутреннего представления данных. Введение единого внутреннего представления данных означает принятие определенных соглашений об интерфейсах отдельных программ в программно–методическом комплексе и делает программно–методический комплекс открытым по отношению к новым элементам программного обеспечения. Требования к языкам: универсальности – возможности описания на входном языке любых объектов проблемной области, на которую ориентирована САПР; удобству пользования – обеспечивая пользователю максимальные удобства для описания и восприятия используемых при проектировании данных; максимальной лаконичности описания; однозначности истолкования элементов и конструкций языка; возможности развития и расширения языка; совместимости с другими входными и выходными языками. Интерпретатор поочередно анализирует и исполняет указания, выраженные предложениями входного языка. В оперативной памяти ЭВМ при решении задачи присутствуют прикладная программа на входном языке и интерпретатор. Транслятор преобразует заданную информацию с одного языка на другой. Если исходный и объектный языки относятся к одному и тому же уровню языков, то транслятор называют конвертором. Решение задач по методу компиляции происходит в два этапа. Сначала в оперативной памяти размещаются исходная программа и компилятор, результатом работы компилятора будет рабочая программа. Затем скомпилированная рабочая программа исполняется.
Среди перечисленных языков программирования к процедурным языкам относится …
По стилю программирования языки разделяются на:
— процедурные – это языки, которые являются отражением архитектуры традиционных ЭВМ;
— функциональные – языки, в которых единственным действием является вызов функции;
— логические – языки программирования в терминах логики, первоначально предназначенные для работы с естественными языками;
— объектно-ориентированные – языки, которые содержат объекты и позволяют разрабатывать хорошо структурированные, надежные и легко модифицируемые программы.
Язык программирования Pascal относится к процедурным языкам. LISP – это функциональный язык. Assembler является машинно-ориентированным языком низкого уровня. Prolog относится к логическим языкам.
ответ тест i-exam
7 Языки программирования
В настоящее время существуют языки программирования четырех уровней:
объектно-ориентированные языки и языки четвертого поколения.
Языки первого и второго уровня называют языками низкого уровня, алгоритмические- высокого уровня. Языки высокого уровня предназначены для представления алгоритмов решения задач, поэтому они чаще называются алгоритмическими. На основе алгоритмических языков стали создаваться языки объектно-ориентированного программирования. Современные информационные системы создаются с применением объектно-ориентированных языков и языков четвертого поколения.
Машинный язык или зык машинных команд — это совокупность команд, которые может выполнять конкретная машина ( сложение, вычитание, умножение, деление, останов, условный переход, сравнение и др.). Поэтому любой машинный язык должен быть соотнесен с конкретной ЭВМ. Каждая машинная команда складывается из последовательности машинных операций, выполняемых элементарными устройствами машины: считывание данных из ячейки ВЗУ, ОЗУ(внешнего запоминающего устройства, оперативного запоминающего устройства) , запись данных в ячейку ВЗУ,ОЗУ, запись и считывание информации из СчК, РrК (счетчик команд, регистр команд), операции выполняемые АЛУ (арифметико-логическое устройство).
Машинная команда со стоит из адресной части и операционной части. В операционной части записывается числовой код операции, которую необходимо выполнить над числами(операндами, аргументами), адреса которых записаны в адресной части.
Структура машинной команды трех адресной ЭВМ
адрес первого операнда
адрес второго операнда
адрес третьего операнда
Адреса первого и второго операндов указывают адреса чисел, над которыми будет выполняться операция. Результат выполненной операции будет помещен по третьему адресу
Машинные операции описываются на языке микропрограмм. Язык микропрограмм самый низший уровень программирования
В настоящее время наиболее распространенным машинно-ориентированным языком является язык ассемблер. Как язык ассемблер так и языки высокого уровня имеют свои достоинства и недостатки. Недостатки ассемблера — это:
1) трудоемкость процесса написания программ;
2) необходимость специальных знаний о принципах работы ЭВМ.
Это делает этот язык доступным лишь для специалистов в области вычислительной техники или программирования, в отличии от языков высокого уровня, доступных для более широкого круга пользователей. Язык ассемблер остается популярным и в настоящее время, так как он позволяет создавать быстродействующие программы, кроме того, программы, созданные на языке ассемблер, занимают меньший объем памяти по сравнению с программами, написанными на языках высокого уровня.
Языки высокого уровня разрабатывались применительно к отдельным классам задач. Существуют, в буквальном смысле слова, сотни языков программирования, десятки из которых используются для работы с персональными компьютерами. Остановимся на самых распространенных из них.
Одним из первых и наиболее популярным был Фортран (FORTRAN от FORmula TRANslator — переводчик формул). Этот язык был разработан в конце 50-х годов группой программистов фирмы IBM. Фортран первоначально предназначался для работы с формулами и поэтому использовался для математических и инженерных расчетов.
В 1960 году был создан язык Кобол (Cobol — Common Business Oriented Language). Язык был ориентирован на деловые задачи для обработки данных в сферах управления.
В конце 60-х появился язык Алгол-60 (ALGOL — от ALGOrithmic Language — алгоритмические языки), который позволял решать многие научно-исследовательские задачи.
Язык Бейсик (BASIC — Beginners All-Purpose Symbolic Code — универсальный символический код для начинающих) изначально был задуман, как доступный для всех универсальный язык программирования. Язык отличается простотой, легко усваивается начинающими программистами. На этом языке можно было решать небольшие задачи социологического исследования, писать программы для филологов, в тоже время, он был пригоден для математических и экономических расчетов. Разработан студентами Дартмундского колледжа в 1963 году. Существуют различные версии этого языка: MBasic, Turbo Basic, Power Basic, Quick Basic. Наиболее популярны в нашей стране версии Basic фирмы Microsoft.
Языки Лисп, Пролог разрабатывались для создания экспертных систем. Язык GPSS — предназначен для создания моделей массового обслуживания, язык Ада — для создания систем, работающих в режиме реального времени.
Если в начале 60-х годов насчитывалось около десятка языков высокого уровня, то вскоре их количество резко возросло (несколько сотен), т.к. существовала тенденция создавать языки для решения различных специфических задач, либо под конкретную ЭВМ. Когда появилось такое обилие языков, возникла потребность в универсальном и машинно-независимым языке. Так появились языки Паскаль (Pascal), который взял все лучшее от языка Алгол 60, язык PL/1 (включающий элементы языков Фортран, Алгол, Кобол), новая версия языка Алгол — Алгол-68, язык Си (С).
В настоящее время наиболее распространенными считаются универсальные языки Бейсик (речь идет о Visual Basic), Паскаль, Си.
Visual Basic (в дальнейшем просто Бейсик) более других языков приближается к универсальному языку для персональных компьютеров. По сути, в каждом персональном компьютере заложена та или иная версия Бейсика, а IBM PC имеет Бейсик, встроенный в ПЗУ (постоянное запоминающее устройство). Признанным достоинством Бейсика считается его простота, а так же то, что он имеет специальные операторы, облегчающие доступ к большинству специфических устройств семейства IBM РС. У Бейсика есть и некоторые недостатки: ограничения на размер программ и объем данных, кроме того, на выполнение программы уходит больше времени по сравнению с другими языками высокого уровня.
(Бейсик, мягко говоря, был не популярен среди профессионалов. Это продолжалось до появления Visual Basic. Первая версия Visual Basic появилась в 1991. И это заслуга Билла Гейтса, так как он считается разработчиком Visual Basic.)
Это интересно! Гейтс учился в самой привилегированной школе Сиэтла, где он смог развить свои навыки программирования на школьном миникомпьютере. В тринадцать лет Билл написал свою первую программу – игру «Крестики-нолики» на языке программирования BASIC. Когда время, отведенное Биллу и его другу Полу Аллену для работы в компьютерной лаборатории, истекло, они взломали программу. За взлом компьютеров четырём студентам школы — Рику Вэйленду, Кенту Эвансу, Полу Аллену и Биллу Гейтсу — запретили работать на компьютерах в течение всего лета. Инициатором наказания стала компания Computer Center Corporation, чей компьютер студенты взломали. По истечении наказания студенты предложили компании находить ошибки в их программном обеспечении за возможность работать на компьютерах компании. Компания согласилась, и Гейтс с товарищами изучали множество исходных кодов программного обеспечения написанных на таких языках как FORTRAN, LISP, и вмашинном коде. Данное сотрудничество продолжалось до 1970 года, пока компания не обанкротилась. В следующем году компания Information Sciences, Inc. наняла четырёх студентов, чтобы написать программу ведения платежных ведомостей. (Примечание от Л.А.Александровой: «В настоящее время не оценят взлом компьютеров, и за это можно поплатиться. Об этом поговорим на лекции о правовой защите информации».)
Языки Паскаль и Си выбирают профессионалы для создания системных программ. Паскаль предпочитают использовать те, кто изучал его ранее, изначально этот язык был создан как учебный язык, а не язык для профессионального использования. Язык Си используется теми программистами, которые, прежде всего, заботятся об эффективности программ, кто хочет, чтобы их программы соответствовали возможностям компьютера, операционной системы (система Unix, в основном, ориентирована на этот язык).
Автор сервисной программы “Утилиты Нортона” Питер Нортон приводит (в одной из своих книг) следующее сравнение этих языков: “сам по себе Паскаль лучше, в нем меньше возможностей допустить ошибку, с другой стороны, язык Си особенно хорош для составления компактных, надежных программ, использующих возможности BIOS, DOS”. В то же время, в своих программах, написанных на Паскале или Си, он использует ассемблер для выполнения действий, которые нельзя описать на языках высокого уровня.
Если ранее, программное обеспечение для ЭВМ могли разрабатывать только профессионалы, то положение изменилось с появлением объектно-ориентированных языков: Visual Basic, Obect Pascal, C ++ и сред объектного и объектно-визуального программирования: Visual C ++ Visual Basic, Delphi, Builder C ++ . Среды объектно-визуального программирования позволяют, даже не профессионалам, за короткое время овладеть этими продуктами и создать конкурентно-способные приложения под Windows.
Объектно-ориентированные языки и языки четвертого поколения
С появлением объектно-ориентированных языков начинается новый, наиболее совершенный уровень программирования. Развитие этих языков привело к появлению языков, так называемого, четвертого поколения.
В настоящее время языки объектно-ориентированного программирования нашли свое признание как среди программистов, так и непрофессионалов, благодаря тому, что позволяют с минимальными временными затратами создавать программные продукты с удобным пользовательским интерфейсом. Эти языки значительно ускорили процесс написания программ для сложных инженерных, сетевых, мультимедиа и SQL-приложений.
Универсальными, объектно-ориентированными языками программирования являются Visual Basic, Object Pascal, С ++ .
Какой язык выбрать для изучения или программирования? Обычно язык программирования выбирается исходя из следующих соображений: какими языками уже владеет программист или же каким языком ему легче овладеть; какой язык более всего подходит для решения поставленной задачи; какие требования выдвигает заказчик; личные вкусы программиста также играют важную роль.
Языки Visual Basic, Object Pascal считаются более легкими для освоения. Кроме того, если разрабатываются приложения на основе таких программных средств, как Excel, Access, то для их автоматизации предстоит программировать на языке Visual Basic. Так как Visual Basic “детище” фирмы Microsoft, то они планируют ввести его во все программные продукты, предназначенные для автоматизации бухгалтерских расчетов, работы с документами, базами данных.
Языки Object Pascal и С ++ более подходят для промышленного программирования. Язык С ++ , в настоящее время, стал стандартным языком системного и прикладного программирования, позволяющим создавать высокоэффективные программы. Кроме того, на язык С ++ в 1997 году принят международный стандарт. У каждого языка существует множество диалектов, а стандарт определяет “ядро” языка, которое должно быть реализовано в каждой версии (каждом компиляторе). Процесс стандартизации способствовал популяризации языка С ++ , а сам язык сделал более мощным.
Выбор того или иного языка программирования во многом определяется возможностями и удобствами интегрированных сред объектного и объектно-визуального программирования. Так профессионалы, уважающие язык С ++ , могут выполнить макеты разрабатываемой системы и пользовательского интерфейса в среде Visual Basic или Delphi, отдавая должное простоте этих сред, а содержимое системы программируют на С ++ .
Языками объектно-ориентированного программирования считаются также языки Ada, SmallTalk, языки, используемые для программирования в различных СУБД: Paradox, Informix и другие.
Новый этап в программировании начался с появлением, так называемых, языков четвертого поколения — языков, которые позволяют создавать приложения, функционирующие на различных платформах. К языкам четвертого поколения в настоящее время можно отнести язык Jam, Java, GL4. Приложения, созданные с помощью языка Jam, могут использовать данные из уже существующих приложений и работать более чем на ста платформах и в операционных оболочках, включая DOS, MS-Windows, Vax/VMS, UNIX.
При создании языка Java за основу был взят язык С ++ и использовались идеи других объектно-ориентированных языков. Язык Java позволяет создавать программы для работы в Интернет — апплеты. Апплеты не зависят от конкретных типов компьютеров, и операционных систем, то есть не зависят от платформы.
В некоторой литературе языками четвертого поколения называют все объектно-ориентированные языки программирования, но это не верно. В настоящее время к языкам четвертого поколения предъявляют следующие требования:
— использование объектно-визуальных технологий;
— совместимость с различными платформами;
— поддержка стандартных СУБД.
Объектно-ориентированное программирование
Объектно-визуальное программирование в среде Delphi
Объектно-ориентированное программирование — это технология программирования, основанная на использовании объектно-ориентированных языков программирования. Для реализации этих технологий существуют специальные интегрированные среды программирования, обеспечивающих поддержку названных технологий. В дальнейшем на смену интегрированным средам программирования пришли объектно-визуальные среды программирования.
По определению признанного авторитета в области объектно-ориентированных методов разработки программ Гради Буча ”объектно-ориентированное программирование — это методология программирования, которая основана на представлении программы в виде совокупности объектов, каждый из которых является реализацией определенного класса (типа особого вида), а классы образуют иерархию на принципах наследуемости ”. По Гради Бучу “наследование — это такое отношение между объектами, когда один объект повторяет структуру и поведение другого”.
При изучении объектно-ориентированных языков программирования необходимо придерживаться следующей схемы:
— познакомиться с перечнем готовых объектов программирования;
— изучить совокупность всех свойств каждого объекта и их возможных значений;
— изучить совокупность допустимых для каждого объекта действий;
— познакомиться с принципами создания новых объектов.
Итак, при объектно-ориентированном программировании всегда необходимо держать в памяти схему: объект — свойства — действия (рис.4.6), и не забывать о том, что объекты, взаимодействуя, оказывают влияние на другие объекты и, в свою очередь, подвергаются влиянию с их стороны. Программист определяет, выбирает внешний вид объектов и, тем самым, фиксирует их свойства. Свойства конкретизируются с помощью параметров. Затем каждому объекту приписываются действия. Первично, к объектно-ориентированным языкам программирования, были отнесены такие языки как Turbo Visin; C + , С ++ , Visual C ++ . Они значительно облегчали программирование благодаря стандартным процедурам, которые позволяли построить в программе такие объекты, как окно, меню, полосы прокрутки, кнопки и другие. Объектное программирование значительно ускорило работу программиста, но, в то же время, ему приходилось держать в памяти большой объем информации об объектах, их свойствах, значениях, возможных действиях и т.п. Объектно-визуальное программирование лишено этих недостатков.

Рис.4.6. Схема работы с объектом
Объектно-визуальное программирование
В настоящее время популярны следующие среды объектно-визуального программирования: Visual Basic, Delphi, Builder C ++ . В этих средах программист работает с визуальными (видимыми) объектами, может изменять их внешний вид и наблюдать выполненные изменения. Изменения выполняются с помощью мышки по технологии работы с графическими объектами либо путем изменения значений в соответствующих полях свойств каждого конкретного объекта. Все свойства (параметры), описывающие объект, и допустимые действия сведены в специальное окно. Технология работы в перечисленных средах объектно-визуального программирования одна и та же, отличие лишь в названии инструментов. Так в среде Visual Basic окно, в котором задаются параметры объектов, называется Окно параметров, а в среде Delphi — Инспектор объектов и т.п. Следующий параграф демонстрирует технологию работы в объектно-визуальной среде Delphi, в нем показаны возможности и простота среды, технология и возможности работы в средах Visual Basic и Builder C ++
Основы языков программирования. Машинно-ориентированные языки (ассемблеры)
Язык программирования — формальный язык, предназначенный для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, определяющих внешний вид программы и действия, которые выполнит исполнитель (обычно — ЭВМ) под её управлением.
Язык программирования предназначен для написания компьютерных программ, которые представляют собой набор правил, позволяющих компьютеру выполнить тот или иной вычислительный процесс, организовать управление различными объектами, и т. п. Язык программирования отличается от естественных языков тем, что предназначен для управления ЭВМ, в то время как естественные языки используются, прежде всего, для общения людей между собой. Большинство языков программирования использует специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений.
Как правило, язык программирования определяется не только через спецификации стандарта языка, формально определяющие его синтаксис и семантику, но и через воплощения (реализации) стандарта — программные средства, обеспечивающих трансляцию или интерпретацию программ на этом языке; такие программные средства различаются по производителю, марке и варианту (версии), времени выпуска, полноте воплощения стандарта, дополнительным возможностям; могут иметь определённые ошибки или особенности воплощения, влияющие на практику использования языка или даже на его стандарт.
Языки программирования можно классифицировать по следующим признакам.
По степени ориентации на специфические возможности ЭВМ языки программирования делятся на машинно-зависимые и машинно-независимые. К машинно-зависимым языкам программирования относятся машинные языки, языки ассемблера и автокоды, которые используются в системном программировании. Программа на машинно-зависимом языке программирования может выполняться только на ЭВМ данного типа. Программа на машинно-независимом языке программирования после трансляции на машинный язык становится машинно-зависимой. Этот признак языка программирования определяет мобильность получаемых программ (возможность переноса на ЭВМ другого типа).
По степени детализации алгоритма получения результата языки программирования делятся на языки низкого уровня, языки высокого уровня и языки сверхвысокого уровня.
По степени ориентации на решение определенного класса задач языки делятся на проблемно-ориентированные и универсальные.
По возможности дополнения новыми типами данных и операциями различают расширяемые и нерасширяемые языки.
По возможности управления реальными объектами и процессами выделяют языки систем реального времени и языки систем условного времени.
По способу получения результата языки программирования делятся на процедурные и непроцедурные. В свою очередь непроцедурные языки по типу встроенной процедуры поиска решений делятся на реляционные, функциональные и логические.
По типу решаемых задач различают языки системного программирования и языки прикладного программирования.
Машинно-ориентированные языки (ассемблеры)
Язык ассемблера (англ. assembly language) — машинно-ориентированный язык программирования низкого уровня. Представляет собой систему обозначений, используемую для представления в удобно читаемой форме программ, записанных в машинном коде. Его команды прямо соответствуют отдельным командам машины или их последовательностям. Является существенно платформо-зависимым: языки ассемблера для различных аппаратных платформ несовместимы, хотя могут быть в целом подобны.
Язык ассемблера позволяет программисту пользоваться алфавитными мнемоническими кодами операций, по своему усмотрению присваивать символические имена регистрам ЭВМ и памяти, а также задавать удобные для себя схемы адресации (например, индексную или косвенную). Кроме того, он позволяет использовать различные системы счисления (например, десятичную или шестнадцатеричную) для представления числовых констант и даёт возможность помечать строки программы метками с символическими именами с тем, чтобы к ним можно было обращаться (по именам, а не по адресам) из других частей программы (например, для передачи управления).
Также может предоставлять дополнительные возможности облегчения программирования, такие как макрокоманды, выражения, средства обеспечения модульности программ. В связи с этим может рассматриваться как автокод (см. ниже), расширенный конструкциями языков программирования высокого уровня.
Перевод программы на языке ассемблера в исполнимый машинный код (вычисление выражений, раскрытие макрокоманд, замена мнемоник собственно машинными кодами и символьных адресов на абсолютные или относительные адреса) производится ассемблером — программой-транслятором, которая и дала языку ассемблера его название.
В разговорном русском языке может именоваться просто «ассемблером» (типичны выражения типа «писать программу на ассемблере»), что, строго говоря, неверно, так как ассемблером именуется утилита трансляции программы с языка ассемблера в машинный код процессора. Вместо фразы «программа на ассемблере» корректнее говорить «программа на языке ассемблера».
Использование термина «язык ассемблера» может вызвать ошибочное мнение о существовании некоего единого языка низкого уровня или хотя бы стандарта на такой язык. Поскольку синтаксис программы на языке ассемблера зависит главным образом от используемой архитектуры, единого языка ассемблера не существует. При использовании термина «язык ассемблера», если не очевидно из контекста, желательно уточнять, ассемблер для какой архитектуры имеется в виду.
Слово ассемблер (assembler) переводится с английского как «сборщик». На самом деле так называется программа-транслятор, принимающая на входе текст, содержащий условные обозначения машинных команд, удобные для человека, и переводящая эти обозначения в последовательность соответствующих кодов машинных команд, понятных процессору. В отличие от машинных команд, их условные обозначения, называемые также мнемониками, запомнить сравнительно легко, так как они представляют собой сокращения от английских слов. Язык условных обозначений и называется языком ассемблера.
На заре компьютерной эры первые ЭВМ занимали целые комнаты и весили не одну тонну, имея объем памяти с воробьиный мозг, а то и того меньше. Единственным способом программирования в те времена было вбивать программу в память компьютера непосредственно в цифровом виде, переключая тумблеры, проводки и кнопочки. Число таких переключений могло достигать нескольких сотен и росло по мере усложнения программ. Встал вопрос об экономии времени и денег. Поэтому следующим шагом в развитии стало появление в конце сороковых годов прошлого века первого транслятора-ассемблера, позволяющего удобно и просто писать машинные команды на человеческом языке и в результате автоматизировать весь процесс программирования, упростить, ускорить разработку программ и их отладку. Затем появились языки высокого уровня и компиляторы (более интеллектуальные генераторы кода с более понятного человеку языка) и интерпретаторы (исполнители написанной человеком программы на лету). Они совершенствовались, совершенствовались — и, наконец, дошло до того, что можно просто программировать мышкой.
Таким образом, ассемблер — это машинно ориентированный язык программирования, позволяющий работать с компьютером напрямую, один на один. Отсюда и его полная формулировка — язык программирования низкого уровня второго поколения (после машинного кода). Команды ассемблера один в один соответствуют командам процессора, но поскольку существуют различные модели процессоров со своим собственным набором команд, то, соответственно, существуют и разновидности, или диалекты, языка ассемблера. Поэтому использование термина «язык ассемблера» может вызвать ошибочное мнение о существовании единого языка низкого уровня или хотя бы стандарта на такие языки. Его не существует. Поэтому при именовании языка, на котором написана конкретная программа, необходимо уточнять, для какой архитектуры она предназначена и на каком диалекте языка написана. Поскольку ассемблер привязан к устройству процессора, а тип процессора жестко определяет набор доступных команд машинного языка, то программы на ассемблере не переносимы на иную компьютерную архитектуру.
Основными машинно-ориентированными языками являются языки ассемблеров или, как часто их называют, ассемблеры. Транслятор с такого языка также называют ассемблером. Когда говорят «ассемблер x86», то могут подразумевать как язык машинно-ориентированного программирования компьютеров с архитектурой Intel x86, так и сам компилятор с этого языка. Чтобы разобраться, что имеется в виду, нужно чувствовать контекст. Ассемблер архитектуры x86 совершенно не пригоден для разработки программ с иной целевой архитектурой, например, микроконтроллеров ARM. Ассемблер ARM также не может транслировать программы, предназначенные для x86. Для компьютеров семейства архитектур Intel x86 существует довольно много ассемблер-трансляторов, основными из которых являются: MASM, TASM, NASM, FASM, YASM, WASM, HLA.
Естественно считать машинно-ориентированным языком язык машинных кодов. Чаще всего машинные коды пишутся в шестнадцатеричной системе счисления (HEX-код), но для некоторых архитектур используется восьмеричная система. Использование машинных кодов выгодно в случаях, когда необходимо что-то изменить непосредственно в машинной программе, исходные коды для которой отсутствуют.
Машинные коды иногда приходится использовать при программировании на ассемблере. Это бывает, когда ассемблер не поддерживает трансляцию мнемокодов некоторых команд, поддерживаемых целевой архитектурой. Например, в случае, когда мы имеем самый новый процессор, а используемый ассемблер прекратил свое развитие уже несколько лет назад. Тогда для использования новых машинных команд приходится в последовательность операторов ассемблера вставлять декларации размещения данных, через которые кодируются новые команды.
В настоящее время можно указать две области, в которых использование языка Ассемблера оправдано, а зачастую и необходимо.
Во-первых, это так называемые машинно-зависимые системные программы, обычно они управляют различными устройствами компьютера (такие программы, как правило, называются драйверами). В этих системных программах используются специальные машинные команды, которые нет необходимости применять в обычных (или, как говорят, прикладных) программах. Эти команды невозможно или весьма затруднительно задать в программе на языке высокого уровня. Кроме того, обычно от драйверов требуется, чтобы они были компактными и выполняли свою работу за минимально возможное время.
Вторая область применения Ассемблера связана с оптимизацией выполнения тех больших программ, которые требуют много времени для счёта. Часто программы-переводчики (трансляторы) с языков высокого уровня дают не совсем эффективную программу на машинном языке. Причина этого заключается в том, что такие программы могут иметь специфические особенности, которые не сможет учесть транслятор. Особенно это касается программ вычислительного характера, которые бóльшую часть времени (более 99%) выполняют очень небольшой по длине (около 1-3%) участок программы (обычно называемый главным циклом). Для повышения эффективности выполнения этих программ могут использоваться так называемые многоязыковые системы программирования, которые позволяют записывать части программы на разных языках. Обычно основная часть оптимизируемой программы записывается на языке программирования высокого уровня (Фортране, Паскале, Си и т.д.), а критические по времени выполнения участки программы – на Ассемблере. Скорость работы всей программы при этом может значительно увеличиться.
Часто это единственный способ заставить сложную программу дать результат за приемлемое время.
Стоит отметить, что есть и «специфические» области применения Ассемблера, например, реинжениринг (reverse engineering). Под этим обычно подразумевают исследование и преобразование программ на машинном языке в программы на языках более высокого уровня (в основном на Ассемблер), в целях их изучения и изменения.
- Негода В. Н. Машинно-ориентированное программирование : учебное пособие / В. Н. Негода. – Ульяновск : УлГТУ, 2015. – 160 с.
- Погружение в assembler. Полный курс по программированию на асме от ][. — Текст : электронный // «Хакер» — Безопасность, разработка, DevOps : [сайт]. – URL: https://xakep.ru/2017/09/11/asm-course-1/ (дата обращения: 5.01.2021)

03.01.2021, 2880 просмотров.