рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Процесс исполнения программного кода

Процесс исполнения программного кода - раздел Программирование, Лекция 1 Понятие программы и языка программирования Процесс Исполнения Программного Кода В Общих Чертах Представлен На Рис.1.8. Д...

Процесс исполнения программного кода в общих чертах представлен на Рис.1.8. Действующими лицами этого процесса являются:

· программный код – последовательность команд,размещенная в сегменте кода (CS), на начало которого ссылается одноименный регистр процессора;

· каждая команда имеет в сегменте свой относительный адрес (от начала сегмента), регистр процессора IP (Instruction Pointer) содержит адрес очередной выполняемой команды. В программировании на языках высокого уровня с IP ассоциируется очень важное понятие – текущая точка выполнения программы;

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

o команды перемещения и обработки данных выполняют перенос данных между ячейками памяти и регистрами данных процессора, а также все действия по их обработке (mov, add, sub);

o команды проверки состояний (условий) проверяют результат выполнения операций, состояния регистров процессора, устройств ввода-вывода и т.п. (test);

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

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

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

· в нашем примере большинство команд переноса и обработки данных являются двухадресными – результат операции совпадает с первым операндом (команду сложения add ax, 454следует понимать как ax=ax+b);

· в нашем примере используется непосредственная адресация для констант (их значение находится в самой программе, add ax, #10) и прямая адресациядля ячеек памяти (в команде содержится их адрес, add ax, 454);

· в командах безусловного (jmp) и условного (jmi – «переход, если меньше нуля») должен быть определен адрес следующей команды: в нашем примере он задан в относительной форме – в виде смещения (расстояния) от следующей команды до той, куда производится переход.

Рис. 1.8. Кодовое представление программы

 

Выполнение программы происходит, в общих чертах, таким образом:

· процессор, используя регистры CS:IPвыбирает из памяти очередную команду и дешифрует ее. После этого IPувеличивается и ссылается на следующую команду (в зависимости от длины текущей, например, IP=IP+3);

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

· если это команда проверки условия, то проверяется указанный операнд, и устанавливаются признаки выполнения различных условий (равно 0, не равно 0, больше 0 и т.п.);

· если в команде условного перехода проверяемое условие выполняется, то программа «переходит» по адресу, содержащемуся в команде. В нашем примере это смещение из команды просто добавляется к IP (IP=IP+<смещение>). Иначе ничего не происходит и выбирается следующая команда.

 

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

 

Структура текстового файла программы

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

В строгой интерпретации, в C/C++ физическим модулем является отдельный сегмент компиляции, т. е. объектный файл. Физическому модулю соответствует файл с исходным текстом C/C++, к которому подключены необходимые заголовочные файлы, образующие интерфейс между модулями.Поэтому часто (с некоторой долей условности) модулем называют также файл с исходным текстом. Язык С и первые реализации языка С++ не предоставляли других механизмов реализации модульности, поэтому физический модуль являлся одновременно и логическим модулем.

 

Пример структуры текстового файла программы, включающей функции main(), f1() и f2():

//имя файла

//директивы препроцессора

#include <стандартный файл> //подключение стандартных заголовочных файлов

#include ”файл пользователя” //подключение заголовочных файлов пользователя

//определение глобальных переменных

//прототипы функций

void f1(); // прототип функции f1

int f2 (int, char); //прототип функции f2

 

//определение функции main()

int main () { //заголовок функции

//тело функции (операторы)

// операторы, содержащие вызов функций f1 и f2, например: f1();

// например: cout << f2(4, ‘a’) << endl; выведет то, что вернет вызов функции, т.е. выражение
return 0; // завершает тело функции с заголовком int main ()

}

//определение функции f1()

void f1() { //заголовок функции

//тело функции

return; // завершает тело функции с заголовком void f1()

}

//определение функции f2()

int f2 (int k, char c) { //заголовок функции

//тело функции f2

return выражение; // завершает тело функции с заголовком int f1(int k, char c)!!!

}

 

Если функция main() получает аргументы, то она определяется так:

int main (int argc, char *argv[]) //илиint main(int argc, char **argv)
{

//тело функции

return 0;
}
где: int argc – число слов, переданное в программу при ее запуске,
char *argv[ ] – массив из argc строк;
аргумент argv[0] является именем запускаемого на выполнение файла;
argv[1] – первое переданное слово;
argv[2] – второе переданное слово ….. и т.д.

 

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

 

Имена функций – это глобальные имена, видимые по умолчанию из всех файлов одного проекта. Однако прототип функции действует только в пределах одного файла. Из-за этого, в частности, приходиться помещать во все совместно компилируемые файлы директивы препроцессора, связанные с подключением .h-файлов, содержащих прототипы библиотечных функций. Как мы видели, прототипы функций помещаются в заголовочный файл, подключаемый директивой #include к тексту файла программы.

Структура программы из двух текстовых файлов

Рассмотрим модель программы из двух текстовых файлов (Рис.1.9). Линии 1-3 указывают область действия глобальных переменных (ниже точки определения): массива array, переменных ext_ch и ext_pp. В пределах области определения их можно использовать во всех функциях без дополнительного объявления как extern(линия 1 для массива array; линия 2 для переменной ext_ch; линия 3 для переменной ext_pp). Чтобы использовать переменные ext_ch и ext_pp в функции main(), т.е. выше точки определения, их надо объявить как extern (внешние) (например, линия 6 для переменной ext_pp).

Во всех функциях, за исключением function3() из файла File2.cpp , описана внутренняя переменная a, которой соответствует своя память, доступ к которой возможен только из пределов функции, но не из других функций.

– Конец работы –

Эта тема принадлежит разделу:

Лекция 1 Понятие программы и языка программирования

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

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

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Лекция 1
Введение в С++ Искать суть бытия – пустой каприз...Здесь все правы: где, кто и что нароет...Ведь жизнь обычно тратится на жизнь...,Но на какую?.. Вот, что беспокоит.

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

Жизненный цикл программного средства
Комплексы программ создаются, эксплуатируются и развиваются во времени. Жизненный цикл программного средства (ПС) включает в себя все этапы развития – от возникновения потребности в программе опред

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

Вычисление значения функции в заданной точке
    Представленные варианты программы используют разные средства ввода-вывода:   //proba_2_1.cpp #include <iostream> #inc

Proba_3.cpp
#include <iostream> #include <conio.h> using namespace std; //директива есть!!!, std:: перед cout далее отсутствует int main() { int x; //вв

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

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

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

С– подключение к файлу main.cppстандартного заголовочного файлаstdafx.h.
D – определение глобальных переменных, доступных во всех файлах программы при объявлении их в этих файлах как extern.   В б

K – подключение к файлу bblsort.cpp стандартного заголовочного файлаstdafx.h.
L – описание глобального массива строк Line, спецификатор extern указывает на то, что определение массива сделано в другом месте (в данном случае в файлеmain.cpp).

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги