Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС / Тема_8.ppt
Скачиваний:
137
Добавлен:
11.04.2015
Размер:
1.17 Mб
Скачать

Основные функции управления консолью

Функция

Описание

SetConsoleTitle

Определить текст заголовка для окна консоли

GetStdHandle

Получить стандартный дескриптор

WriteConsole

Вывести текст в консоль

ReadConsole

Ввод из консоли

SetConsoleCursorPosition

Установка позиции курсора

SetConsoleTextAttribute

Установка цветов текста и фона

ReadConsoleInput

Обработка событий мыши и клавиатуры

41

8.1.Интерфейс прикладного программирования

8.1.3.Программирование системных вызовов

Прикладные вызовы - это способ обращения к функциям ИПП из прикладной программы. В различных ОС этот способ реализуется по- разному.

В программах на языке ассемблера для MS DOS такой вызов выполняется с помощью команды программного прерывания int.

42

8.1.3. Программирование системных вызовов

Фрагмент программы, выполняющей открытие файла MYFILE.txt и его чтение в оперативную память.

Открытие файла осуществляется путем выполнения функции 30h прерывания 21h. Выполняются также функции определения размера файла (42h) и чтения файла (3Fh).

Предполагается, что размер файла не более 10 Кбайтов.

; Откроем файл

 

 

 

mov

АН, 30h

; Функция открытия файла

 

mov

AL, 2

; Доступ для чтения/записи

 

mov

DX, offset FileName

; Адрес имени файла

 

int

21h

 

 

 

mov

handle, AX

; Получили дескриптор

 

;Определим размер файла

 

 

mov

AH, 42h

; Функция установки указателя

 

mov

AL,2

; Код для конца файла

 

mov

BX, handle

Дескриптор файла

 

mov

CX, 0

; Смещение

 

mov

DX, 0

;

равно 0

 

int

21h

; установить указатель

 

jc

pointer_error

; нa обработку ошибки

43

mov

filesize, AX

; 3апомнить размер файла

 

8.1.3.Программирование системных вызовов

;Попытаемся прочитать 10 Кбайтов

mov

АН, 3Fh

; Функция чтения

mov

BX, handle

; Дескриптор

mov

CX, filesize

; Столько читать

mov

DX, offset Buf_in

; в буфер

int

21h

 

mov

CX, AX

; Столько реально прочитали

 

 

Pointer_error:

;Завершим программу

;Поля данных

Buf_in

db

10000h dup ('')

; Буфер ввода

handle

dw

?

; Ячейка для дескриптора

filesize

dw

?

; Длина файла

FileName db

'MYFILE.txt', 0

; Имя файла в формате ASCIIZ

 

 

 

44

8.1.3. Программирование системных вызовов

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

Для вызова системных функций на ассемблере необходимо:

описать их прототипы;

подключить библиотеки импорта для компоновщика;

перед вызовом функции ее фактические параметры записать в стек;

выполнить команду call для передачи управления системной функции.

45

8.1.3. Программирование системных вызовов

Фрагмент Win32-программы на ассемблере с примерами вызова функций CreateWindowEx(), ShowWindow() и UpdateWindow():

; Прототипы внешних функций EXTERN CreateWindowExA@48:NEAR EXTERN ShowWindow@8:NEAR EXTERN UpdateWindow@4:NEAR

.586P

.MODEL FLAT, stdcall ; плоская модель includelib с: \masm32 \lib \user32.lib

; Сегмент данных ---------------------------------

_DATA SEGMENT DWORD PUBLIC USE32 'DATA'

HWND

DD

0

; дескриптор окна

HINST

DD

0

; дескриптор приложения

TITLENAME DB 'Заголовок окна ', 0

CLASSNAME DB 'CLASS1', 0

….

 

 

 

_DATAENDS

 

46

8.1.3.Программирование системных вызовов

;Сегмент кода ----------------------------------

_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'

;Создать окно зарегистрированного класса

;Записать параметры в стек в стиле Паскаль

PUSH

0

 

PUSH

[HINST]

 

PUSH

0

 

PUSH

0

 

PUSH

200

; высота окна

PUSH

250

; ширина окна

PUSH

100

; координата левого верхнего угла

PUSH

100

; координата левого верхнего угла

PUSH

WS_OVERLAPPEDWINDOW

PUSH

OFFSET TITLENAME ; имя окна

PUSH

OFFSET CLASSNAME ; имя класса

PUSH

0

 

CALL

CreateWindowExA@48

47

8.1.3.Программирование системных вызовов

;Проверка на ошибку

CMP

EAX, 0

 

JZ

ERR2

 

MOV

[HWND], EAX

; дескриптор окна

;-------------------------------------------

 

 

PUSH

1

 

PUSH

[HWND]

 

CALL

ShowWindow@8

; показать созданное окно

;-------------------------------------------

 

 

PUSH

[HWND]

 

CALL

UpdateWindow@4

; перерисовать окно

Параметры записываются в стек в обратном порядке их перечисления в вызове функции. Это - стиль языка Pascal.

К имени функции следует добавить суффикс А@n, где число n показывает длину параметров в стеке. Языки высокого уровня скрывают истинные имена системных функций.

48

8.1.Интерфейс прикладного программирования

8.1.4.Реализация интерфейса прикладного программирования

Вбольшинстве операционных систем вызов функции ИПП выполняется в контексте вызывающего процесса.

ВОС Windows наряду с этим реализован также и аппарат выполнения системного вызова в отдельном процессе, который представлен сервером Win32 (защищенная подсистема Windows).

Реализацию выполнения функции ИПП в контексте вызывающего процесса можно разделить на два способа:

выполнение без переключения в режим ядра;

выполнение с переключением в режим ядра.

Выполнение функций ИПП без переключения в режим ядра также разбивается на два способа:

выполнение функции стандартной библиотеки системы программирования;

выполнение функции DLL-библиотеки.

49

8.1.4. Реализация интерфейса прикладного программирования

Вызов функций стандартных библиотек языка.

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

Такие вызовы реализуются машинной командой передачи управления с возвратом (call для процессоров Intel). Кроме передачи управления вызывающей программе требуется предоставить ей фактические параметры. Передача параметров может быть реализована разными способами, например через общую область памяти или через регистры. В Windows передачу параметров принято осуществлять через стек.

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

50

Соседние файлы в папке ОС