
- •Для специальности
- •230105.51 (2203) Программное обеспечение вычислительной техники и автоматизированных систем
- •Рецензенты: о.В. Фаллер, преподаватель Колледжа МосГу;
- •Содержание
- •7.8. Организация программных комплексов 56
- •7.8. Организация программных комплексов 53
- •Пояснительная записка
- •1. Общие вопросы теории операционных систем
- •1.1. Классификация программного обеспечения
- •1.2. Запуск операционной системы
- •1.3. Координация действий при работе эвм
- •1.4. Понятие файловой системы
- •1.5. Схема отыскания кластеров файла на диске в файловой системе fat16
- •2. Командный язык для управления системой
- •2.1. Особенности командного языка
- •2.2. Организация пакетной обработки информации
- •2.2.1. Формальные параметры командных файлов
- •2.2.2. Дополнительные возможности пакетной обработки. Утилита be
- •3. Конфигурирование ядра ос на примере ms dos
- •3.1. Файл config.Sys
- •3.2. Управление распределением оперативной памяти в реальном режиме работы процессора
- •3.3. Файл автозагрузки autoexec.Bat
- •4. Типы программ
- •5. Системный сервис ms dos
- •6. Организация программных комплексов
- •6.1. Код возврата программы
- •6.2. Программный хвост
- •6.3. Окружение программы
- •6.4. Запуск одной программы из другой
- •6.5. Макрокоманды
- •Пример использования макрокоманды:
- •6.6. Создание процедур и передача параметров
- •6.7. Межсегментный вызов процедур
- •6.8. Модульный принцип построения программ
- •7. Ос Windows. Особенности работы
- •7.1. Работа с файловой системой. Ms Visual Basic ver 6.0
- •7.2. Api Интерфейс Windows на примере Visual Basic ver 6.0
- •7.3. Работа с буфером обмена
- •7.4. Работа со шрифтами
- •7.5. Работа с клавиатурой и мышью
- •7.6. Ole Технология
- •7.7. Работа с мультимедиа
- •7.8. Организация программных комплексов
- •7.9. Sdi и mdi программы
- •8. Разработка справочных систем для Windows 32x
- •8.1. Формат справки WinHelp
- •8.2. Подготовка справочного файла с помощью программы Windows Help Designer
- •8.3. Подключение справочной системы к программе
- •8.4. Разработка справочных систем в формате html
- •8.4.1. Создание тем справочной службы
- •8.4.2. Создание проекта справочной службы
- •8.4.3. Формирование оглавления
- •8.4.4. Задание поисковых индексов
- •8.5. Подключение справочных файлов к программам на Visual Basic
- •9. Общая архитектура операционных систем
- •9.1. Архитектура ос
- •9.2. Ядро и вспомогательные модули ос
- •9.3. Ядро в привилегированном режиме
- •9.4. Многослойная структура ос
- •9.5. Аппаратная зависимость и переносимость ос
- •9.6. Типовые средства аппаратной поддержки ос
- •9.7. Машинно-зависимые компоненты ос
- •9.8. Переносимость операционной системы
- •9.9. Концепция микроядерной архитектуры
- •9.10. Преимущества и недостатки микроядерной архитектуры
- •9.11. Совместимость и множественные прикладные среды
- •9.12. Двоичная совместимость и совместимость исходных текстов
- •9.13. Трансляция библиотек
- •9.14. Способы реализации прикладных программных сред
- •Приложение. Некоторые функции системного сервиса msdos. Прерывание 21h Организация ввода с клавиатуры
- •Организация вывода
- •Файлы и каталоги
- •Запуск одной программы из другой
- •Литература
- •Для специальности
- •230105.51 (2203) Программное обеспечение вычислительной техники
6.6. Создание процедур и передача параметров
Процедура это блок программного кода к которому можно обращаться из различных точек программы. Процедуры создаются либо для упорядочивания структуры программы, либо для автоматизации часто выполняемой последовательности действий с различными исходными данными. В отличие от макрокоманды процедуры транслируются в машинный код, а текст макрокоманды «подставляется» вместо команды ее вызова. Структура процедуры:
Myproc proc
;команды
ret ;команда завершения процедуры
Myproc endp
Располагаются процедуры в «ЕХЕ» программах перед точкой входа. В «СОМ» программах после данных, в конце программы. Вызов процедуры выполняется с помощью команды: call Myproc.
При вызове процедуры в стек заносится слово — содержимое регистра IP (адрес следующей команды), и в него загружается смещение к началу процедуры. При выполнении команды ret из стека восстанавливается содержимое регистра IP и программа продолжается с команды следующей за оператором call.
Наиболее часто используется передача параметров процедуре через стек. Перед вызовом процедуры в стек заносят требуемые параметры, которые затем извлекаются в процедуре с помощью косвенной адресации через региcтр BP. Используется косвенная адресация со смещением кратным 2. При возврате из процедуры указывается количество байтов помещенных в стек при ее вызове.
Пример. Процедура вывода символа по его коду.
;EXE program
codesg segment 'CODE'
assume CS: codesg,DS: datasg,SS: stacksg
;-----------------
getSym proc
mov bp,sp ;адрес верхушки стека
mov ah,02h
mov dx,[bp+2] ;извлечь код символа
int 21h
ret 2
getSym endp
;------------------
begin:
;-------------------
mov ah,0
mov al,176
push ax ;код символа в стек
call getSym ;вызов процедуры
;----------------------------
mov AX,4C00h
int 21h
;---------------------------
codesg ends
datasg segment 'DATA'
mes db 128 dup(0)
datasg ends
stacksg segment stack 'STACK'
dw 128 dup(0)
stacksg ends
end begin
6.7. Межсегментный вызов процедур
Процедуры расположенные в одном сегменте называются «ближними» near. Соответственно вызов такой процедуры – ближний. Если процедуры находятся в разных сегментах кода, то они считаются «дальними» far. Вызов такой процедуры выполняется с помощью команды:
call far ptr MyProc
Для возврата в исходную точку программу в стек процессором заносится адрес текущего сегмента – содержимое регистра CS и смещение к следующей команде – содержимое регистра IP. Два слова(4 байта). Процедура задается в сегменте кода с модификатором far.
Пример программы с двумя сегментами и дальним вызовом процедуры.
;EXE program
codesg1 segment 'CODE1'
assume CS:codesg1,DS:datasg,SS:stacksg
;------------------
begin:
;-------------------
mov ah,0
mov al,176 ;символ в стек
push ax
call far ptr getSym ;дальний вызов
;----------------------------
mov AX,4C00h
int 21h
;---------------------------
codesg1 ends
;второй сегмент кода программы
codesg2 segment 'CODE2'
assume cs:codesg2
;-----------------
getSym proc far
mov bp,sp
mov ah,02h
mov dx,[bp+4] ;извлечь код
;символа
int 21h
ret 2
getSym endp
codesg2 ends
datasg segment 'DATA'
mes db 128 dup(0)
datasg ends
stacksg segment stack 'STACK'
dw 128 dup(0)
stacksg ends
end begin
Для управления адресами вызываемых процедур может использоваться технология косвенного вызова. Ближний вызов имеет формат:
call DS:adrproc
Где:
adrproc dw MyProc
Дальний вызов выполняется командой:
call dword ptr DS:adrproc
Где:
adrproc dd MyProc