Пятница, 29.03.2024, 11:38

..



Главная Регистрация Вход
Приветствую Вас, Гость · Браузер: « v»
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Всё об «Электроника БК0010(-01), БК0011(М)»! » Языки программирования » Паскаль » «Pascal.MV» » «Pascal.MV v1.01 - Руководство программиста» [08.06.94] (Автор: MV corp.)
«Pascal.MV v1.01 - Руководство программиста» [08.06.94]
-=RUS=-Дата: Воскресенье, 30.11.2014, 01:46 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 352
Репутация: 1
Статус: Offline
(Руководство 1.doc)

    ███████┐  ███┐   █████┐ ██┐  ██┐  ███┐    █████┐██┐
    ██┼┴┴██┤ ██┼██┐ ██┼┴┴██┐██┤ ██┼┘ ██┼██┐  ██┼┴██┤██┤
    ██┤  ██┤██┼┘└██┐██┤  └┴┘█████┼┘ ██┼┘└██┐ ██┤ ██┤██┤
    ██┤  ██┤███████┤██┤     ██┼┴██┐ ███████┤ ██┤ ██┤██████┐
    ██┤  ██┤██┼  ██┤██┤  ██┐██┤  ██┐██┼┴┴██┤ ██┤ ██┤██┼┴┴██┐
    ██┤  ██┤██┤  ██┤└█████┼┘██┤  ██┤██┤  ██┤██┼┘ ██┤██████┼┘
    └┴┘  └┴┘└┴┘  └┴┘ └┴┴┴┴┘ └┴┘  └┴┘└┴┘  └┴┘└┴┘  └┴┘└┴┴┴┴┴┘

                    РУКОВОДСТВО ПРОГРАММИСТА

                          1. АННОТАЦИЯ.
                          ¯¯¯¯¯¯¯¯¯¯¯¯¯
   В данном документе содержится  общая информация,  необходимая
программисту для работы  с языком ПАСКАЛЬ в операционной системе
MKDOS v2.10.

                           СОДЕРЖАНИЕ
                           ¯¯¯¯¯¯¯¯¯¯
   1.     АННОТАЦИЯ   .......................................
   2.     НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ....................
   3.     СОЗДАНИЕ ИСХОДНОГО ФАЙЛА НА ПАСКАЛЕ................
   4.     ТРАНСЛЯЦИЯ ПРОГРАММЫ НА ЯЗЫКЕ ПАСКАЛЬ..............
   4.1.   КЛЮЧ "D"...........................................
   4.2.   КЛЮЧ "E"...........................................
   4.3.   КЛЮЧ "F"...........................................
   4.4.   КЛЮЧ "L"...........................................
   4.5.   КЛЮЧ "N"...........................................
   4.6.   КЛЮЧ "S"...........................................
   4.7.   ИСПОЛЬЗОВАНИЕ КЛЮЧЕЙ В ТЕКСТЕ ПРОГРАММЫ............
   4.8.   КЛЮЧ "A"...........................................
   4.9.   КЛЮЧ "T"...........................................
   4.10.  КЛЮЧ "C"...........................................
   4.11.  ЛИСТИНГ ПРОГРАММЫ..................................
   4.12.  ДИАГНОСТИКА ОШИБОК ТРАНСЛЯЦИИ......................
   5.     ТРАНСЛЯЦИЯ ПРОГРАММЫ МАКРОАССЕМБЛЕРОМ..............
   6.     КОМПОНОВКА ПРОГРАММЫ НА ЯЗЫКЕ ПАСКАЛЬ..............
   7.     ЗАПУСК И ВЫПОЛНЕНИЕ ПРОГРАММЫ......................
   8.     СООБЩЕНИЯ..........................................
   9.     ТРАНСЛЯЦИЯ ВНЕШНИХ ПРОЦЕДУР........................
   10.    ОСОБЕННОСТИ ВЫПОЛНЕНИЯ ПРОГРАММЫ НА ЯЗЫКЕ ПАСКАЛЬ..

               2. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ.
               ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Система программирования  "PASCAL.MV"  адаптирована  с  языка
ПАСКАЛЬ/ФОДОС   для   расширения  класса  задач,   решаемых   на
БК0010(-01).  Это связано с тем, что язык ПАСКАЛЬ удобен как для
выполнения различных  вычислений, так и для обработки нечисловой
информации,  включая  экономические задачи, работу со списками и
т.д.  Допускается возможность ведения библиотек программ, а так-
же использование в программах на ПАСКАЛЕ подпрограмм, написанных
на МАКРОАССЕМБЛЕРЕ.
   Для работы с языком "ПАСКАЛЬ" в  операционной  системе "MKDOS
v2.10" рекомендуется,  чтобы в составе комплекса находилось опе-
ративное запоминающее устройство (память) емкостью не менее 16кБ
слов (фирмы ALTEC). Система ПАСКАЛЬ включает следующие файлы:

   PASCAL.SAV - компилятор с языка ПАСКАЛЬ на МАКРОАССЕМБЛЕР;

   PASAL.OBJ - исполняющая система,  использующая только базовый
               набор инструкций центрального процессора;

   PASCAL.MV - монитор системы PASCAL,  ассемблер системы, текс-
               товый редактор системы, компоновщик системы.

   Создание  и  выполнение программы на языке ПАСКАЛЬ может быть
