Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
инфа.docx
Скачиваний:
75
Добавлен:
14.03.2016
Размер:
389.3 Кб
Скачать

1

Язык высокого програмирования “с”

1.1.1

Центра́льный проце́ссор(ЦП; такжецентра́льное проце́ссорное устро́йствоЦПУ;англ.central processing unit,CPU, дословно —центральное обрабатывающее устройство) —электронный блоклибоинтегральная схема(микропроцессор), исполняющаямашинные инструкции(код программ), главная частьаппаратного обеспечениякомпьютераилипрограммируемого логического контроллера. Иногда называютмикропроцессоромили простопроцессором.

1.1.2

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

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

    • Регистр флагов (FLAGS) — регистр процессора, биты (флаги) которого отражают состояние процессора и свойства результатов предыдущих операций.

1.1.3

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

В случае обозначения цифрами «0» и «1», возможные состояния двоичного разряда наделяются качественным соотношением «1» > «0» и количественными значениями чисел«0» и «1».

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

1.2.1

Компиля́ция—трансляция программы, составленной на исходномязыке высокого уровня[источник не указан 102 дня], в эквивалентную программу нанизкоуровневом языке[источник не указан 102 дня], близкоммашинному коду(абсолютный код,объектный модуль, иногда наязык ассемблера)[2][3][4]. Входной информацией для компилятора (исходный код) является описание алгоритма или программа наобъектно-ориентированном языке[источник не указан 102 дня], а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код)[5].

1.2.2

Ассе́мблер(отангл.assembler— сборщик) — транслятор исходного текста программы, написанной наязыке ассемблера, в программу намашинном языке.

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

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

1.3.1

Препроцессор С/С++ (англ. pre processor, предобработчик) — программа, подготавливающая код программы на языке C/C++ к компиляции.

Препроцессором выполняются следующие действия:

  • замена соответствующих диграфов и триграфов на эквивалентные символы «#» и «\»;

  • удаление экранированных символов перевода строки;

  • замена строчных и блочных комментариев пустыми строками (с удалением окружающих пробелов и символов табуляции);

  • вставка (включение) содержимого произвольного файла (#include);

  • макроподстановки (#define);

  • условная компиляция (#if, #ifdef, #elif, #else, #endif);

  • вывод сообщений (#warning, #error).

Условная компиляция позволяет выбрать код для компиляции в зависимости от:

  • модели процессора (платформы);

  • разрядности адресов;

  • размерности типов;

  • наличия/отсутствия поддержки расширений языка;

  • наличия/отсутствия библиотек и/или функций;

  • особенностей поведения конкретных функций;

  • и другого.

Этапы работы препроцессора:

  • лексический анализ кода C/C++ (синтаксический анализ не выполняется);

  • обработка директив;

  • выполнение подстановок:

    • диграфов и триграфов;

    • комментариев;

    • директив;

    • лексем, заданных директивами.

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

1.3.2

□ S-компилятор (англ. S-compiler) –

программа s-машины для преобразования исходного кода программ, написанных на одном из языков программирования высокого уровня (Паскаль, Си, Фортран или др.), в эквивалентный набор инструкций на языке низкого уровня, называемый объектным кодом [как правило, предназначенным для дальнейшего преобразования специальной программой (компоновщиком) в исполняемый код, рассчитанный на конкретную вычислительную платформу].

1.3.3

Компоновщик (также реда́ктор свя́зей, линкер — от англ. link editor, linker) — программа, которая производит компоновку — принимает на вход один или несколько объектных модулей и собирает по ним исполнимый модуль.

Для связывания модулей, компоновщик использует таблицы имён, созданные компилятором в каждом из объектных модулей. Такие имена могут быть двух типов:

  • Определённые или экспортируемые имена — функции и переменные, определённые в данном модуле и предоставляемые для использования другим модулям

  • Неопределённые или импортируемые имена — функции и переменные, на которые ссылается модуль, но не определяет их внутри себя

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

№2