Базовый компонент z/OS Language Environment (LE) поддерживает единую универсальную среду выполнения (run- time environment ) для приложений, созданных на языках программирования высокого уровня ( HLL ) C/C++, COBOL , PL/1 и Fortran [ 5.28 ] . Языковая среда LE включает наиболее существенные и часто используемые сервисы времени выполнения, такие как формирование сообщений, обработка событий , управление памятью , поддержка функций даты и времени и т.п. Эти сервисы доступны всем приложениям, независимо от используемого языка программирования. Кроме того, LE упрощает взаимодействие между приложениями, написанными на разных языках или для разных операционных сред , за счет специальных интерфейсных средств.
Языковая среда z/OS V1R4 поддерживает приложения, полученные с помощью следующих версий компиляторов:
- z/OS C/C++, C/C++ Compiler for MVS / ESA , AD/ Cycle C/370 Compiler;
- Enterprise COBOL for z/OS and OS/390, COBOL for OS/390 VM;
- Enterprise PL/I for z/OS and OS/390, PL/I for MVS
- VS Fortran, Fortran IV;
- VisualAge for Java, Enterprise Edition for OS/390.
Приложения, написанные на HL Assembler , также могут использовать средства LE через соответствующие макровызовы.
Декомпиляция, Редактирование и Компиляция карты под CSS v34 для новичков.
Языковая среда LE состоит из следующих элементов (рис. 5.60):
- базовые программы (basic routines ), обеспечивающие универсальную обработку сообщений, запуск и завершение программ, динамическое распределение памяти, обработку событий (в том числе ошибок) времени выполнения, взаимодействие между программами, написанными на разных языках;
- общие библиотеки (common library service), содержащие набор модулей для поддержки математических функций и функций даты и времени, реализуемых на основе стандартного интерфейса вызовов функций LE (callable services);
- специфические библиотеки (language specific RTL ), содержащие модули, применяемые только для одного из поддерживаемых языков HLL .
Рис. 5.60. Универсальная среда выполнения программ Language Environment
Создаваемые с использованием универсальных модулей LE-приложения могут выполняться в различных операционных средах , включая как внутрисистемные (TSO, пакетный режим , UNIX shell ), так и среды промежуточного слоя ( DB2 , CICS , IMS ). Следует отметить, что программы, входящие в состав библиотек LE, делятся на две группы: резидентные и динамические. Резидентные программы при редактировании связей включаются в загрузочный модуль приложения. Они представлены в библиотечных наборах данных SCEELKED и SCEEBIND. К ним относятся, например, программы запуска и завершения. Динамические программы, размещаемые в библиотеках SCEERUN и SCEERUN2, не включаются в загрузочный код, а загружаются при вызове во время выполнения .
Объединяя средства, доступные в программах, написанных на разных языках, Language Environment устанавливает единую универсальную модель среды выполнения приложений, основанную на целом ряде понятий и терминов, которые следует освоить программисту:
КАК ДЕКОМПИЛИРОВАТЬ EXE DLL C# | КАК УЗНАТЬ ИСХОДНЫЙ КОД ПРОГРАММЫ | ДЕКОМПИЛЯЦИЯ | C# ПЛЮШКИ
- Enclave — программа (главная программа вместе с подпрограммами);
- Routine — подпрограмма, функция;
- Process — программный код, данные и ресурсы, связанные с выполняющейся программой;
- Thread — поток, независимо диспетчеризуемая часть процесса;
- Local data — локальные данные подпрограммы;
- External data — данные, доступные для любых элементов анклава.
Средства разработки пакетного режима
Традиционный способ разработки программ, применяемый программистами в течение десятилетий, основан на использовании средств пакетного режима, реализуемых в сеансе TSO/E или ISPF/PDF. Ключевым элементом данного способа является использование стандартных процедур JCL , хранящихся в системной библиотеке SYS1.PROCLIB и предназначенных для компиляции, редактирования связей и исполнения различных HLL -программ. В таблице 5.9 представлен список некоторых таких процедур.
HL Assembler | ASMAC | ASMACL | ASMACLG |
C++ | CBCC | CBCСB, CBCCL | CBCCBG, CBCCLG |
C | EDCC | EDCСB, EDCСL | EDCCBG, EDCСLG |
COBOL | IGYWC | IGYWCL | IGYWCLG |
Pl/1 | IEL1C | IEL1CL, IBMZCB | IEL1CLG, IBMZCBG |
Процедуры, предназначенные только для компиляции (имя процедуры заканчивается символом «C»- Compile ), служат для создания и сохранения объектного модуля программы. Процедуры компиляции и редактирования служат для создания загрузочного модуля и сохранения его в библиотеке. Символы «CL» или «CB» в имени процедуры указывают на применение соответственно стандартного редактора связей Linkage Editor или редактора Binder . Последняя группа процедур (имена заканчиваются на «CLG» или «CBG») предназначена для выполнения программы, представленной в исходном коде, причем объектный и загрузочный модули могут не сохраняться в постоянных наборах данных.
В качестве примера использования каталогизированной процедуры рассмотрим процедуру ASMACLG , предназначенную для компиляции, редактирования связей и выполнения ассемблерной программы, представленной в виде исходного модуля [ 5.29 ] . Текст процедуры приведен на рис. 5.61.
Процедура ASMACLG состоит из трех шагов. На первом шаге ( C ) вызывается компилятор ассемблера ASMA90 , на втором шаге ( L ) — редактор связей IEWL , а на третьем ( G ) — запускается созданный загрузочный модуль . Процедура не содержит символических параметров, поскольку необходимые средства настройки доступны через модификацию DD и EXEC операторов. С помощью модификации операторов DD можно определить собственные наборы данных для размещения исходного текста программы ( C.SYSIN ), объектного ( C.SYSLIN ) и загрузочного ( L.SYSLMOD ) модулей, исходных данных программы ( G.SYSIN ). Для задания требуемого набора опций компилятора и редактора связей следует модифицировать параметр PARM соответствующего оператора EXEC ( PARM.C и PARM.L ).
Рис. 5.61. Каталогизированная процедура ASMACLG
Рассмотрим некоторые варианты применения процедуры ASMACLG при разработке ассемблерных программ:
- исходный модуль и исходные данные разрабатываемой программы представлены во входном потоке:
//TEST JOB . // EXEC ASMACLG,PARM.C=LIST,PARM.L=NOMAP //C.SYSIN DD * строки исходной программы . /* //G.SYSIN DD * исходные данные .
//TEST JOB . // EXEC ASMACLG,PARM.C=LIST,PARM.L=NOMAP //C.SYSIN DD DSN=USER.ASM(PRG3),DISP=OLD //G.SYSIN DD DSN=USER.DATA(TABL1),DISP=OLD
При работе в среде ISPF/PDF текст задания формируется с помощью текстового редактора EDIT. Запуск задания можно производить прямо из редактора с помощью команды SUBMIT . Отчет о выполнении задания можно получить и просмотреть либо с помощью утилиты Outlist, либо средствами компонента SDSF.
Источник: intuit.ru
Компиляция, редактирование связей, запуск программы на выполнение.
Borland C++ включает богатейшие библиотеки функций для управлениями файлами, выполнения ввода-вывода и многих других действий. Прототипы (заголовки функций с описанием типов формальных параметров и типа возвращаемого функцией значения), символические константы и другие макро, связанные с библиотечными функциями, объединяют в заголовочные файлы, которые по традиции имеют расширение.h. Необходимые для компиляции файлы включаются в текст программы при помощи препроцессорной директивы #include. При запуске на компиляцию текст программы сначала обрабатывается препроцессором, который обрабатывает только “свои” директивы (в частности, вместо директивы “#include имя_файла” встраивается из библиотеки include файл, имя которого задано в директиве), а затем текст программы передается непосредственно на обработку компилятору.
Компиляция исходного текста программы инициируется либо через команду CompileCompile to OBJ, либо нажатием “горячих” клавиш Alt+F9. Команда Make EXE file также запускает программу на компиляцию и при отсутствии синтаксических ошибок автоматически запускает компоновщик для получения.ЕХЕ-файла. Еще одна возможность для запуска программы на компиляцию – команда RunRun (Ctrl+F9). После успешной компиляции и компоновки запускается полученный.ЕХЕ-файл на выполнение.
Все сообщения и предупреждения IDE помещает в окно по имени Message. Это окно активно после завершения компиляции. Если в программе обнаружены ошибки, включаются средства трассировки ошибок, которые связывают строки текста программы в окне редактора со строками окна Message.
Перемещение высвечивания клавишами со стрелками в окне Message синхронно сопровождается высвечиванием соответствующих ошибочных строк в тексте программы. При нажатии клавиши Enter активизируется окно редактора и курсор устанавливается на ошибочную строку. Нажатие клавиши F6 (переход или активизация следующего окна) вновь делает активным окно Message.
Многофайловая компиляция
При модульном программировании не обойтись без многофайловой компиляции. При работе с большими программами намного удобнее размещать части программы не в одном, а в нескольких файлах. Каждый файл должен включать целиком одну или несколько функций. Имена этих файлов записываются в специальный файл – файл проекта, из которого IDE узнает, какие из текстовых файлов следует объединять в исполняемый (.ЕХЕ) файл.
Все необходимые6 для работы с файлами проектов команды включены в меню Project.
Для организации файла проекта необходимо открыть файл проекта. Для этого выполняется команды ProjectOpen Project… IDE активизирует специальное окно Project в нижней части экрана и открывает окно диалога, позволяющее загрузить нужный файл проекта или создать новый с заданным именем.
Если создан новый файл проекта, окно Project первоначально будет пустым. Включение файлов в проект и их удаление выполняются либо через команды ProjectAdd item… и ProjectDelete item, либо нажатием клавиш Ins и Del, в случае если курсор размещен в окне Project. При добавлении файлов в проект открывается окно диалога, позволяющее выбрать нужный файл.
Окно Project упрощает переход от одного файла, включенного в проект, к другому при их редактировании. Для этого высвечивание перемещается на нужную строку окна Project и нажимается клавиша ENTER.
При работе со средой Borland C++ рекомендуется использовать проект, даже если программа состоит из одного файла.
Отладка программы.
В процессе отладки вы можете:
1. Осуществлять пошаговое выполнение программы. После перехода каждой ее строки будет производиться приостановка, позволяющая проанализировать промежуточные результаты;
1. Проверять значение и местоположение (адрес) некоторой переменной в ходе выполнения программы»
2. Просмотреть последовательность вызова функций в программе.
Существует два режима пошагового выполнения программы:
1. Трассировка с заходом в тело функции, при встрече ее вызова в тексте программы (F7);
2. Пошаговое выполнение функции (как обычной команды без захода в тело функции), при встрече ее вызова в тексте программы (F8).
Команда RunTrace into (F7) запускает программу на отладку. Интегрированная среда высвечивает строку программы, содержащую точку входа main(). После этого нажатием клавиши F7 вызывается выполнение кода, соответствующего одной строке текста программы. Если в строке записана ссылка на функцию, начинается трассировка по тексту тела функции. При необходимости выполнения строки функции за один шаг, используется клавиша F8 (команда RunStep over).
Для ускорения процесса отладки используется команда RunGo to cursor (F4). Программа выполняется до строки, в которой в данный момент располагается текстовый курсор. Можно также задать режим выполнения до точки останова (через опцию подменю “DebugToggle breakpoint” или одновременным нажатием клавиш Ctrl и F8, в дальнейшем будем использовать запись “Ctrl+F4”). При этом строка в точке останова подсвечивается обычно красным фоном. Снять установку точки останова можно повторным выполнением описанной команды, размещая курсор на подсвеченной строке останова.
Для наблюдения за изменением значений переменных в ходе выполнения программы используется подменю DebugWatchesAdd watch или “Ctrl+F7”. В появившемся окне Add Watch (вызов окна Add Watch можно также получить, если нажать клавишу Ins, предварительно сделав активным окно Watch) необходимо ввести имя переменной, значение которой необходимо просмотреть и нажать Ввод.
Указанная переменная размещается в окне Watch, создаваемом в нижней части экрана, и, в процессе отладки, через это окно можно наблюдать за изменением размещенных в нем переменных. Удалить переменную из окна Watch можно при помощи клавиши “Del”, предварительно выделив ее подсветкой.
Используя опцию меню Evaluatemodify или “Ctrl+F4”, можно изменить значение переменной в процессе выполнения отладки, чтобы протестировать алгоритм с новым заданным значением. Окно этой опции “Evaluate and Modify” можно использовать и в качестве калькулятора, если записать выражения с переменными в строке “Expression” и нажать клавишу “Evaluate” для получения результата в строке Result.
Использование глобальных переменных, объявленных вне файла.
Ниже приведена простая программа на языке С, состоящая из двух файлов (модулей) – first.c (главный файл) и second.c:
// начало первого файла first.c
#include // подключение библиотеки stdio.h
extern int a,b; // объявление переменных, объявленных в другом файле
// (в файле second.c)
void main(void) // основная функция main
printf(“a=%d b=%dn”,a,b); // вывод значений переменных a,b
Во втором файле second.c должно присутствовать объявление и инициализация переменных, например, в виде:
int a=2,b=5; // объявление переменных a,b
Две глобальные переменные a и b типа int описаны вне функции в файле second.c. Следовательно, их имена являются глобальными в файле, т.е. они видимы для загрузчика языка С. Поскольку в файле first.c присутствует описание extern для этих переменных типа int, то компилятор разрешает использовать их в функциях first.c, например в main(). Объявление extern int a,b можно поместить как внутри, так и вне функций (например, функции main()). При объявлении вне функции переменные a и b будут видимы во всем модуле first.c. Если оператор extern int a,b помещен внутри функции main(), то переменные будут видимы только внутри этой функции.
Если перед описанием int a=2,b=5; в файле second.c поместить обозначение класса памяти static, то указанные переменные скрываются от загрузчика. Такие переменные известны только в пределах файла, в котором они объявлены. Хотя программа в файле first.c будет успешно оттранслирована (компилятор учтет описание extern), загрузчик не сможет уточнить адреса для внешних ссылок и выдаст соответствующее сообщение об ошибке.
ЛИТЕРАТУРА
1. Березин Б.И., Березин С.Б. Начальный курс С и С++. –М: Диалог-МРТИ,1999.-288с.
2. Керниган Б., Ритчи Д. Язык программирования Си.-М.: Финансы и статистика.,1992.-271с.
3. Касаткин А.И., Вольвачев А.Н. Профессиональное программирование на языке Си: Oт Turbo –C к Borland C++: Справочное пособие –Мн.:Вышэйшая школа.,1992.-240с.
4. Страуструп Б. Язык программирования С++. 2-е изд.:В 2т. Киев: Диа Софт,1993.
5. Фьюэр А. Задачи по языку СИ. М.:Финансы и статистика.1985.
6. Хэнкок Л.,Кригер М. Введение в программирование на языке СИ. М.:Радио и связь.1986.
7. Берри В.,Микинз Б. Язык СИ: введение для программистов. М.:Финансы и статистика.1988.
8. Уэйт М.,Прама С.,Мартин Д. Язык СИ. Руководство для начинающих. М.:Мир.1988.
9. Больски М.Н. Язык программирования СИ. Справочник. М.:Радио и связь.1988.
10. Юлин В.А.,Булатова И.Р. Приглашение к СИ. Мн.:Высш. школа.1990.
11. Р.Уингер. Язык Турбо СИ. М.:Мир.1991.
12. Романовская Л.М.,Русс Т.В.,Свитковский С.Г. Программирование в среде СИ для ПЭВМ ЕС. М.:Финансы и статистика.1992.
13. Е. М. Демидович.Основы алгоритмизации и программирования..Язык СИ.Мн.:”Бестпринт “,2001. – 440c.
14. М. А Аксенкин О. Н. Целобенок. Язык С. Мн.:”Унiверсiтэцкае”, 1995. – 302c.
15. Г. П. Котлинская, О. И. Галиновский.Программирование на языке СИ..Мн.:”Выщэйшая школа”, 1991. – 155c.
16. В. В. Подбельский.Язык С++.M.:ФиС, 2001-. 559c.
17. Л.И. Климова. С++.Практическое программирование. М.:Кудиц-Образ, 2001. – 587c.
18. Г. Шилд. Программирование на Borland С++.Мн. ”Попурри:, 1999. – 800c.
19. В. В.Тимофеев. Программирование в среде С++ Builder 5. М.:БИНОМ,2000.
Св. план 2002, поз.
Авторы: Бусько Виталий Леонидович
Корбит Анатолий Григорьевич
Коренская Ирина Николаевна
Кривоносова Татьяна Михайловна
Убийконь Владимир Иванович
Под общей редакцией Бусько В.Л.
Лабораторный практикум
Редактор
Подписано к печати Формат 60×80 1/16
Объем усл. печ. л. уч.-изд.л. Тираж экз.
Белорусский государственный университет
информатики и радиоэлектроники
Источник: infopedia.su
1.1. Редактор программы и Компилятор
Чтобы открыть Каталог Программ (Program Catalog), зажмите кнопку , а затем нажмите
. В самом верху списка всегда будет отображаться исходный файл для текущего приложения. Под ним располагаются исходные файлы пользовательских программ. Чтобы создать новую программу, нажмите кнопку
в меню внизу экрана. Появится новая форма для ввода данных, которая называется «Новая программа» (New Program), и система потребует от вас ввести имя вашей «новой программы».
В качестве примера введите имя MYPROG. После нажатия на кнопку вы попадете в Редактор программы (Program Editor), в котором уже будет по умолчанию загружен шаблон, как показано ниже:
EXPORT MYPROG()
BEGIN
END;
Чтобы выйти из Редактора программы (Program Editor), просто нажмите кнопку . Все изменения будут автоматически сохранены. Также исходный код будет проанализирован на наличие синтаксических ошибок, и только при отсутствии ошибок код будет компилирован. Если ошибка все же была обнаружена, то после попытки выйти из редактора появится диалоговое окно с информацией о первой по счету ошибке (в этом случае компиляция не произойдет).
Для проверки правильности исходного кода без выхода из Редактора программы (Program Editor) нажмите кнопку в меню внизу экрана. Если ошибка будет найдена, курсор (и экран) будет перемещен к месту, где была обнаружена первая ошибка.
Если ошибок нет, появится диалоговое окно с надписью «В программе ошибок нет» (No errors in the program). После этого исходный код будет также компилирован (даже если вы еще находитесь в Редакторе программы).
Замечание: Фраза «Новая программа» (New Program), которая используется в пункте меню в Каталоге программ (Program Catalog), немного вводит в заблуждение. Имя, заданное в форме ввода данных, является именем исходного файла. Оно используется системой для создания шаблонной процедурной функции (т.е. программы похожей, но все же отличной от математической функции).
Однако процедурной функции не обязательно иметь такое же имя, как у исходного файла. То есть пользователь спокойно может изменить название своей программы MYPROG() на совершенно другое, отличное от названия исходного файла MYPROG. Более того, можно даже создать несколько процедурных функций внутри одного и того же исходного файла. Фактически, можно использовать один исходный файл для создания всех программ и переменных, которые когда-либо будут использованы на калькуляторе! Поэтому, в целом, под «Новой программой» стоит понимать «Новый проект».
Источник: calculators-online.ru