выполнено с помощью следующих шагов:

   - создание  исходного файла  с  текстом  программы  на  языке
     ПАСКАЛЬ;

   - компиляция программы на язык МАКРОАССЕМБЛЕР;

   - трансляция  и  компоновка  полученного   текста  на  МАКРО-
     АССЕМБЛЕРЕ в объектный или загружаемый код;

   - запуск и выполнение полученной программы.

   Протокол примера  действий,  перечисленных выше,  может иметь
следующий вид:

   ? S160000(ВВОД)
   ? M(ВВОД)
   ИМЯ? PASCAL.MV(ВВОД)

   .SC
   ...             ! создание файла с текстом
   ...             ! программы

   .ST ИМЯ? DEMO.PAS(ВВОД) - запись текста на ПАСКАЛе на текущий
                             дисковод.

   .PA ИМЯ? DEMO.PAS(ВВОД) - загрузка компилятора с устройства A
                             компиляция   исходного   текста  на
                             МАКРОАССЕМБЛЕР.

   .LO ИМЯ? DEMO.MAC(ВВОД) - загрузка ассемблерного текста.

   .CB - трансляция и компоновка ассемблерного текста с библио-
         текой, находящейся но устройстве B.

   .SL ИМЯ? A:DEMO.OBJ(ВВОД) - запись объектного модуля  на  ус-
                               тройство A.

   .SA ИМЯ? DEMO.SAV - запись загрузочного  модуля на устройство
                       в (текущее устройство).

   .MO - выход в монитор БК.

   ? S1000(ВВОД) - запуск программы на исполнение.

   В следующих разделах  документа  приведенные  процедуры будут
описаны более подробно.

             3. СОЗДАНИЕ ИСХОДНОГО ФАЙЛА НА ПАСКАЛЕ.
             ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Исходный файл с текстом программы на языке  ПАСКАЛЬ  является
обычным текстовым файлом в формате редактора MICRO.WS.
   Оператор языка ПАСКАЛЬ может  размещаться на нескольких стро-
ках.  Несколько операторов  могут размещаться  на  одной строке.
Пробелы и знаки табуляции  (TAB)  могут использоваться  в  любом
месте  и  любом количестве  для  улучшения восприятия  алгоритма
программы (её наглядности), а также и для цели выделения блочной
структуры программы. Компилятор с языка ПАСКАЛЬ игнорирует знаки
пробелов и табуляции,  которые используются  для  форматирования
программы.

            4. ТРАНСЛЯЦИЯ ПРОГРАММЫ НА ЯЗЫКЕ ПАСКАЛЬ.
            ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Компилятор  ПАСКАЛЬ  использует  текст программы  в  качестве
входного файла.  Во время работы  компилятор создает файл с тек-
стом  программы  на  языке МАКРОАССЕМБЛЕР (при отсутствии ошибок
компиляции).  Дополнительно  к  этому выходному  файлу создается
файл с листингом,  который может быть выведен также на экран мо-
нитора, например:

   .PA ИМЯ? PROG.PAS/(ВВОД)

приводит  к  трансляции  программы  на  языке  ПАСКАЛЬ  из файла
PROG.PAS и созданию файла PROG.MAC с текстом на МАКРОАССЕМБЛЕРЕ,
файла PROG.LST с листингом и выводу листинга на экран.
   В  командной  строке  компилятора  нельзя явно указывать клю-
чи, управляющие трансляцией.
   Если листинг вообще получать  не нужно,  то следует использо-
вать, например, следующую команду:

   .PA ИМЯ? PROG.PAS(ВВОД)

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

                         4.1. КЛЮЧ "D".
                         ¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Использование данного ключа приводит к включению в транслиру-
емую программу информации для отладчика. Эта информация содержит
имена переменных  и процедур, а также номера операторов.  В дан-
ной версии ПАСКАЛя этот ключ не имеет смысла.

                         4.2. КЛЮЧ "E".
                         ¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Ключ используется для того, чтобы определение процедуры после
трансляции стало внешним.  Процедуры и функции, которые  в  теле
программы описаны как глобальные, должны транслироваться отдель-
но от основной программы и с использованием ключа "E",  т.е. как
внешние.  Первые 6 символов (знаков) имени процедуры или функции
используются для определения в качестве глобального символа точ-
ки входа (метку) для соответствующей подпрограммы.

                         4.3. КЛЮЧ "F".
                         ¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Использование  этого  ключа   позволяет  ускорить  выполнение
действий над операндами типа REAL,  т.е. арифметические операции
над числами в формате  с плавающей запятой.  Оптимизация по ско-
рости выполнения  осуществляется за счёт генерации  компилятором
соответствующих  вызовов  подпрограмм.  В том случае,  если ключ
"F" не используется,то компилятор генерирует машинные инструкции
для работы с плавающей запятой,  а  при выполнении программы ис-
полняющая система осуществляет их эмуляцию. Время, затрачиваемое
на эмуляцию, больше,  чем выполнение инструкций обращения к под-
программам.
   Однако использование  ключа "F" приводит к увеличению размера
программы в оперативной памяти.

                         4.4. КЛЮЧ "L".
                         ¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Данный ключ разрешает полную распечатку листинга текста прог-
раммы на языке  ПАСКАЛЬ.  Он может использоваться в тексте  (см.
ключ "N") для включения в листинг текста программы.

                         4.5. КЛЮЧ "N".
                         ¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Данный ключ  запрещает распечатку  исходного текста программы
(операторов) в файл листинга за исключением строк (и, соответст-
венно, операторов), содержащих ошибки.

                         4.6. КЛЮЧ "S".
                         ¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Этот ключ приводит к включению  в  генерируемый  компилятором
текст на  МАКРОАССЕМБЛЕРЕ  операторов исходного языка в качестве
комментариев. Использование данного ключа облегчает анализ текс-
та программы на МАКРОАССЕМБЛЕРЕ.

          4.7. ИСПОЛЬЗОВАНИЕ КЛЮЧЕЙ В ТЕКСТЕ ПРОГРАММЫ.
          ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Все ключи, рассмотренные выше, используются в тексте програм-
мы.  Это осуществляется использованием  комментариев специально-
го вида.  Первым знаком комментария должен быть  "$".  Следующий
знак должен совпадать с символическим обозначением ключа, напри-
мер,  "(*$S+*)"  приводит к включению в текст на МАКРОАССЕМБЛЕРЕ
исходных операторов в качестве комментариев.
   За мнемоникой ключа может использоваться знак  "+"  или  "-".
Эти знаки предназначены для "включения" действия ключа  (+)  или
"выключения" (-), т.е. отмены его действия.
   Возможно написание нескольких ключей в одной строке через за-
пятую, например:

   (*$S+,F-,T-*)

                         4.8. КЛЮЧ "A".
                         ¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Данный ключ отменяет генерацию  проверок на допустимость зна-
чений индексов при работе с массивами - (*$A-*). Обычно компиля-
тор  генерирует  инструкции, проверяющие выход значений индексов
за допустимые  границы.  Если генерация  проверок запрещена,  то
программа будет  занимать несколько меньше  оперативной памяти и
будет выполняться несколько быстрее.

                         4.9. КЛЮЧ "T".
                         ¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Ключ (*$T-*) запрещает генерацию инструкций,  проверяющих пе-
реполнение стека.  Всякий раз при вызове процедуры стек проверя-
ется на наличие  места для размещения локальных переменных.  От-
каз от использования проверок стека незначительно уменьшает раз-
мер оперативной памяти,  занимаемой программой,  и  убыстряет её
выполнение.

                        4.10. КЛЮЧ "C".
                        ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Специальный вид комментариев позволяет включать в текст прог-
раммы на языке  ПАСКАЛЬ  фрагменты на языке МАКРОАССЕМБЛЕР.  Это
осуществляется ключом  "C",  используемым в начале комментариев.
Компилятор ПАСКАЛЬ анализирует входные строки для МАКРОАССЕМБЛЕ-
РА для определения ссылок  на  соответствующие параметры и пере-
менные. Например, для того, чтобы использовать значение ГЛОБАЛЬ-
НОЙ переменной "ABC",нужно обращаться к ней с помощью "ABC(R5)",
а  для  доступа  к  локальной переменной или параметру процедуры
"XYZ" - использовать запись "XYZ(SP)":

   (*$C
       TST    ABC(R5)        ;переменная ABC # 0 ?
       BNE    10$            ;да
       MOV    XYZ(SP),R0     ;получить значение XYZ В R0
       ADD    #123.,R0       ;прибавить 123 к R0
       MOV    R0,@#100       ;записать R0 по абсолютному
                             ;адресу
  10$: INC    XYZ(SP)        ;увеличить на 1 переменную
                             ; XYZ
   *)

 ПРИМЕЧАНИЕ. По умолчанию во фрагментах на языке  МАКРОАССЕМБЛЕР
 ¯¯¯¯¯¯¯¯¯¯¯ система счисления ДЕСЯТИЧНАЯ, а не ВОСЬМЕРИЧНАЯ.

                    4.11. ЛИСТИНГ ПРОГРАММЫ.
                    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Листинг, создаваемый компилятором ПАСКАЛЬ содержит помимо ис-
ходного текста программы 4 колонки.

            Распечатка листинга имеет следующий вид:
            ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   DBGTST               P  A  S  C  A  L
   PAGE 1
                         MV corp. v1.01
                      Электроника БК0010-01

   LINE  STMT LEVEL  NEST   SOURCE STATEMENT

    1                     PROGRAM DBGTST;
    2
    3                     VAR    A,B:INTEGER;
    4
    5                        PROCEDURE  SUM(C,D,E:INTEGER);
    6
    7                         VAR        I:INTEGER;
    8
    9                            FUNCTION ADD(P,Q:INTEGER)
   10                                            :INTEGER;
   11                            VAR     X,Y:INTEGER;
   12
   13                        BEGIN (* START OF ADD *)
   14     1     3     1       X:=P;
   15     2     3     1       Y:=Q;
   16     3     3     1       IF Y=0 THEN ADD:=X
   17     5     3     2        ELSE ADD:=ADD(0,X)+ADD(Y,0);
   18     6     3     1      END; (* END OF ADD *)
   19
   20                         BEGIN (* START OF SUM *)
   21     1     2     1          I:=ADD(C,D);
   22     2     2     1          I:=ADD(I,E);
   23     3     2     1       END; (* END OF SUM *)
   24
   25                     BEGIN (* START OF MAIN *)
   26     1     1     1       A:=1;
   27     2     1     1       B:=2;
   28     3     1     1       SUM(3,4,5);
   29     4     1     1   END. (* END OF MAIN *)

   Первая колонка содержит номера исходных строк программы.  Эта
