Коды ассемблеры Трансляция и компоновка Исходный и объектный модули исполняемая программа Компиляция и ин

Этапы выполнения программы

На рис. 4 приведена схема основных этапов выполнения программ.

Разберем процесс выполнения программ.

Как пишутся программы?

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

Инструментами программиста являются программы. Именно с помощью программ создаются новые программы. А как создавали эти инструментальные программы? Ответ очевиден — с помощью других инструментальных программ, хотя и более примитивных.

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

Опр. 19. Программу на языке программирования записывают в обычном текстовом редакторе и получают текстовый файл, который называется исходным модулем.

Исходный модуль хранится на внешнем устройстве ЭВМ в виде файла.

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

Рис. 4. Этапы выполнения программы.

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

Трансляторы — это программы-переводчики, выполняющие перевод с языка программирования на язык машинного кода. Существует два основных вида трансляторов: компилятор и интерпретатор.

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

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

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

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

Опр. 23. Системные библиотеки — объектные модули соответствующего языка, хранящие в себе различные команды: обращение к другим объектным модулям, вычисления математических функций, операции ввода-вывода данных и т.д.

Опр. 24. Компоновщикилиредактор связей — системная программа, которая объединяет несколько объектных модулей в один, подключает к объектному модулю все необходимые системные библиотеки и результатом своей работы имеет модуль, готовый для непосредственного выполнения ЭВМ после загрузки его в оперативную память.

Опр. 25. Загрузочный модуль (результат работы компоновщика) — это объектный модуль с подключенными к нему системными библиотеками. Только загрузочный модуль может быть выполнен ЭВМ.

Опр. 26 Отладчик— системная программа, управляющая ходом выполнения программы.

Источник

Коды, ассемблеры. Трансляция и компоновка. Исходный и объектный модули, исполняемая программа. Компиляция и интерпретация. Данные как объект обработки.

Когда вы пишете программу на ассемблере, вы просто пишете команды процессору. Команды процессору — это просто коды или коды операций или опкоды. Опкоды — фактически «читаемый текст»- версии шестнадцатеричных кодов. Из-за этого, ассемблер считается самым низкоуровневым языком программирования, все в ассемблере непосредственно преобразовывается в шестнадцатеричные коды. Другими словами, у вас нет компилятора, который преобразовывает язык высокого уровня в язык низкого уровня, ассемблер только преобразовывает коды ассемблера в данные.

Числа в ассемблере могут представляться в двоичной, десятеричной или шестнадцатеричной системе. Для того, чтобы показать в какой системе использовано число надо поставить после числа букву. Для бинарной системы пишется буква b (пример: 0000010b, 001011010b), для десятеричной системы можно ничего не указывать после числа или указать букву d (примеры: 4589, 2356d), для шестнадцатеричной системы надо указывать букву h, шестнадцатеричное число надо обязательно писать с нулём в начале (примеры: 00889h, 0AC45h, 056Fh, неправильно F145Ch, С123h).

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

§ если в программе используются функции, например, sin, exp и т.д., соответствующие им программные модули выбираются из библиотеки подпрограмм соответствующей системы программирования и вставляются в объектный модуль;

§ объектный модуль преобразуется в соответствии с реальными адресами основной памяти, куда будет размещаться программа для выполнения.

Процесс преобразования программы, написанной на одном языке программирования, в программу на другом языке.

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

Читайте также:  Финансовая модель бизнеса Теперь планирование это просто

Различают два вида трансляции:

§ компиляцию, при которой результат получается в виде готовой программы, выполняемой независимо от исходного текста программы;

§ интерпретацию, при которой трансляция и выполнение программы происходит покомандно.

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

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

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

На самом деле сложно подвести под одну схему имеющееся многообразие языков программирования,

Компиляция — преобразование объектов (данных и операций над ними) с входного языка в объекты на другом языке для всей программы в целом с последующим выполнением полученной программы в виде отдельного шага.

Интерпретация — анализ отдельного объекта на входном языке с одновременным выполнением (интерпретацией).

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

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

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

· процессор и память любого компьютера (а в широком смысле и вся программная среда, создаваемая операционной системой, является интерпретатором машинного кода);

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

31)Паради́гмы программи́рования

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

Важно отметить, что парадигма программирования не определяется однозначно языком программирования; практически все современные языки программирования в той или иной мере допускают использование различных парадигм. Так на языке Си, который не является объектно-ориентированным, можно работать в соответствии с принципами объектно-ориентированного программирования, хотя это и сопряжено с определёнными сложностями; функциональное программирование можно применять при работе на любом императивном языке, в котором имеются функции (для этого достаточно не применять присваивание), и т.д. Своим современным значением в научно-технической области термин «парадигма» обязан, по-видимому, Томасу Куну

32)Объектно-ориентированное программирование. Логическое и функциональное программировании.

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

ООП возникло в результате развития идеологии процедурного программирования, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны

Основные понятия

Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция — это набор всех таких характеристик.

Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя.

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

Полиморфизм— это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

Прототип — это объект-образец, по образу и подобию которого создаются другие объекты. Объекты-копии могут сохранять связь с родительским объектом, автоматически наследуя изменения в прототипе; эта особенность определяется в рамках конкретного языка.

Читайте также:  Количественная и качественная оценка результатов обучения

Целью логического и функционального программирования является вывод решений и они тесно связаны с задачами, решаемыми в искусственном интеллекте и экспертных системах (ЭС). На начальном этапе развития систем искусственного интеллекта (СИИ) и ЭС даже выделился целый класс специализированных языков программирования: языки логического и функционального программирования.

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

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

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

Наиболее известными языками функционального программирования являются ЛИСП и РЕФАЛ, а логического — Пролог. Однако, с развитием языков программирования (в частности, с появлением объектно-ориентированных языков) и баз данных область их применения сузилась. Так ЛИСП используется как оболочка Автокад, а РЕФАЛ как средство для построения метаязыков и метакомпиляторов.

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

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

Виды программирования

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

Процедурное (императивное) программирование является отражением архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 1940-х годах. Теоретической моделью процедурного программирования служит алгоритмическая система под названием Машина Тьюринга.

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

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

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

Источник

Машинные команды. Загрузочный модуль

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

Регистры.

Все процессоры имеют как минимум 6 системных регистров: для адреса текущей команды (счетчик команд), регистр флагов, где хранятся коды арифметических условий и, кроме того, много другой служебной информации (слово состояния процессора), три буферных регистр АЛУ и буферный регистр, в котором хранится текущая команда.

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

  1. каждый код операции работает только со своим регистром
  2. ортогональная система – все команды могут работать с любыми регистрами
Читайте также:  Что обозначает показатель финансового результата

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

Адреса памяти.

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

В современных компьютерах единицей адресации оперативной памяти является байт.

Операнды команд могут быть как регистрами, так и ячейками памяти. Некоторые архитектуры допускают произвольное сочетание регистров и ячеек в одной команде (PDP-11, VAX). В других архитектурах, например, х86 и МС680х0 только один операнд может размещаться в памяти, а второй всегда обязан быть регистром. У RISC-процессоров арифметические операции разрешены только над регистрами, а для обращений к памяти выделены специальные команды.

В зависимости от подхода, применяемого в конкретной системе команд , архитектуры подразделяются на память-память, регистр-память, регистр-регистр (SS, RR, RS).

Источник



Большая Энциклопедия Нефти и Газа

Загрузочный модуль [ load module ] — программный модуль в относительных адресах, полученный из объектного модуля ( см. далее) при редактировании связей в едином, принятом в данной операционной системе формате.  [1]

Загрузочный модуль заносится в оперативную память макетирующей ( прототипной) системы, и производится отладка программы на прототипной системе; после ее завершения производится программирование ПЗУ.  [2]

Загрузочный модуль , сформированный после этапа редактирования связей, является готовым к выполнению на ЭВМ, но программа редактора связей сначала обязательно помещает его в библиотеку загрузочных модулей, и только оттуда с помощью специальной программы выборки он загружается в ОП ЭВМ. Данная схема перемещения загрузочного модуля может быть нарушена, если вместо программы редактора связей использовать загрузчик — системную обрабатывающую программу, объединяющую выполнение основных функций редактора связей и программы выборки в одном пункте задания. Загрузчик применяется в тех случаях, когда программист не считает необходимым сохранение на будущее сформированного загрузочного модуля в библиотеке, а намерен сразу же за формированием модуля осуществить и его выполнение. Такая схема решения задачи ( рис. 4.3) осуществляется быстрее.  [4]

Загрузочный модуль [ load module ] — программный модуль в относительных адресах, полученный из объектного модуля ( см. далее) при редактировании связей в едином, принятом в данной операционной системе формате.  [5]

Загрузочный модуль помещается редактором в библиотеку. Записи загрузочного модуля в отличие от записей объектного модуля переменной длины не имеют более плотной упаковки. С помощью объединенных в ходе редактирования справочников внешних имен и перемещений осуществляется выборка загрузочного модуля из библиотеки и настройки перемещаемых адресных констант ( адресов внешних ссылок) по месту загрузки в оперативную память. Загрузочный модуль может вновь участвовать в редактировании с другими объектными модулями.  [6]

Загрузочный модуль содержит ссылку на несуществующий набор данных. Напечатано dd — имя ххх или ссылочный номер набора данных ууу.  [7]

Загрузочный модуль , как правило, также состоит из двух частей — тела и паспорта, причем паспорт, в котором содержится дополнительная информация о модуле, используемая при его загрузке, также представляется в форме, удобной для загрузчика.  [8]

Загрузочный модуль помещается редактором в библиотеку. Записи загрузочного модуля в отличие от записей объектного модуля переменной длины не имеют более плотной упаковки. С помощью объединенных в ходе редактирования справочников внешних имен и перемещений осуществляется выборка загрузочного модуля из библиотеки и настройки перемещаемых адресных констант ( адресов внешних ссылок) по месту загрузки в оперативную память. Загрузочный модуль может вновь участвовать в редактировании с другими объектными модулями.  [10]

Загрузочные модули , получаемые в результате работы системной программы Компоновщик, загружаются системным загрузчиком через перфоленточное устройство ввода-вывода.  [11]

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

Загрузочный модуль , который претерпевает изменения ( искажается) в процессе использования, что вызывает необходимость загружать его в основную память каждый раз, когда он требуется.  [13]

Загрузочный модуль , не изменяющий логики своей работы при прерывании с последующей загрузкой по тому же адресу памяти и передачей управления в точку прерывания.  [14]

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

Источник