Программа переводящая исходный модуль программы в машинный код

Компиля́тор — программа, переводящая написанный на языке программирования текст в набор машинных кодов [1][2][3] .

  • 1Основная функциональность и терминология
  • 2Виды компиляторов
  • 3Виды компиляции
  • 4Структура компилятора
  • 5Генерация кода
  • 5.1Генерация машинного кода
  • 5.2Генерация байт-кода
  • 5.3Динамическая компиляция
  • 6.1Декомпиляция
  1. трансляцию всех модулей программы, написанных на одном или нескольких исходных языках программирования высокого уровня и/или языке ассемблера, в эквивалентные программные модули на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда наязык ассемблера) [2][3][4] или непосредственно на машинном языке или ином двоичнокодовом низкоуровневом командном языке;
  2. последующую сборку исполняемой машинной программы, в том числе вставка в программу кода всех функций, импортируемых из статических библиотек и/или генерация кода запроса к ОС на загрузку динамических библиотек, из которых программой функции будут вызываться.

Этапы компиляции на Си: предобработка, трансляция, компоновка

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

Do’stlaringiz bilan baham:

Источник: fayllar.org

Можно ли создать программу на машинном коде?

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

Кто создал машинный код?

Autocode, впервые разработанный Аликом Гленни для компьютера Mark 1 в Университете Манчестера, был первым в истории скомпилированным языком, который был реализован, что означает, что он может быть переведен непосредственно в машинный код с помощью программы, называемой компилятором.

Какая функция программного обеспечения переводить исходный код в машинный код?

Объектный модуль, как правило, имеет расширение obj. Трансляторы делятся на два класса: компиляторы и интерпретаторы. Компилятор переводит весь исходный модуль на машинный язык.

На чем пишутся процессоры?

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

Доп Хусаинов НШ — Трансляция программы: этапы генерации кода и средства разработки

Где программировать на ассемблере?

Поэтому чаще всего на ассемблере пишут отдельно взятые хорошо оптимизированные функции, которые затем вызываются из языков более высокого уровня, таких как с++ и c#. Исходя из этого, наиболее удобной средой для программирования будет Visual Studio, в состав которой уже входит MASM….

  • assembler.
  • masm.
  • 64-bit.
  • visual studio.
  • c#

Можно ли программировать на двоичном коде?

Обычному человеку читать такой код очень сложно, а вот для вычислительных машин он самый понятный. Двоичный код (машинный код) в наше время используется в программировании, ведь компьютер работает именно благодаря двоичному коду. Но не стоит думать, что процесс программирования сводится к набору единиц и нулей.

Кто создал первый программный код?

Язык программирования FORTRAN. Первый язык высокого уровня Фортран был создан в период с 1954 по 1957 год группой программистов под руководством Джона Бэкуса в корпорации IBM. Он предназначался для научных и технических расчетов. Название Fortran является сокращением от FORmula TRANslator (переводчик формул).

Кто создал первый компьютерный программный язык?

В это же время, в 1940-е годы, появились электрические цифровые компьютеры и был разработан язык, который можно считать первым высокоуровневым языком программирования для ЭВМ — «Plankalkül», созданный немецким инженером К. Цузе в период с 1943 по 1945 годы.

Читайте также:
Программа это последовательность команд реализующая алгоритм решения задачи компьютерная

Для чего предназначены транслятор?

Трансля́тор — программа или техническое средство, выполняющее трансляцию программы. Трансля́ция програ́ммы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке.

Какие функции выполняет интерпретатор?

К функциям интерпретатора командной строки относятся:

  • Взаимодействие с пользователем (редактирование командной строки, история команд и т. д.).
  • Обработка (расширение) шаблонов имен («*», «?» и т. д.).
  • Перенаправление ввода-вывода команд.
  • Управление заданиями.

На каком языке программируют процессоры?