колонка в листинге обозначается как "LINE".  Нумерация строк вы-
полняется подряд, начиная с номера 1.
   Вторая колонка, обозначаемая "STMT", содержит локальные номе-
ра операторов  исходной программы  и  используется  при  отладке
программ.  Следует отметить, что один оператор может размещаться
на нескольких  строках.  С другой стороны,  несколько операторов
могут размещаться на одной строке.  Поэтому  в  колонке  номеров
операторов значения могут возрастать более чем на 1 при переходе
от одной строки к другой.
   Третья колонка содержит  номера уровней вложенности процедур.
Эта информация  полезна для анализа  "доступности"  переменных в
тех или иных процедурах, поскольку переменные,  объявленные (оп-
ределенные) на одном уровне, могут быть доступны на том же уров-
не и на уровнях, номера которых выше данного. Основная программа
находится на 1-ом уровне вложенности. Процедуры и функции, опре-
деленные в программе, считаются имеющими уровень 2.  В процедуре
уровня 2 может, например, быть определена функция, которая будет
иметь уже  уровень вложенности 3.  Данная функция  считается ло-
кальной и не может быть доступной из основной программы, т.е. из
уровня 1.
   В третьей колонке отмечается  уровень вложенности блоков опе-
раторов, ограниченных  "BEGIN" и "END". Другими словами операто-
ры типа  "BEGIN"  и  "REPEAT"  приводят к увеличению на 1 номера
уровня вложенности, пока не встретится соответствующий "END" или
"UNTIL".  Таким образом номера уровней вложенности могут исполь-
зоваться  для  анализа программистом общей структуры программы с
точки зрения вложенности блоков.

              4.12. ДИАГНОСТИКА ОШИБОК ТРАНСЛЯЦИИ.
              ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   При обнаружении ошибки в процессе трансляции компилятор отме-
чает ошибочную строку несколькими знаками "*" в левой части лис-
тинга, за которым следует пояснительный текст.  Знаком "^" отме-
чается то место в строке, которое привело к обнаружению ошибки.
   Грубые ошибки, например, в блочной структуре программы, могут
вызвать целый ряд (цепочку) других ошибок. В этом случае исправ-
ление первой ошибки приведет  к  "исчезновению"  всех  остальных
ошибок. Использование ключа "N" при создании листинга приведет к
получению в листинге только строк программы, в которых обнаруже-
ны ошибки.
   Общее число ошибок, обнаруженных во время трансляции распеча-
