Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Zemskov_my_sppo1

.pdf
Скачиваний:
30
Добавлен:
18.04.2015
Размер:
595.32 Кб
Скачать

Ю. В. Земсков. Системное и прикладное программное обеспечение. Конспект лекций, варианты заданий и методические указания в лабораторным работам. ВГИ ВолГУ, 2002 г.

Листинг 11.3. Программа для определения кодов клавиш

Uses Crt;

Const Ofst = $1E;

{смещение начала буфера клавиатуры относительно начала сегмента}

var

 

ch

: Char;

i, c0, c1 : Byte;

BufferHead : word absolute $40:$1A;

BufferTail : word absolute $40:$1C;

BufferKeyb : array[0..31] of Byte absolute $0:$41E;

KeybFlags : word absolute $40:$17;

Procedure ShowKeyb(n1,n2:byte);

{показать содержимое буфера клавиатуры с n1 по n2} var i, c1, c0 : Byte;

begin

for i:=n1 to n2 do begin c1 := BufferKeyb[2*i]; c0 := BufferKeyb[2*i+1];

Write(c1:3,’:’,c0:3,’; ’); end;

end;

Begin repeat

if KeyPressed then begin {если нажата клавиша} Writeln(’================================================’); Writeln(’Порт клавиатуры 60H = ’,port[$60]);

Writeln(’Флаги клавиатуры = ’, KeybFlags); Writeln(’BufferHead = ’,BufferHead); Writeln(’BufferTail = ’,BufferTail); Writeln(’Содержимое буфера клавиатуры:’); ShowKeyb(0,7); Writeln;

ShowKeyb(8,15); Writeln;

c1 := BufferKeyb[BufferHead-Ofst];

c0 := BufferKeyb[BufferHead-Ofst+1];

Writeln(’В буфере клавиатуры двухбайтовый код ’, c1,’:’,c0); ch := ReadKey;

if ch=#0 then begin

Writeln(’Нажата функц.клавиша, код ReadKey = 0:’, Ord(ReadKey)); end else

Writeln(’Нажата обычная клавиша "’, ch, ’" код ReadKey = ’, Ord(ch));

end;

until ch = #27; {код клавиши ESC} End.

83

Ю. В. Земсков. Системное и прикладное программное обеспечение. Конспект лекций, варианты заданий и методические указания в лабораторным работам. ВГИ ВолГУ, 2002 г.

Листинг 11.4. Программа на языке Си — обработчик прерывания 05H

#include<dos.h>

#include<stdio.h>

//Определим структуру, единственное поле p которой // ссылается на процедуру оработки прерываний: struct intaddr {void interrupt (far * p) (void); };

//Указатель на старый обработчик прерывания 05: void interrupt (far * old_int05)(void);

//Новый обработчик

прерывания 05:

void interrupt far ISR_int05(void){

unsigned int i;

 

 

unsigned char (far

* vmem)[]; //указатель на массив байтов

(void far*)vmem = MK_FP(0x0b800,0); // начало видеопамяти

for (i=0; i<80*25;

i++) { //весь экран запонится символами

(*vmem)[2*i]

=

i % 255; // код символа

(*vmem)[2*i+1]

=

0x7; // атрибут (белый символ на чёрном фоне)

}

old_int05(); // вызвали старый обработчик

}

void TSR(char, unsigned); // предварительное описание процедуры

extern

unsigned

_heaplen = 1024; //

размер

хипа

extern

unsigned

_stklen = 512; //

размер

стека

int main(void){ // главная программа - установщик нового обработчика //Объявим новую переменную типа "указатель на обработчик прерывания" // и присвоим ему адрес обработчика прерывания 05:

struct intaddr far * int05 = (struct intaddr far *)MK_FP(0, 0x05<<2); old_int05 = int05 -> p; //запомнили адрес старого обработчика disable(); // запретили прерывания

int05 -> p = ISR_int05; // установили вектор на новый обработчик enable(); // разрешили прерывания

printf("\nУстановлен обработчик прерывания int05\n"); printf(" нажмите Shift+PrintScreen ... "); unsigned size = _SS + (_SP + 15) / 16 - _psp;

TSR(0, size); // завершили и остались резидентным return 0;

}

//Процедура "завершить и остаться резидентным": void TSR(char status, unsigned size) {

