Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЯЗЫК СИ_РУКОВОДСТВО ПРОГРАММИСТА.doc
Скачиваний:
12
Добавлен:
18.08.2019
Размер:
438.27 Кб
Скачать

5. Язык си. Руководство оператора.

Компилятор языка "СИ" (используемый компилятором ассемблер АС мы считаем входящим в компилятор) может функционировать под управлением всех мониторов ОС RT11. Для работы с программным комплексом на эвм, работающей под управлением одного из мониторов ОС RT11, необходимо не менее 41 кбайт оперативной памяти и около 610 блоков дискового пространства для размещения загрузочных файлов компилятора, стандартных файлов описаний и обьектных файлов библиотек (см. приложение 3). Необходимо отметить, что программы, полученные при помощи данного программного комплекса, могут выполняться под управлением любого из мониторов ОС RT11, а при использовании библиотеки автономной поддержки и автономно, на ЭВМ без операционной системы.

5.1. Стадии подготовки программы

Компиляция, компоновка и запуск программы (считается, что текст пограммы уже подготовлен). Компиляция начинается с вызова компилятора (CC.SAV) и передачи ему командной строки, описывающей входной файл, и, возможно, выходной файл и ключи, уточняющие действия, требуемые от компилятора. Компилятор в процессе работы создает обьектные файлы, которые перед выполнением должны быть скомпонованы с библиотеками, и, возможно, другими обьектными файлами. Более строго так: компилятор создает файлы на ассемблере (язык данного ассемблера отличается от MACRO-11 и похож на язык ассемблера ОС "UNIX"). Ассемблер (AS.SAV) обрабатывает эти файлы и создает обьектные файлы в формате ОС RT11. Ассемблер запускается после компилятора автоматически (если в командной строке явно не указано обратное). Компоновка выполняется системной программой-компоновщиком.

После компоновки программа может быть запущена командами "RUN" или "R". Запущенная программа ожидает (если это явно не отменено) командную строку,после ввода которой исполняющая система эмулирует стартовые действия интерпретатора "SHELL" ОС UNIX, включая перенаправление стандартного ввода/вывода (см. ниже).

Компилятор запускается командой

RUN DEV:CC

Перед запуском компилятора необходимо присвоить логическое имя "C:" устройству, на котором размещен ассемблер (AS.SAV) и стандартные файлы описаний (файлы с расширением ".H", после запуска компилятор выводит подсказку "# " и ожидает ввода командной строки.

Командная строка должна иметь вид

[-CEFJKLMNPRSTXZ] [-IDEV] [-DSYM[=VAL]] [-USYM] [-O OUTFILE] INFILE

,где квадратные скобки ограничивают, как обычно, необязательные аргументы. иначе говоря, командная строка состоит из: необязательных ключей без значений; строчке ключей должен предшествовать без пробела символ '-'. может быть несколько строчек ключей. Необязательных ключей со значениями. Значение ключа (строчка символов) должно следовать за ключом без пробела. Необязательного ключа определения выходного файла ('O') и спецификации выходного файла (в следующем аргументе). Обязательного имени входного файла. Аргументы в командной строке разделяются пробелами или табуляциями, порядок элементов в командной строке некритичен. Ключи со значениями и ключ 'O' могут входить в общую строчку ключей (ключи со значениями

- только последними). Имя входного файла (INFILE) ожидается в формате CSI, тип по умолчанию .C (или .S при одновременном наличии

ключей 'M' и 'C', см. ниже). В имени входного файла может быть указана длина. Эта длина используется при открытии промежуточных и выходного файлов, см. "проблемы промежуточных файлов". При задании в командной строке только имени входного файла при трансляции будут выполнены стадии препроцессора (CPP), компилятора (C0, C1) и ассемблера (AS). Выходной файл будет создан на устройстве "DK:" с именем входного файла и типом ".OBJ".

Примеры командных строк:

MYPROG - выполнить трансляцию файла MYPROG.C в файл MYPROG.OBJ.

-LXTO RK3:BBB

- Выполнить трансляцию файла DK:BBB.C в файл RK3:BBB.OBJ с оптимизацией ('X'), выдачей статистики оптимизатора ('T') и сообщениями об окончании проходов ('L').

-LX BBB -O RK3:-T то же, что и в пердыдущем примере, но с другим расположением ключей - иллюстрирует возможности расположения ключей в командной строке. при помощи ключей можно уточнить действия, требуемые при трансляции:

C - подавляет стадию компилятора (остаются стадии препроцессора и ассемблера).

E - если явно (в имени входного файла) не была указана длина, то для промежуточных файлов (и для выходного, если длина выходного файла явно не указана) используется длина "[-1]". См. "Проблемы промежуточных файлов".

F - приводит к включению (при компоновке) в загрузочный модуль эмулятора команд FPU. См. "Эмуляция FPU".

J - подавляет включение эмулятора FPU в загрузочный модуль.

K - подавляет инициализацию FPU.

L - включает печать сообщений об окончании каждой стадии компиляции. сообщения имеют вид "XX COMPLETE", где XX - имя стадии:

CPP - стадия препроцессора

C0 - первый проход стадии компилятора

C1 - второй проход стадии компилятора

C2 - стадия оптимизатора

AS - стадия ассемблера

M - подавляет стадию препроцессора.

N - запрещает стирание промежуточных файлов.

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

R - разрешает рекурсию в препроцессоре.

S - подавляет стадию ассемблера.

T - включает выдачу статистики оптимизатора (C2). Имеет смысл только совместно с ключом '-X'. См. ниже.

X - включает стадию оптимизатора (C2). См. "Оптимизация".

Z - подавляет включение функций форматного вывода чисел с плавающей запятой в загрузочный модуль при компоновке IDEV - включает устройство "DEV:" в число устройств, на которых препроцессор производит поиск файлов, указанных в качестве аргумента операто-

ра "#include". Имя устроиства не должно содержать ':', например

"-IRK1". При поиске файлов, указанных в "#include", последовательно

просматривает устройства по следующему списку: #include "file" с уст­ройства SR:, откуда вводится текущий входной файл. Затем - SR:=DEV: #include <file> с устройства SR:=C:.

DSYM DSYM=VAL - включает символ "SYM" в число определенных (по "#define") в препроцессоре символов; символ получает значение (текстовое) VAL. Если конструкция "=VAL" отсутствует, то 1. USYM - отменяет в препроцессоре определение предопределенного символа "SYM".

В препроцессоре описываемого компилятора предопределены два символа: rt11 и pdp11 как 1. Если один и тот же символ задан в ключах D и U одновременно, то символ будет неопределен. O OUTFILE - позволяет явно задать имя выходного файла. По умолчанию DK: имя входного и тип в зависимости от ключей: '+' обозначает присутствие ключа, '-'

- отсутствие, 'x' - безразлично:

ключи

тип

---+ вых.

S ! файла

M

C

S

X

X

.OBJ

X

.S

.I

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