- •1.1. Форматный ввод/вывод
- •1.2. Нефайловая работа с терминалом
- •1.3. Управление распределением динамической памяти
- •1.4. Работа со строками и символами
- •1.5. Средства отладки
- •5. Язык си. Руководство оператора.
- •5.1. Стадии подготовки программы
- •5.2. Проблемы промежуточных файлов
- •5.3. Эмуляция eis
- •5.5. Инициализация fpu
- •5.6. Форматный вывод чисел с плавающей запятой
- •5.7. Оптимизация
- •5.8. Компоновка
- •5.9. Создание автономных программ
- •5.10. Сообщения оператору
- •6.1. Ввод и обработка командной строки
- •6.2 Управление стартовыми действиями
- •7. Пакет работы с терминалом
- •7.1. Обновление экрана
- •7.2. Запуск
- •7.3. Вывод
- •7.4. Ввод
- •7.5. Завершение работы
- •7.6. Оптимизация движения курсора
- •9. Краткое описание компилятора си фирмы dec.
- •10. Перечень ошибок
5.2. Проблемы промежуточных файлов
Данный программный комплекс использует промежуточные файлы для Pередачи информации между стадиями и между проходами стадии компилятора. Для более рационального использования дискового пространства предприняты следующие меры:
- компилятор одновременно открывает для вывода только один файл (промежуточный или выходной);
- может быть указано устройство для размещения промежуточных файлов путем назначения логических имен "WF:" или "TMP:"
(в таблице '-' означает, что имя неопределено, '+' - определено,
'X' - безразлично).
логические имена |
устройство для врем. файлов |
|||
TMP: |
WF: |
|||
|
|
|
|
DK: |
|
|
|
|
WF: |
|
|
X |
TMP: |
Два логических имени, выполняющих одинаковые функции, введены для соответствия соглашениям на имя устройства для временных файлов как ОС UNIX (лог. имя "TMP:"), так и ОС RT11 (лог. имя "WF:"). Возможно явное указание длины пространства, которое будет резервироваться при открытии всех промежуточных и выходного файлов: длина пространства, резервируемого при открытии промежуточных файлов, может определяться явным указанием длины в спецификации входного файла и при помощи ключа '-Е'; длина пространства, резервируемого для выходного файла, может дополнительно регулироваться явным указанием длины выходного файла. Если нет ни явного указания длины в спецификации входного файла, ни ключа '-Е', то все промежуточные файлы открываются без указания длины. Если есть явное указание длины входного файла, то эта длина используется при открытии всех промежуточных файлов. Если явного указания длины в спецификации входного файла нет и присутствует ключ '-Е', то для открытия всех промежуточных файлов используется длина [-1] (т.е. резервируется максимальное возможное пространство). При наличии явного указания длины в спецификации входного файла ключ -Е игнорируется. Если спецификация выходного файла отсутствует или в спецификации выходного файла отсутствует длина, то при открытии выходного файла используется та же длина, что и при открытии промежуточных файлов, в противном случае используется указанная длина. Обычно промежуточные файлы стираются как при успешном завершении, так и при обнаружении ошибок. Исключение составляет ассемблер, который при обнаружении ошибок оставляет свои входной и выходной файлы. Ключом 'Н' можно запретить стирание промежуточных файлов. Их типы следующие:
.TMP - выход стадии препроцессора (CPP).
.ТМ1 - выход первого прохода стадии компилятора (C0).
.S - выход второго прохода стадии компилятора и стадии оптимизатора (C1 и C2).
5.3. Эмуляция eis
Данный компилятор генерирует прямой (INLINE) код с инструкциями EIS. для выполнения программ, полученных при помощи этого компилятора на ЭВМ, не имеющего аппаратного EIS (например, на ЭВМ "Электроника НЦ80-01Д"), необходима программная эмуляция инструкций ЕИС. Эмулятор EIS может быть включен при компоновке (при использовании головного модуля SPNHD, а не SPEIS).
Эмулятор EIS эмулирует команды "MUL", "DIV", "ASH", "ASHC". Размер эмулятора около 3-х блоков (1,5 Кб). Эмулятор выполняет (на ЭВМ "Электроника НЦ-80") команду "MUL" примерно 1.2 мс против примерно 30 мкс для СМ-4, т.е. примерно в 40 раз медленнее, и команду "DIV" примерно 4,2 мс против 30 мкс, т.е примерно в 140 раз медленнее. Компилятор поставляется с включенным эмулятором EIS.
5.4. ВЫЧИСЛЕНИЯ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ
Компилятор генерирует прямой (INLINE) код с инструкциями FPU ("Floating Point Unit"), что позволяет получить высокую скорость выполнения программ на ЭВМ, имеющих соответствующее аппаратное обеспечение. Для выполнения программ, полученных при помощи этого компилятора и использующих вычисления с ПЗ на ЭВМ, не имеющих аппаратного FPU, необходима програмная эмуляция инструкций FPU.
Будет ли включен эмулятор FPU, определяется наличием операций с ПЗ в транслируемой программе и ключами командной строки:
Если присутствует ключ '-F', то эмулятор FPU безусловно включается. Если присутствует ключ '-J', то эмулятор FPU безусловно не включается. При отсутствии ключей 'F' и 'J' эмулятор включается только при наличии в компилируемой программе операций с ПЗ.
Размер эмулятора около 6 блоков (3 Кбайт). Скорость вычислений на СМ-4 (с эмулятором, в РАФОС/TS (TSX-PLUS)) - примерно 100 делений с двойной точностью в секунду, причем на системную обработку (прерываний) тратится примерно 10% времени, и примерно 90% собственно на работу эмулятора. Вычисления с эмулятором выполняются примерно в 8 раз быстрее, чем в UNIX V7 (из-за малой эффективности системной обработки ОС UNIX), и примерно в 3 раза медленнее, чем выполняет подобные вычисления FORTRAN-IV с FIS на СМ-4 в ОС РАФОС/TS. Эмулятор не использует и не эмулирует команд FIS и EIS. Включение эмулятора происходит при компоновке и управляется наличием глобальной ссылки "$$fpem", которая вставляется в программу на стадии компиляции (C1). Компилятор использует вычисления с ПЗ и поставляется с включенным FPU.