_AH = 0x31; // номер функции "завершиться, но остаться резидентным" _AL = status; // код возврата

_DX = size; // количество 16-байтных параграфов, оставляемых в памяти geninterrupt(0x21); // вызвали прерывание 21H

}

84

Ю. В. Земсков. Системное и прикладное программное обеспечение. Конспект лекций, варианты заданий и методические указания в лабораторным работам. ВГИ ВолГУ, 2002 г.

Листинг 11.5. Программа на ассемблере — обработчик прерывания 00H (деление на 0)

name intzdiv

title Divide-by-zero interrupt Handler

.model

small

 

 

 

 

 

cr

equ

0dh

 

 

 

 

lf

equ

0ah

 

 

 

 

beep

equ

07h

 

 

 

 

backsp

equ

08h

 

 

 

 

.code

org

100h ; Это будет COM-программа

 

init

proc

near ; Процедура инициализации вектора

 

mov

dx,

offset zdiv ; DS:DX - адрес дескриптора

 

mov

ax,

2500h ; Фунция 25h - установить вектор

 

int

21h

 

 

 

 

 

mov

dx,

offset msg1 ; DS:DX - адрес начала сообщения

 

mov

ah,

9 ; Функция 09 - вывод строки на экран

 

int

21h

 

 

 

 

 

mov

dx,

((offset pgm_len+15)/16)+10h ; Число параграфов

 

mov

ax,

3100h ; функция 31h - завершить и остаться

 

int

21h

 

; резидентным, al - код возврата

 

 

 

 

 

init

endp ; Конец процедуры инициализации

zdiv

proc far ; Сам обработчик прерывания по делению на 0

 

sti ; Разрешаем прерывания

 

 

push

ax ; Сохраним регистры в стеке

 

push

bx

 

 

 

 

 

push

cx

 

 

 

 

 

push

dx

 

 

 

 

 

push

si

 

 

 

 

 

push

di

 

 

 

 

 

push

bp

 

 

 

 

 

push

ds

 

 

 

 

 

push

es

 

 

 

 

 

mov

ax,

cs ; Данные в кодовом сегменте

 

mov

ds,

ax

 

 

 

 

mov

dx,

offset msg2

 

 

mov

ah,

9

 

 

 

 

int

21h

 

; Вывели сообщение

zdiv1:

mov

ah,

1 ; Функция 01 - чтение с клавиатуры

 

int

21h

 

 

 

 

 

or

al,

20h ; Перевели символ в нижний регистр

 

cmp

al,

’c’

 

 

 

je

zdiv3 ; Перешли, если нажата ’C’ или ’c’

 

cmp

al,

’q’

 

 

 

je

zdiv2 ; Перешли, если нажата ’Q’ или ’q’

 

mov

dx,

offset msg3

 

 

mov

ah,

9

 

 

 

 

int

21h

 

; Вывели сообщение

zdiv2:

jmp

zdiv1

 

 

 

mov

ax,

4cffh ; Закончим текущую программу

 

zdiv3:

int

21h

 

;

с кодом возврата ffh

mov

dx,

offset msg4

 

 

 

 

mov

ah,

9

 

 

 

 

int

21h

 

; Вывели сообщение

 

xor

ax,

ax ; Обнулили регистр ax

 

push

ax

 

; Запишем его в стек, а потом

 

popf

 

 

;

прочитаем во флаговый регистр,

 

pushf

 

 

; если это процессор 8086/8088, то

 

pop

ax

 

; он установит биты с 12 по 15

 

and

ax,

0f000h

 

 

 

cmp

ax,

0f000h

 

 

 

je

zdiv5

; Перейдём, если это 8086/8088

 

 

 

 

; в противном случае подправим адрес возврата,

 

mov

bp,

sp

; чтобы обойти команду деления

 

 

 

 

 

lds

bx,

[bp+18] ; Это адрес команды, давшей ошибку

 

mov

bl,

[bx+1]

; Получили адресуемый байт

 

and

bx,

0c7h

; это поля mod и r/m кода команды

 

cmp

bl,

6 ; если mod=0, r/m=6, то это прямая адресация

 

jne

zdiv4 ; Если непрямая, то переход

 

add

word ptr [bp+18], 4

 

zdiv4:

jmp

zdiv5

 

 

 

mov

cl,

6

; Для непрямой адресации получим

 

 

shr

bx,

cl ; по значению поля mod

 

mov

bl,

cs:[bx+itab] ;

определим длину команды

zdiv5:

add

[bp+18], bx

;

из таблицы

pop

es ; Восстановим регистры из стека

 

 

pop

ds

 

 

 

 

 

pop

bp

 

 

 

 

 

pop

di

 

 

 

 

 

pop

si

 

 

 

 

 

pop

dx

 

 

 

 

 

pop

cx

 

 

 

 

 

pop

bx

 

 

 

 

 

pop

ax

 

 

 

 

 

iret

; Возврат из процедуры обработки прерывания

zdiv

endp ; Конец процедуры обработки прерывания

msg1

db

cr,

lf ; Сообщение во время инициализации вектора

 

db

’Прерывание по делению на 0’, cr, lf

 

db

’$’

; Терминатор строки

msg2

db

cr,

lf ; Сообщение во время обработки прерывания

 

db

’Обнаружено деление на 0:’, cr, lf

 

db

’продолжать или закончить (Continue/Quit)?’, cr, lf

 

db

’$’

; Терминатор строки

msg3

db

beep ; Сообщение при недопустимом вводе

 

db

backsp, ’ ’, backsp, ’$’

msg4

db

cr,

lf, ’$’ ; Возврат каретки, перевод строки

 

 

;

Таблица размеров кодов команд:

itab

db

2 ;

mod = 0

 

 

 

db

3 ;

mod = 1

 

 

 

db

4 ;

mod = 2

 

 

 

db

2 ;

mod = 3

 

 

pgm_len

equ

$ -

init ; Длина программы

 

end

init

 

 

 

 

 

 

 

 

 

 

 

85

Ю. В. Земсков. Системное и прикладное программное обеспечение. Конспект лекций, варианты заданий и методические указания в лабораторным работам. ВГИ ВолГУ, 2002 г.

Листинг 11.6. Программа на ассемблере — обработчик прерывания 21H (запрещает удаление файлов с указанного диска)

title

Резидент, не позволяющий удалять файлы с указанного диска

 

.model

tiny

 

 

 

.code

 

 

 

 

org

 

2ch

 

 

envseg

dw

 

? ; Адрес копии окружения DOS

 

org

 

80h

 

 

cmdlen

db

 

? ; Длина командной строки

cmdline

db

 

? ; Начало командной строки

start:

org

 

100h ; Начало COM-программы

 

 

 

 

 

old_int21h:

 

 

 

 

 

jmp

 

short initialize

 

 

dw

 

0 ; Вместе с предыдущей командой перехода

 

; получается 4 байта для хранения старого вектора

int21h_handler

proc far

; Обработчик прерывания 21h

 

pushf

; сохранили флаги

 

 

cmp

 

ah, 41h ; если вызвали функцию 41h (удаление файла)

 

je

 

fn41h

 

 

 

cmp

 

ax, 7141h ; или 7141h (удаление файла с длинным именем)

 

je

 

fn41h

 

 

fn41h:

jmp

 

short not_fn41h ; не "наша" функция

push

 

ax

 

 

 

 

 

 

 

push

 

bx

 

 

 

mov

 

bx, dx

 

 

 

cmp

 

byte ptr ds:[bx+1], ’:’ ; если второй символ - ’:’,

 

je

 

full_spec

 

; то первый символ - имя диска

 

mov

 

ah, 19h ; иначе определим текущий диск

 

int

 

21h

 

 

 

add

 

al, ’A’ ; преобразовать номер диска к заглавной букве

 

jmp

 

short compare ; перейти к сравнению

full_spec:

 

 

 

 

 

mov

 

al, byte ptr [bx] ; AL - имя диска

compare:

and

 

al, 11011111b ; преобразовать к заглавной букве

cmp

 

al, byte ptr cs:cmdline[1] ; если это "наш" диск,

 

 

 

je

 

access_denied

; то запрещаем доступ

 

pop

 

bx

 

 

 

pop

 

ax

 

 

not_fn41h:

 

 

 

 

 

popf

 

 

 

 

 

jmp

 

dword ptr cs:old_int21h ; вызываем старый обработчик

access_denied:

 

 

 

 

pop

 

bx

 

 

 

pop

 

ax

 

 

 

popf

 

 

 

 

 

push

 

bp

 

 

 

mov

 

bp, sp

 

 

 

or

 

word ptr [bp+6], 1 ; установим флаг переноса (бит 0)

; в регистре флагов, сохранённом по команде INT (это признак ошибки)

 

pop

 

bp

 

 

 

mov

 

ax, 5 ; код ошибки "доступ запрещён"

 

iret

 

; выход из обработчика прерывания

int21h_handler

endp

 

 

initialize

proc near

 

 

 

cmp

 

byte ptr cmdlen, 3 ; длина командной строки должна

 

jne

 

not_install ; быть = 3 (пробел, имя диска, двоеточие)

 

cmp

 

byte ptr cmdline[2], ’:’ ; если третий символ

 

jne

 

not_install

; неправильный

 

mov

 

al, byte ptr cmdline[1] ; преобразуем второй символ

 

and

 

al, 11011111b

; к заглавной букве

 

cmp

 

al, ’A’

 

 

 

jb

 

not_install ; код имени диска меньше ’A’

 

cmp

 

al, ’Z’

 

 

 

ja

 

not_install ; код имени диска больше ’Z’

 

mov

 

ax, 3521h ; AH-номер функции; AL-номер прерывания

 

int

 

21h

; получили адрес текущего обработчика

 

mov

 

word ptr old_int21h, bx

 

 

mov

 

word ptr old_int21h+2, es ; сохранили его

 

mov

 

ax, 2521h ; AH-номер функции; AL-номер прерывания

 

mov

 

dx, offset int21h_handler ; DS:DX-адрес нашего обработчика

 

int

 

21h ; установили вектор на свой обработчик

 

mov

 

ah, 49h ; номер функции

 

 

mov

 

es, word ptr envseg ; адрес блока с нашей копией

 

 

 

 

; окружения DOS

 

int

 

21h ; освободили память из-под окружения

 

mov

 

dx, offset initialize ; DX-адрес первого байта за концом

 

 

 

 

; резидентной части программы

 

int

 

27h ; завершить и остаться резидентным

not_install:

 

 

 

 

 

mov

 

ah, 9 ;номер функции вывода строки на экран

 

mov

 

dx, offset usage ; адрес строки

 

int

 

21h ; вывели сообщение о формате командной строки

 

ret

; закончили

 

 

usage

db

 

’Использование: isr21del c:’, 0dh, 0ah

 

db

 

’Запрещает удаление файлов на указанном диске’, 0dh, 0ah

 

db

 

’$’ ; терминатор строки

 

initialize

 

endp

 

 

 

end

 

start

 

 

86

Ю.В. Земсков. Системное и прикладное программное обеспечение. Конспект лекций, варианты заданий и методические указания в лабораторным работам. ВГИ ВолГУ, 2002 г.

12.Работа с Visual Basic for Applications

12.1. Использование VBA в редакторе MS Word

Общий алгоритм работы:

1. Открыть MS Word ( Пуск í Программы í Microsoft Word ).

2.Вызвать панель “Visual Basic” ( í Вид í Панели ).

3.Войти в режим конструктора (одноимённая кнопка на панели “Visual Basic”).

4.Вызвать панель “Элементы управления” (одноимённая кнопка на панели “Visual Basic”).

5.Разместить на странице документа нужные элементы управления (флажок, поле ввода, кнопка, переключатель, список, поле со списком, выключатель, счётчик, полоса прокрутки, надпись, рисунок, другие элементы — любые элементы ActiveX, зарегистрированные в системе).

6.Изменить, если нужно, свойства каждого элемента управления ( Свойства на панели “Элементы управления” или правая кнопка мыши). По каждому свойству доступна подсказка (F1).

7.Задать действия для нужных элементов управления ( Исходный текст ) на языке Visual Basic.

8.Выйти из режима конструктора (отжать одноимённую кнопку) и проверить, как всё работает.

9.Сохранить документ.

Пример 12.1 Разместить на листе два поля ввода (TextBox), две надписи (Label) и одну кнопку (Button), как показано на рис. 12.1.

 

 

TextBox1

 

Label2

 

 

TextBox2

 

 

Label1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CommandButton1

 

 

 

 

 

 

 

 

Рис. 12.1. Элементы управления для примера 12.1

Задать свойства элементов:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Label1.Caption

:=

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Label2.Caption

:=

+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CommandButton1.Caption :=

Сложить

ÚÚ CommandButton1

и написать процедуру, выполняемую при нажатии на кнопку:

Private Sub CommandButton1_Click() ’ моя первая процедура на VBA

Label1.Caption = " = " + Str(Val(TextBox1.Text) + Val(TextBox2.Text)) End Sub

Проверьте, как всё работает. Что происходит при вводе “неправильных” чисел?

Добавьте кнопки для остальных арифметических действий и для возведения в квадрат; для каждой задайте нужный текст процедуры обработки нажатия.

Замените Label2 на поле со списком, элементы которого задают арифметические действия. Напишите необходимый обработчик.

Пример 12.2 Вывод на экран сообщения в отдельном окне.

Разместим на пустом листе надпись и кнопку. Напишем следующий текст обработчика нажатия на кнопку:

Dim Msg, Style, Title, Help, Ctxt, Response Msg = " Будем продолжать? "

Style = vbYesNo Title = " Вопрос "

Help = "demo.hlp" ’ имя файла справки (если есть) Ctxt = 10000 ’ номер раздела справки

Response = MsgBox(Msg, Style, Title, Help, Ctxt) If Response = vbYes then

Label1.Caption = "Yes" Else

Label1.Caption = "No" End If

Что происходит при нажатии на кнопку? Изменяется ли текст надписи в соответствии с вашим ответом? Если в конце процедуры вставить оператор

SendKeys "%{F4}", True

то приложение закроется, как будто нажали Alt+F4. Проверьте. Вообще, данный оператор позволяет имитировать любые нажатия на клавиатуру (знак процента соответствует клавише Alt).

В вышеприведённом примере диалоговое окно не позволяет ввести какой-либо текст или число. Для этого служит функция

InputBox(Message, Title, DefaultValue)

Проверьте, как работает следующий фрагмент:

87

Ю. В. Земсков. Системное и прикладное программное обеспечение. Конспект лекций, варианты заданий и методические указания в лабораторным работам. ВГИ ВолГУ, 2002 г.

CommandButton1.Capture = InputBox( "Введите название для кнопки", "Ввод названия", "Нажми меня")

Пример 12.3 Диалоговая форма.

Запустите редактор Visual Basic (одноимённая кнопка на панели “Visual Basic”). В главном меню выполните í Insert í UserForm . Разместите на появившейся пустой форме три элемента управления: TextBox1, Label1

и ComandButton1. Обработчик для кнопки:

Label1.Caption = TextBox1.Text

Вернитесь в редактор Word и разместите на пустом листе кнопку, для которой введите следующий текст обработчика:

Dim UserForm1 As New UserForm1 ’ можно создавать сколько угодно одинаковых форм Load UserForm1 ’ данная строка обычно лишняя

UserForm1.Show ’ показать форму CommandButton1.Caption = UserForm1.Label1.Caption

Проверьте, как всё работает.

Если надо, чтобы форма появлялась автоматически, например, при открытии документа, то в редакторе MS Word необходимо создать макрос ( í Сервис í Макрос í Макросы Создать ) с именем AutoOpen и в нём вызвать форму. Сделайте это.

Если получилось, добавьте в текст макроса следующий фрагмент:

ActiveDocument.Contetn.MoveEnd ActiveDocument.Contetn.InsertAfter( UserForm1.Label1.Caption )

Для последовательного ввода текста в документ можно также использовать

Selection.TypeText( " ... " ) Selection.TypeParagraph ’ новый абзац

Проверьте и этот вариант.

12.2. Использование VBA в MS Excel

Общий алгоритм работы:

1. Открыть MS Excel ( Пуск í Программы í Microsoft Excel ).

2.Вызвать панель “Visual Basic” ( í Вид í Панели ).

3.Войти в режим конструктора (одноимённая кнопка на панели “Visual Basic”).

4.Вызвать панель “Элементы управления” (одноимённая кнопка на панели “Visual Basic”).

5.Разместить на странице документа нужные элементы управления (флажок, поле ввода, кнопка, переключатель, список, поле со списком, выключатель, счётчик, полоса прокрутки, надпись, рисунок, другие элементы — любые элементы ActiveX, зарегистрированные в системе).

6.Изменить, если нужно, свойства каждого элемента управления ( Свойства на панели “Элементы управления” или правая кнопка мыши). По каждому свойству доступна подсказка (F1).

7.Задать действия для нужных элементов управления ( Исходный текст ) на языке Visual Basic.

8.Создать при необходимости пользовательские формы (как и в Word’е).

9.Создать макросы (процедуры) для выполнения необходимых действий (Alt+F8 или í Сервис

íМакрос í Макросы ).

10.Разместить при необходимости новые кнопки на панели инструментов или новые команды меню,

вызывающие созданные макросы на выполнение ( í Вид í Панели í Настройка Команды Категории: Ú Макросы и перетащить настраиваемую кнопку на панель или в меню, после чего через правую кнопку мыши настроить её внешний вид и назначить ей нужный макрос).

11.Выйти из режима конструктора (отжать одноимённую кнопку) и проверить, как всё работает.

12.Сохранить документ.

Примечание: Не все перечисленные пункты обязательны.

При программировании в VBA используется объектная модель. Как и в Object Pascal, имя объекта от имени поля или метода отделяется точкой. Так, запись Application.ActiveWorkbook.Name означает, что мы обращаемся к объекту «Приложение», к его полю «Активная рабочая книга», к её полю «Имя».

Главный объект — Application (приложение); приложение может работать с несколькими рабочими книгами (Workbook), перед использованием рабочую книгу надо активизировать с помощью вызова Workbooks(book).Activate, где book — имя книги (т. е. файла *.xls). Книга содержит несколько рабочих листов (Worksheets), перед использованием каждый лист также нуждается в активизации: Worksheets(sheet).Activate, где sheet — имя листа (оно написано в левом нижнем углу листа). Только одна книга и только один лист могут быть активны в каждый момент времени. Каждый лист — это множество ячеек (cell), с которыми можно работать по отдельности или в группе. Обращение к ячейке осуществляется с помощью объекта Range("имя ячейки").

88

Ю. В. Земсков. Системное и прикладное программное обеспечение. Конспект лекций, варианты заданий и методические указания в лабораторным работам. ВГИ ВолГУ, 2002 г.

Пример 12.4 Создайте макрос (Alt+F8) с именем Test01, при выполнении которого в ячейку A1 будет записываться имя текущего файла (рабочей книги Excel), в ячейку B1 — имя текущего листа, а в ячейки с C1 по Cx — числа от 1 до x, где x — число листов в текущей рабочей книге. Соответствующий текст на языке Visual Basic:

Sub Test01()

Описания переменных: Dim book As String Dim sheet As String Dim addr As String

Узнаем имя рабочей книги:

book = Application.ActiveWorkbook.Name

’ Узнаем имя рабочего листа:

sheet = Application.ActiveSheet.Name

Запишем эти имена в нужные ячейки

текущего листа текущей рабочей книги: Workbooks(book).Activate Worksheets(sheet).Activate

Range("A1") = book Range("B1") = sheet

А теперь числа от 1 до x:

Dim s As String

Dim xList As Integer

’ Узнаем, сколько есть листов: xList = Application.Sheets.Count

addr = "C" ’ выводить будем в столбец C For x = 1 To xList

s = addr + LTrim(Str(x))

’ Функция LTrim удаляет пробелы в начале строки Range(s) = x

Next x

End Sub

Пример 12.5 Теперь создадим набор рабочих книг (набор объектов, в общем случае разнотипных, называют коллекцией). Объект «коллекция» имеет два метода: Add (добавить новый элемент в коллекцию) и Remove (удалить элемент из коллекции). Доступ к каждому элементу производится по его номеру: Item(номер), количество элементов в коллекции можно узнать, обратившись к полю Count.

Создайте новый макрос Text02:

Sub Test02()

Dim MyCollection As New Collection

Добавим новые книги в коллекцию: MyCollection.Add ("Книга 1") MyCollection.Add ("Книга 2") MyCollection.Add ("Книга 3")

Выведем сообщение о количестве книг: MsgBox (Str(MyCollection.Count))

Сообщим имя первой книги:

MsgBox (MyCollection.Item(1))

Удалим её из коллекции: MyCollection.Remove (1)

Как называется вторая книга, которая теперь уже первая? MsgBox (MyCollection.Item(1))

End Sub

Чтобы всё время не писать MyCollection, как и в Паскале, можно использовать оператор with:

With MyCollection

.Add ("Книга 1")

.Add ("Книга 2")

..................

End With

Пример 12.6 Создайте новый макрос Text03 и попытайтесь разобраться, что он делает:

Application.WindowState = xlMinimized

Application.WindowState = xlNormal

Workbooks.Add

ActiveCell.FormulaR1C1 = "12"

89

Ю. В. Земсков. Системное и прикладное программное обеспечение. Конспект лекций, варианты заданий и методические указания в лабораторным работам. ВГИ ВолГУ, 2002 г.

Range("A2").Select ActiveCell.FormulaR1C1 = "23" Range("A3").Select

ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)" Range("A4").Select

ChDir "C:\WINDOWS\Рабочий стол"

ActiveWorkbook.SaveAs FileName:="C:\WINDOWS\Рабочий стол\Книга2.xls", _ FileFormat:=xlNormal, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False

90

Ю. В. Земсков. Системное и прикладное программное обеспечение. Конспект лекций, варианты заданий и методические указания в лабораторным работам. ВГИ ВолГУ, 2002 г.

Список литературы

[1]Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. — СПб.: Питер, 2001. — 736 с.

[2]Иртегов Д.В. Введение в операционные системы. — СПб.: БХВ-Петербург, 2002. — 624 с.

[3]Олифер В.Г., Олифер Н.А. Сетевые операционные системы. — СПб.: Питер, 2002. — 544 с.

[4]Бородич Ю.С., Вальвачев А.Н., Кузьмич А.И. Паскаль для персональных компьютеров: Справочное пособие. — Минск.: Вышейшая школа, 1991. — 365 с.

[5]Касаткин А.И. Профессиональное програмирование на языке Си. Книга 3. Системное программирование. — Минск.: Вышейшая школа, 1993. — 301 с.

[6]Зубков В.С. Assembler для DOS, Windows и Unix. — М.: ДМК Пресс, 2000. — 608 с.

[7]Юров В. Assembler. — СПб.: Питер, 2000. — 624 с.

[8]Пустоваров В.И. Язык Ассемблера в программировании информационных и управляющих систем. — М.: Энтроп, Киев: «Век», 1998. — 304 с.

[9]Харт Дж.М. Системное программирование в среде Win32, 2-е изд.: Пер. с англ. — М.: Издательский дом «Вильямс», 2001. — 464 с.

[10]Данкан Р. Профессиональная работа в MS–DOS: Пер. с англ. — М.: Мир, 1993. — 509 с.

[11]Бек Л. Введение в системное программирование: Пер. с англ. — М.: Мир, 1988. —448 с.

[12]Браун Р., Кайл Дж. Справочник по прерываниям для IBM PC: В 2-х ч. — СПб: Ассоциация OILCO, 1992. — Ч.1. — 357 с. Ч.2. — 378 с.

[13]Нортон Д. Написание драйверов для Windows: Пер. с англ. — М.: Мир, 1994. — 560 с.

91

Ю. В. Земсков. Системное и прикладное программное обеспечение. Конспект лекций, варианты заданий и методические указания в лабораторным работам. ВГИ ВолГУ, 2002 г.

Материалы к экзамену по дисциплине “Системное и прикладное программное обеспечение”

 

 

Вопросы экзаменационных билетов

 

 

 

 

 

1. Операционная система. Классификация ОС.

17. Методы синхронизации потоков. Критиче-

Операционная среда. Вычислительный процесс. Си-

ские секции, мьютексы, семафоры. Примеры.

 

 

стемные ресурсы. Основные принципы построения

18. Моделирование

параллельных

взаимодей-

операционных систем.

 

ствующих процессов на сетях Петри. Классические

2. Процессы, потоки, нити. Повторно использу-

модели параллельного программирования.

 

 

емые программные модули. Реентерабельные и по-

19. Использование блокирующих сокетов при со-

вторно входимые модули.

 

 

здании распределённых приложений. Взаимодей-

3. Современные

системы программирования.

ствие с установлением соединения и без установле-

Состав и функционирование. Четыре этапа развития.

ния соединения. Примеры.

 

 

 

 

Обзор инструментальных средств.

 

20. Использование

асинхронных

сокетов

в

4. Стандартные компоненты среды визуально-

Delphi. Клиент-серверные и одноранговые прило-

го программирования. Программирование диалого-

жения. Примеры.

 

 

 

 

 

вых программ в Delphi. Примеры.

 

21. Поэлементная обработка изображений. Одно-

5. Загрузка программ. Абсолютная и относи-

родная и неоднородная обработка. Линейное контра-

тельная загрузка. Базовая адресация. Позиционно-

стирование и соляризация. Препарирование. Филь-

независимый код. Оверлеи.

 

трация. Работа с растровыми изображениями в

6. Сборка программ. Объектные модули. Биб-

Delphi. Примеры.

 

 

 

 

 

лиотеки объектных модулей. Сборка в момент за-

22. Средства DOS (int 21h) для ввода и вывода

грузки. Динамические библиотеки.

 

 

символьной информации. Примеры.

 

 

 

7. Динамические библиотеки в системе Win32.

 

 

 

23. Средства BIOS (int 10h) для ввода и вывода

Предпочтительный базовый адрес. Явная и неявная

символьной информации. Примеры.

 

 

 

загрузка DLL. Хранение ресурсов в DLL. Примеры.

24. Организация прямого ввода-вывода

в про-

8. Управление оперативной памятью. Открытая

граммах на ассемблере. Примеры.

 

 

 

 

память. Динамическое выделение памяти. Диспет-

 

 

 

 

чер памяти и алгоритм его работы. Сборка мусора.

25. Организация

устройств

ввода-вывода

в

ПЭВМ. Параллельный порт. Примеры программи-

Базовая виртуальная адресация.

 

 

рования.

 

 

 

 

 

9. Сегменты и страницы. Управление памятью в

 

 

 

 

 

системах MS-DOS, MacOS, Win16, Win32. Реализа-

26. Ввод-вывод числовой информации в програм-

ция системных вызовов. Кольца защиты.

 

мах на ассемблере. Примеры.

 

 

 

 

10. Функции ОС по управлению задачами. Пла-

27. Архитектура и программирование арифмети-

нирование и диспетчеризация. Вытесняющая и ко-

ческого сопроцессора. Примеры.

 

 

 

 

оперативная многозадачность. Приоритетное и бес-

28. Ассемблерные вставки в программах на Пас-

приоритетное планирование. Граф состояний задачи.

кале. Примеры.

 

 

 

 

 

Планирование в порядке очереди. Циклические пла-

29. Использование графических видеорежимов в

нировщики. Примеры.

 

 

программах на ассемблере. Примеры.

 

 

 

11. Функции ОС по управлению задачами. Пла-

 

 

 

30. Использование сервисов DOS для работы с

нирование с динамическими приоритетами. Абсо-

файлами. Основные операции. Примеры.

 

 

 

лютные и

относительные приоритеты. Смешанные

31. Обработка прерываний в

системе

Turbo

алгоритмы

планирования. Приоритетная

очередь с

Pascal. Примеры.

 

 

 

 

 

обратной связью. Примеры.

 

 

 

 

 

 

 

32. Программирование процедур обработки пре-

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

рываний на ассемблере. Примеры.

 

 

 

 

в сетевой ОС Novel Net Ware.

 

 

 

 

 

 

33. Организация ОС Unix. Основные операции

13. Реализация

многозадачности в

системе

при работе с файлами.

 

 

 

 

 

Windows NT/2000/XP.

 

 

 

 

 

 

 

 

 

 

 

 

 

14. Реализация многозадачности в Unix System V

34. Основные сведения о языках программирова-

Release 4.

 

 

 

ния Си и Си++. Примеры.

 

 

 

 

15. Использование функций Win32 API при со-

35. Набор и вёрстка документов в системе LTEX.

 

 

 

 

 

 

 

 

A

 

здании многопоточных приложений. Примеры.

 

 

 

 

A

 

 

 

 

 

36. Расширение возможностей системы LTEX.

16. Работа с потоками в Delphi. Примеры.

Примеры.

 

 

 

 

 

92

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]