тывается в конце листинга.  Одновременно выводится  объём опера-
тивной памяти, которая осталась неиспользованной до конца транс-
ляции.  Аналогичная информация  выводится  на  экране системного
терминала.

            ВОЗМОЖНЫ СЛЕДУЮЩИЕ СООБЩЕНИЯ ОБ ОШИБКАХ:
            ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   OVERFLOW.
         - переполнение;

   MISSING END
         - пропущено "END";

   TOO MANY SYMBOLS
         - слишком много переменных и процедур;

   TOO MANY LEVELS
         - слишком много уровней вложенности процедур и функций;

   TOO MANY WARNINGS
         - слишком много предупреждений;

   INPUT LINE TOO LONG
         - длинная входная строка;

   INVALID CHARACTER
         - недопустимый знак встретился на строке;

   8 OR 9 IN OCTAL CONSTANT
         - в восьмеричной константе обнаружились цифры 8 или 9;

   LABELS MUST BE INTEGERS
         - в качестве меток допустимо  использовать только целые
           числа;

   CONSTANT OVERFLOW
         - в  программе  слишком много  констант;  в компиляторе
           не хватает памяти для размещения всех констант;

   MISSING LABEL DEFINITION
         - отсутствует определение метки;

   UNDEFINED FORWARD PROCEDURE OR FUNCTION
         - недопустимо использовать  процедуру или функцию преж-
           де, чем они будут определены;

   BAD PROGRAM NAME
         - недопустимое имя программы;

   IMPROPER SYMBOL
         - недопустимый символ;

   MISSING BEGIN
         - пропущено "BEGIN";

   MISSING '.' AT PROGRAM END
         - в конце программы отсутствует ".";

   ALL VAR DEFINITIONS PRECEED PROCEDURE DEFINTIONS
         - определения всех переменных должно находиться в прог-
           рамме перед определением процедур;

   BAD ORIGIN FOR VARIABLE
         - недопустимое начальное значение для переменной;

   BAD VARIABLE LIST
         - недопустимый список переменных;

   BAD TYPE
         - недопустимое определение типа;

   BAD LABEL
         - неправильная метка;

   BAD FUNCTION NAME
         - недопустимое имя для функции;

   BAD PROCEDURE NAME
         - недопустимое имя для процедуры;

   BAD FUNCTION RESULT TYPE
         - недопустимый тип результата функции;

   FORTRAN PARAM. MUST BE CALL BY REFERENCE
         - фортрановский  параметр  должен  всегда  передаваться
           по ссылке;

   DON'T REPEAT PARAMETER LIST
         - не следует  указывать  список  формальных  параметров
           более одного раза;

   ',' USED INSTEAD OF ';'
         - "," была использована вместо ";";

   MISSING ')' AT END OF PARAM LIST
         - пропущена ")" в конце списка формальных параметров;

   BAD PARAMETER
         - недопустимый формальный параметр;

   BAD SCALAR TYPE
         - недопустимый скалярный тип;

   BAD SUBRANGE
         - недопустимое указание интервала;

   BAD TYPE SPECIFICATION
         - недопустимое определение (указание) типа;

   ARRAY INDEX TYPE ERROR
         - ошибка в задании типа индекса для массива;

   BAD RECORD
         - недопустимая запись;

   BAD FIELD LIST
         - недопустимое определение списка полей;

   FIELD LIST MUST BE IN PARENTHESES
         - список полей должен указываться в скобках;

   BAD VARIANT
         - недопустимый вариант;

   DUPLICATE FIELD NAME
         - повторно используется имя для поля записи;

   BAD CONSTANT
         - недопустимая константа;

   LABEL NOT DECLARED
         - используется неопределенная метка;

   LABEL REDEFINITION
         - переопределение метки недопустимо;

   LABEL DEFINED AT WRONG LEVEL
         - определение метки на неправильном уровне;

  UNDEFINED SYMBOL
         - неопределенный символ;

   MISSING SEMI-COLON
         - пропущена ";";

   INVALID DECLARATION. PROBABLY MISSING END
         - недопустимый оператор; возможно, что пропущено "END";

   INVALID SYMBOL
         - недопустимый символ;

   NOT IMPLEMENTED
         - данная возможность не реализована в компиляторе;

   MISSING LABEL
         - пропущена метка;

   BAD 'EXIT'
         - пропущено "EXIT";

   DUPLICATE CASE LABEL
         - повторно используется метка в операторе "CASE";

   ELSE NOT LAST IN CASE STMT
         - "ELSE" не находится в конце оператора "CASE";

   MISSING END IN CASE STMT
         - пропущено "END" в операторе "CASE";

   BAD CASE LABEL
         - недопустимая метка выбора в операторе "CASE";

   MISSING UNTIL
         - пропущено "UNTIL";

   BAD FOR STATEMENT
         - неправильный формат оператора цикла "FOR";

   BAD WITH STATEMENT
         - недопустимый оператор "WITH";

   WITH IN REG 0
         - для оператора "WITH" используется регистр 0;

   TOO MANY ARGUMENTS
         - слишком много аргументов;

   BAD ARGUMENT
         - недопустимый аргумент;

   TOO FEW ARGUMENTS
         - указано мало аргументов;

   NEW OR DISPOSE ARG NOT POINTER TYPE
         - в процедурах  "NEW" и "DISPOSE"  может использоваться
           только переменная-указатель;

   BAD READ STATEMENT
         - недопустимый оператор "READ";

   BAD WRITE STATEMENT
         - недопустимый оператор "WRITE";

   FORMAT MUST BE INTEGER TYPE
         - для указания параметров формата  может использоваться
           только целочисленные переменные или константы;

   FILE VARIABLE MISSING
         - пропущена переменная файла;

   BAD FILE NAME
         - недопустимое имя файла;

   ILLEGAL ASSIGNMENT
         - недопустимое назначение;

   BAD EXPRESSION
         - ошибка в выражении;

   MISSING ')'
         - пропущена ")";

   MISSING OPERATOR
         - пропущен оператор;

   MISSING OPERAND
         - пропущен операнд;

   STRANGE '[' -- BAD SET OR MISSING ARRAY DEF
         - необъяснимое  появление  "[",  что может быть связано
           с недопустимым  множеством  или  неопределенным  мас-
           сивом;

   UNDEFINED OPERAND -- ASSUMING INTEGER
         - неопределенный  операнд;  компилятор  присваивает ему
           тип "INTEGER";

   FUNCTION ARGUMENT MISSING
         - пропущен аргумент функции;

   FUNCTION ARG MUST BE REAL OR INTEGER
         - аргумент  функции   должен  иметь  тип   "REAL"   или
           "INTEGER";

   ARGUMENT MUST BE INTEGER TYPE
         - аргумент должен иметь тип "INTEGER";

   ARG MUST BE REAL
         - следует использовать аргумент типа "REAL";

   ARG MUST BE INTEGER
         - следует использовать аргумент типа "INTEGER";

   ARG MUST BE NON-REAL SCALAR
         - аргумент  должен  иметь скалярный тип,  не являющийся
           "REAL";

   BAD 'ABS' ARG
         - недопустимый аргумент функции "ABS";

   'ODD' APPLIED TO NON-INTEGER EXPRESSION
         - процедура "ODD" должна  использоваться только с цело-
           численным аргументом (переменной, выражением и т.д.)

   BAD SET ELEMENT
         - недопустимый элемент множества;

   MISSING FIELD VARIABLE
         - пропущено указание поля записи;

   UNDEFINED POINTER BASE TYPE
         - неопределенный  тип,  на который ссылается переменная
           указатель;

   BAD INDEX TYPE
         - недопустимый тип индекса;

   ILLEGAL OPERATOR
         - недопустимый оператор;

   ILLEGAL TYPE OF OPERAND
         - недопустимый тип операнда;

   INCOMPATIBLE ARRAYS
         - несовместимые массивы;

   BAD 'IN' OPERANDS
         - недопустимые операнды для оператора "IN";

   OUT OF FLOATING AC'S
         - для  выполнения  программы  не  хватает аккумуляторов
           процессора  плавающей  запятой  (встретилось  сложное
           выражение);

   OUT OF REGISTERS
         - не  хватает  регистров   для   выполнения   программы
           (встретилась сложная конструкция);

   BOOLEAN EXPRESSION NEEDED
         - в данном месте программы  необходимо использовать ло-
           гическое выражение;

   INCOMPATIBLE TYPE
         - несовместимый тип;

   MUST BE SIMPLE VARIABLE
         - следует использовать простую переменную;

   UNRESOLVED FORWARD TYPE REFERENCE
         - не определён тип из-за ссылок  вперёд на неопределен-
           ные типы данных;

   ARRAY INDEX OUT OF RANGE
         - индекс массива выходит за заданные границы;

   FATAL ERROR
         - фатальная ошибка  компилятора;  возможен аппаратурный
           сбой и ошибка в самом компиляторе;

   TOO MANY ERRORS IN THIS LINE
         - слишком много ошибок в данной строке;

   EXPECTED '.' MISSING. ASSUMED WHERE INDICATED
         - должна присутствовать  ".";  показано подразумеваемое
           положение ".";

   ALL CHARACTERS IGNORED UNTIL  ...
         - все знаки до "..." игнорируются;

   INDEX OUT OF RANGE
         - индекс выходит за допустимые границы.


 
-=RUS=-Дата: Воскресенье, 30.11.2014, 01:47 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 352
Репутация: 1
Статус: Offline
(Руководство 2.doc)

            5. ТРАНСЛЯЦИЯ ПРОГРАММЫ МАКРОАССЕМБЛЕРОМ.
            ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Если листинг программы на макроассемблере необходим, то реко-
мендуется выполнять  трансляцию компилятором  с  языка  ПАСКАЛЬ,
используя ключ  "S",  что приводит к включению в текст на МАКРО-
АССЕМБЛЕРЕ исходных строк на ПАСКАЛЕ в качестве комментариев.

            6. КОМПОНОВКА ПРОГРАММЫ НА ЯЗЫКЕ ПАСКАЛЬ.
            ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   После получения текстового файла  на  ПАСКАЛе  его необходимо
оттранслировать и скомпоновать  с  исполняющей системой  ПАСКАЛЬ
из объектной библиотеки  (PASCAL.OBJ)  для получения программы в
формате загрузки,

 НАПРИМЕР:
 ¯¯¯¯¯¯¯¯¯
   .LO ИМЯ? PROG.MAC(ВВОД)
   .CA

   Библиотека PASCAL.OBJ с исполняющей системой ПАСКАЛЬ содержит
набор модулей, к которым обращается программа, полученная компи-
лятором  ПАСКАЛЯ.  Системный компоновщик  включит в состав прог-
раммы нужные модули из библиотеки и создаст  программу в формате
загрузки.

                7. ЗАПУСК И ВЫПОЛНЕНИЕ ПРОГРАММЫ.
                ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Запуск из монитора БК осуществляется командой

   S1000(ВВОД),

если адрес трансляции не изменялся командой LA.

                         8. СООБЩЕНИЯ.
                         ¯¯¯¯¯¯¯¯¯¯¯¯¯
   В  данном разделе представлены тексты сообщений  об  ошибках,
возникающих при выполнении программы  на  языке ПАСКАЛЬ.  Тексты
сообщений снабжены пояснениями причин ошибок  и,  следовательно,
способами их устранения.

END OF FILE ON DEVICE
          - данная  ошибка  связана с выполнением процедуры READ
            или GET, если в тот момент значение функции EOF было
            TRUE.

I/O CHANNEL NOT OPEN
          - ошибка связана с выполнением операции ввода/вывода с
            каналом, который не был предварительно открыт проце-
            дурами RESET или REWRITE.

NOT ENOUGH AVAILABLE MEMORY
          - сообщение  свидетельствует  о  том, что динамическая
            область памяти исчерпана (как правило при выполнении
            процедуры  NEW);  другая причина данного сообщения -
            недостаток памяти для рекурсивного вызова процедуры.

INTEGER ERROR
          - ошибка связана с выполнением арифметических операций
            с переменными типа  INTEGER; как правило - это пере-
            полнение при умножении или выполнении процедур TRUNC
            или ROUND.

FLOATING POINT ERROR
          - сообщение  об этой ошибке связано с неправильным вы-
            полнением  арифметической  операции  над переменными
            типа REAL в процессе вычислений.

LOG OF NEGATIVE
EXP OVERFLOW
SQRT OF NEGATIVE
          - данные  ошибки  возникают  при передаче неправильных
            параметров в функции языка ПАСКАЛЬ:LOG,EXP или SQRT.

DEVIDE BY ZERO
          - ошибка связана с попыткой выполнить деление на 0.

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

ARRAY BOUND ERROR
          - при  вычислении  выражения или т.п. значение индекса
            приняло недопустимое значение;

TRAP TO 4
          - произошло  прерывание  по вектору 4, которое связано
            с  обращением  к  несуществующей  ячейке  памяти или
            использованием  недопустимого   режима  адресации  в
            инструкции процессора; обычно  эта ошибка появляется
            из-за ошибок в фрагментах, написанных на МАКРОАССЕМ-
            БЛЕРЕ; для БК - нажатие клавиши СТОП.

BAD SUPPORT PACKAGE
RESERVED INSTRUCTION TRAP
MISSING SPECIAL FEATURE
          - ошибка связана с использованием  исполняющей системы
            ПАСКАЛЯ, не соответствующей типу центрального проце-
            ссора, а также применением  инструкций (в фрагментах
            на МАКРОАССЕМБЛЕРЕ), отсутствующих в наборе инструк-
            ций центрального процессора;

SUPPORT CONDITIONALS ERROR
          - ошибка при выполнении логической операции;

NEW OF LENGTH 0
          - ошибка  связана  с выполнением  процедуры  "NEW" при
            создании переменной нулевой длины;

FATAL I/O ERROR
          - произошла неустранимая ошибка ввода/вывода;

TOO MANY FILES OPEN
          - сделана  попытка  открыть  слишком  много файлов для
            ввода/вывода.  В данной версии можно открыть  до  16
            файлов.

                 9. ТРАНСЛЯЦИЯ ВНЕШНИХ ПРОЦЕДУР.
                 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Внешними называются процедуры или функции, которые компилиру-
ются и ассемблируются отдельно  от  основной  программы на языке
ПАСКАЛЬ.  Компоновщик используется  для объединения внешних про-
цедур и основной программы и получения  программы в формате заг-
рузки.  Средства внешних  процедур  позволяют  облегчить процесс
разработки и отладки программного обеспечения,  поскольку внесе-
ние изменений в основную программу не требует повторной компиля-
ции и ассемблирования внешних процедур. Отладка больших программ
существенно упрощается  путём создания  полностью  тестированных
внешних процедур.
   Внешние процедуры и функции создаются аналогично обычным про-
цедурам в языке ПАСКАЛЬ. Использование ключа "E" при трансляции,
приводит к объявлению всех процедур  и  функций на первом уровне
вложенности глобальными.  Первые 6 знаков в имени  процедуры или
функции объявляются  в  качестве глобальной точки входа (метки),
которая будет использована компоновщиком при объединении внешних
модулей  и  основной программы.  Специальная форма  комментариев
(*$E+*)  может также использоваться для определения процедуры  в
качестве внешней. Программа, которая использует внешнюю процеду-
ру, должна включать заголовок этой процедуры, за которым следует
ключевое слово "EXTERNAL". Надо соблюдать осторожность при зада-
нии типов  и  порядка следования параметров процедуры, поскольку
компилятор  лишен возможности проверить эту информацию.
   Компилятор не отводит место для размещения переменных на пер-
вом уровне (глобальных).  Вместо этого компилятор присваивает им
соответствующие адреса с тем, чтобы они совпадали при выполнении
с глобальными  переменными  основной программы.  Вся ответствен-
ность на совпадение описаний  глобальных переменных  во  внешних
процедурах и основной программы возлагается на программиста.
Пользоваться этой возможностью следует очень осторожно, посколь-
ку она может служить источником различных непредсказуемых ошибок
(и результатов).

 ПРИМЕР:
 ¯¯¯¯¯¯¯
   Основная программа (ФАЙЛ MAIN.PAS):

      (* ВНЕШНЯЯ ПРОЦЕДУРА *)

      PROCEDURE EXPROC(X:INTEGER); EXTERNAL;

      BEGIN              (* НАЧАЛО MAIN *)
          I:=1; R:=3.1415926; C:='X';
          EXPROC(5);     (* ВЫЗОВ ВНЕШНЕЙ ПРОЦЕДУРЫ *)
      END.               (* КОНЕЦ MAIN *)

   Внешняя процедура (ФАЙЛ EXTERN.PAS):

      (*$E+*)

      PROCEDURE EXPROC(Y:INTEGER); (* ВНЕШНЯЯ ПРОЦЕДУРА *)

      BEGIN      (* НАЧАЛО ВНЕШНЕЙ ПРОЦЕДУРЫ *)
         WRITELN('I= ',I:2);
         WRITELN('R= ',R);
         WRITELN('C= ',C);
         WRITELN('PROCEDURE ARGUMENT= ',Y:3);
      END;       (* КОНЕЦ ПРОЦЕДУРЫ *)

   Ниже представлена последовательность  действий для выполнения
программы:

   1. Оттранслируйте при помощи команд PA  или  PB обе программы
      MAIN.PAS и EXPROC.PAS.

   2. В текстовом редакторе  удалите из файла EXPROC.MAC команду
      JMP S$TART и метку B$EGIN.

   3. Т.к. компоновщик MICRO.WS интерпретирует все поименованные
      метки как глобальные,  то в файле  EXPROC.MAC  их придется
      изменять вручную, например: L0 на L0$, L1 на L1$... и т.д.
      Переименовать следует также и обращения к ним: JSR PC,L0$,
      JSR PC,L1$...

   4. Оттранслируйте полученные  файлы MAIN.MAC и EXPROC.MAC ко-
      мандой CL и запишите объектные модули на диск.

   5. Скомпонуйте модули MAIN.OBJ и EXPROC.OBJ командой LI.  Те-
      перь нужно  скомпоновать  библиотечные  процедуры командой
      LL, так, как это описано в файле "ВВЕДЕНИЕ.DOC".

     10. ОСОБЕННОСТИ ВЫПОЛНЕНИЯ ПРОГРАММЫ НА ЯЗЫКЕ ПАСКАЛЬ.
     ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Для  того,  чтобы эффективно использовать вставки  на  МАКРО-
АССЕМБЛЕРЕ в программе на языке ПАСКАЛЬ, необходимо понимать не-
которые особенности его реализации. Наиболее важные детали будут
описаны ниже,  хотя рекомендуется  (и это является весьма полез-
ным) заняться изучением текста на ассемблере, который генерирует
компилятор ПАСКАЛЬ.
   При выполнении программа  на языке ПАСКАЛЬ использует две об-
ласти данных:  глобальная  область и стек.  В глобальной области
содержатся все переменные,  определенные на уровне 0, т.е. в на-
чале программы.  Область стека используется для хранения локаль-
ных  переменных  для  процедур и адресов передачи (возврата) уп-
равления. Пятый регистр R5 всегда содержит адрес начала глобаль-
ной области,  а регистр шестой (SP) указывает на начало програм-
много стека.  Содержимое этих регистров  не должно  меняться  во
фрагменте на  АССЕМБЛЕРЕ  (или должно сохраняться,  а затем вос-
станавливаться).
   При вызове процедуры  исполняющая система сохраняет  в  стеке
адрес возврата и отводит в стеке  место для параметров и локаль-
ных переменных.  Каждый очередной вызов процедуры  (возможно ре-
курсивный) приводит к созданию в стеке очередной области данных,
как показано ниже:

                   ┌─────────────────────────┐
         (SP) ───► │  статический указатель  │
                   ├─────────────────────────┤
                   │  локальные  переменные  │
                   │     (если они есть)     │
                   ├─────────────────────────┤
                   │     адрес  возврата     │
                   ├─────────────────────────┤
                   │  параметры (если есть)  │
                   ├─────────────────────────┤
                   │ результат, возвращаемый │
                   │         функцией        │
                   └─────────────────────────┘

   Статический указатель содержит адрес области стека,  выделен-
ной при последнем вызове процедуры.  Этот указатель используется
для вычисления адресов  переменных промежуточных уровней  (пере-
менных, которые не являются ни локальными, ни глобальными).  Все
локальные переменные для текущей  процедуры могут использоваться
путем индексации  относительно  текущего  указателя  стека - SP.
Доступ к глобальным  переменным  осуществляется  индексацией ре-
гистра R5. Доступ к промежуточной переменной может осуществлять-
ся путем "движения" по стеку с использованием статических указа-
телей до тех пор, пока не будет найдена требуемая область стека.
После этого индексация осуществляется относительно найденной ба-
зы. Для того,  чтобы сделать доступ  к  переменным более простым
для программиста на  МАКРОАССЕМБЛЕРЕ,  компилятор определяет имя
переменной  в  качестве смещения  относительно  соответствующего
указателя (R5 или SP).
   Аналогично,  точки входа в процедуры и функции компилятор за-
меняет на одноименные метки.  Следует помнить, что компилятор не
проверяет правильность обращений  к  переменным во фрагментах на
МАКРОАССЕМБЛЕРЕ.

 ПРИМЕР:
 ¯¯¯¯¯¯¯
         FUNCTION SWAPBYTES (I:INTEGER):INTEGER;
         BEGIN
                 (*$C
                         SWAB    I(SP)
                 *)
                 SWAPBYTES := I;
         END;

   Если необходимо всю процедуру написать на МАКРОАССЕМБЛЕРЕ, то
это можно осуществить, просто заключив весь фрагмент в заголовок
процедуры,  т.е.  указать начало  и  конец процедуры по правилам
ПАСКАЛЯ. В теле процедуры фрагменты на ПАСКАЛЕ и МАКРОАССЕМБЛЕРЕ
могут чередоваться, например:

   PROCEDURE EXAMPLE;
   BEGIN
        (*$C
                ;фрагмент на МАКРОАССЕМБЛЕРЕ
        *)
   WRITE (' ТЕКСТ СООБЩЕНИЯ');(* фрагмент на ПАСКАЛЕ *)
        (*$C
                ;еще фрагмент на МАКРОАССЕМБЛЕРЕ
        *)
      END;

   ПРИМЕЧАНИЕ. Следует помнить, что функции сохраняют содержимое
   ¯¯¯¯¯¯¯¯¯¯¯ регистров  R0-R4  (включая  регистры-аккумуляторы
               процессора с плавающей запятой), а процедуры – не
               сохраняют.

                          ЖЕЛАЮ УСПЕХА!

 MV corp.                  08.06.94 г.          тел.: 919-26-17


 
Всё об «Электроника БК0010(-01), БК0011(М)»! » Языки программирования » Паскаль » «Pascal.MV» » «Pascal.MV v1.01 - Руководство программиста» [08.06.94] (Автор: MV corp.)
  • Страница 1 из 1
  • 1
Поиск:

-=RUS=-
ICQ: 320867225
asr-corp@yandex.ru
bk001x@yandex.ru