Каждая модель (или семейство) процессоров имеет свой набор команд и соответствующий ему язык ассемблера. Наиболее популярные синтаксисы: Intel-синтаксис и AT

  • программирование микроконтроллеров и встраиваемых процессоров;
  • куски операционных систем, где важно обеспечить скорость работы;
  • антивирусы (и вирусы).
  • Как узнать машинный код?

    Маши́нный код (платфо́рменно-ориенти́рованный код), маши́нный язы́к — система команд (набор кодов операций) конкретной вычислительной машины, которая интерпретируется непосредственно процессором или микропрограммами этой вычислительной машины.

    Что такое 0 и 1 в программировании?

    Двои́чный код — это способ представления данных в виде кода, в котором каждый разряд принимает одно из двух возможных значений, обычно обозначаемых цифрами 0 и 1. Разряд в этом случае называется двоичным разрядом.

    Какой был самый первый язык программирования?

    Фортран
    Первый язык программирования — Фортран или Планкалкюль Plankalkül был изобретен в 1943-1945 году и впервые опубликован уже в 1948. Фортран создавали в период с 1954 года и до 1957. Позже программисты постоянно совершенствовали его и используют до сих пор — именно поэтому он более известен, чем Планкалкюль.

    Источник: toptitle.ru

    Тема 1.3 Отладка и тестирование программного продукта на уровне модулей

    1. Что такое трансляция, компиляция, транслятор, компилятор? Из каких про­цессов состоит компиляция? Расскажите об общей структуре компилятора.

    o Трансляция — перевод исходного языка в результирующий.

    o Компиляция – преобразование программы, представленной на одном из ЯП, в машинный код, который принимается и исполняется процессором. Результатом компиляции является «объектный файл» с необходимыми внешними ссылками для компоновщика. Программа переведенная в машинный код еще не готова к выполнению.

    o Объектный файл не может быть исполнен до тех пор, пока все модули и секции не будут в нем увязаны между собой. Это и делает редактор связей (компоновщик). Результатом его работы является единый файл: называемый «исполняемым файлом», который содержит весь текст результирующей программы на языке машинных кодов. Компоновщик может рождать сообщение об ошибке, если при попытке собрать объектные файлы в единое целое он не смог обнаружить какой-либо необходимой составляющей.

    o Транслятор – это программа, которая переводит входную программу на исходном языке в эквивалентную её программу на результирующем языке.

    o Компилятор – это транслятор, который осуществляет перевод исходной программы в эквивалентную ей объектную программу на языке машинных команд или на языке ассемблера.

    1) Лексический анализ. На этой фазе последовательность символов исходного файла преобразуется в последовательность лексем.

    2) Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в древо разбора.

    3) Семантический анализ — это часть компилятора, проверяющая правильность текста исходной программы с точки зрения семантики(СМЫСЛА, ЗНАЧЕНИЯ) входного языка. ИЛИ ТАК

    3.1) Семантический анализ — устанавливает смысловую правильность синтаксических конструкций

    4) Оптимизация. Удаляются избыточные команды и упрощается (где это возможно) код с сохранением его смысла.

    5) Генерация кода. Из промежуточного представления порождается код на целевом языке (в том числе выполняется компоновка программы).

    2. Какую роль выполняет лексический анализ в процессе компиляции? Как мо­гут быть связаны между собой лексический и синтаксический анализ?

    o Лексический анализ в процессе компиляции преобразует последовательность символов исходного файла в последовательность лексем.

    o Лексический и синтаксический анализ имеют дело со структурными, т.е. внешними, текстовыми конструкциями языка.

    o Семантика же, имеет дело с внутренним представлением «смысла» объектов, описанных в программе.

    3. Компилятор можно построить, не используя лексический анализатор. Объяс­ните, почему все-таки подавляющее большинство современных компилято­ров используют фазу лексического анализа.

    4. Постройте общую схему работы интерпретатора. В чем ее отличие от общей схемы работы компилятора?

    Таблица 1: Схема работы Интерпретатора

    Читайте также:
    Какую программу использовать для учета рабочего времени

    Таблица 2: Схема работы Компилятора

    5. Что такое таблица идентификаторов и для чего она предназначена? Какая информация может храниться в таблице идентификаторов?

    o Таблицы идентификаторов – это организованные наборы данных, служащие для хранения информации об элементах исходной программы, которые затем используются для написания программы.

    6. Какие специфические функции выполняет текстовый редактор в составе сис­темы программирования? Как он должен быть взаимосвязан с другими моду­лями системы?

    o Текстовый редактор в СП — это программа, позволяющая создавать, изменять и обрабатывать исходные тексты программ на языках высокого уровня.

    История использования текстовых редакторов в Средах Программирования.

    o Начнем с того, что поначалу текстовые редакторы использовались для написания различных текстов. Спустя некоторое время, возникновение интегрированных средств разработки позволили включить текстовые редакторы в состав «Систем Программирования». Благодаря этому стало возможным писать код в текстовом редакторе и выполнять его. Для удобства программиста, текстовый редактор обзавелся следующими возможностями:

    1) Отображением обнаруженных ошибок на этапе компиляции и мест, где они находятся;

    2) Подсветкой синтаксиса;

    3) Помощи в до писании кода и многому другому.

    7. Таблица лексем и таблица идентификаторов: различия.

    o Таблица лексем содержит весь текст исходной программы, обработанный лексическим анализатором. В нее входят все возможные типы лексем, при этом, любая лексема может в ней встречаться любое число раз.

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

    8. Лексический анализ исходного текста программы «на лету».

    o Лексический анализ «на лету» — это функция текстового редактора в составе Среды Программирования. Она заключается в поиске и выделении лексем входного языка в тексте программы непосредственно в процессе ее создания разработчиком.

    9. В чем особенности функционирования компилятора в составе системы про­граммирования по сравнению с его функционированием в виде отдельного программного модуля?

    Первоначально компиляторы представляли собой обособленные программные модули, решающие исключительно задачу перевода исходного текста программы на входном языке в язык машинных кодов. Компиляторы создавались вне связи с другими техническими средствами, с которыми им приходилось взаимодействовать. В задачу разработчика программы входило обеспечить взаимосвязь всех используемых технических средств:

    · подготовить тексты исходной программы на входном языке компилятора;

    · подать входные данные в виде текста исходной программы на вход компилятора;

    · получить от компилятора результаты его работы в виде набора объектных файлов;

    · подать весь набор полученных объектных файлов вместе с необходимыми библиотеками подпрограмм на вход компоновщику;

    · получить от компоновщика единый файл программы (исполняемый файл) и подготовить его к выполнению с помощью загрузчика;

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

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

    10. Почему компоновщик носит также название «редактор связей»? В чем за­ключается процедура разрешения внешних ссылок объектного файла?

    o Компоновщик (редактор связей) предназначен для связывания между собой объектных файлов, порождаемых компилятором, а также файлов библиотек, входящих в состав системы программирования.

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

    11. В современных системах программирования загрузчик, как правило, отсутст­вует. Его функции выполняет ОС. Расскажите, как эти функции выполняют­ся в различных ОС. Какую информацию должна получить ОС от системы программи­рования для выполнения загрузки исполняемого файла программы?

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

    Для этого потребовалось в состав исполняемого файла включить соответствующую таблицу, содержащую перечень ссылок на адреса, которые необходимо подвергнуть трансляции. В момент запуска исполняемого файла ОС обрабатывала эту таблицу и преобразовывала относительные адреса в абсолютные. Такая схема, например, характерна для ОС типа MS-DOS. В этой схеме модуль загрузчика как таковой отсутствует (фактически он входит в состав ОС) а система программирования ответственна только за подготовку таблицы транс­ляции адресов — эту функцию выполняет компоновщик.

    Читайте также:
    Какие расширения имеют файлы электронных таблиц созданные в программе ms excel

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

    12. В чем сходство и в чем различие принципов распространения прикладного программного обеспечения, созданного для ОС типа UNIX и для ОС Linux проекта GNU? Почему системы программирования Си и Си++ являются неотъемлемой частью этих ОС?

    ОС UNIX

    Большинство UNIX программ являются платными и имеют закрытый код, который имеют право изменять только разработчики данного программного обеспечения.

    ОС GNU

    Идея же проекта GNU заключается в свободном распространении всех программ. Программы распространяются в виде исходного кода, причем пользователь получает этот код в пользование, имеет право вносить в него изменения, а также распространять исходный или модифицированный код. Данная компания является UNIX – совместимой программной системой, которая безвозмездно предоставляет всем желающим ее использовать.

    Основные различия
    Linux UNIX
    Практически все ОС семейства Linux — бесплатные Большинство ОС семейства UNIX — коммерческие
    ОС имеют большую универсальность, совместимы с «железом» от разных брендов, широким спектром файловых систем ОС менее универсальны, каждый дистрибутив адаптирован к ограниченному количеству платформ и файловых систем
    Исходный код дистрибутивов открыт Исходный код в большинстве случаев закрыт

    13. В чем заключаются основные особенности разработки программного обеспечения для глобальной сети Интернет? Почему в этой сети часто используются интерпретируемые языки?

    14. Распознаватель: определение, назначение, виды распознавателей.

    o Распознаватель (или разборщик) — это специальный автомат, который позволяет определить принадлежность цепочки символов некоторому языку.

    o Задача распознавателя — дать ответ на вопрос, принадлежит ли она заданному языку или нет.

    Перечислите виды распознавателей:

    1) По видам считывающего устройства:

    o Двусторонние и односторонние.

    2) По видам устройства управления:

    o Детерминированные и недетерминированные.

    3) По видам внешней памяти:

    o Распознаватели без внешней памяти;

    o Распознаватели с ограниченной внешней памятью;

    o Распознаватели с неограниченной внешней памятью.

    15. Дайте определения выводимости цепочки, непосредственной выводимости, нетривиальной выводимости, длины вывода.

    o Цепочкой символов (или строкой) называют произвольную последовательность символов, записанных один за другим.

    o Выводом цепочки называется процесс порождения предложения языка на основе правил определяющей язык грамматики.

    o Непосредственная выводимость — отношение между предложением и конечным, возможно пустым, множеством предложений.

    16. Дайте определение цепочки символов, длины цепочки, пустой цепочки, равных цепочек символов. Основные операции над цепочками.

    o Цепочкой символов (или строкой) называют произвольную последовательность символов, записанных один за другим.

    o Количество символов в цепочке называют длиной цепочки. Длина цепочки символов α обозначается как |α|.

    o Пустая цепочка символов — это цепочка, не содержащая ни одного символа. Пустая цепочка обозначается греческой буквой λ.

    o Равными цепочки символов являются, когда цепочки символов α и β равны (совпадают), α=β, если они имеют один и тот же состав символов, одно и то же их количество и одинаковый порядок следования символов в цепочке.

    17. Что такое язык, алфавит, синтаксис и семантика языка? Способы задания языков

    o Язык — это заданный набор символов и правил, устанавливающих способы комбинации символов между собой для записи осмысленных текстов.

    o Алфавит — это счетное множество допустимых символов языка.

    o Синтаксис языка — это набор правил, определяющий допустимые конструкции языка. Синтаксис определяет “форму языка” — задает набор цепочек символов, которые принадлежат языку.

    4.3. Задания для оценки освоения (часть1) МДК 01.02:

    Источник: megalektsii.ru

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru