Дипломированных специалистов «Информатика и вычислительная техника»


Пример программы консольного ввода-вывода



Download 12,06 Mb.
Pdf ko'rish
bet236/357
Sana22.02.2022
Hajmi12,06 Mb.
#115195
TuriДиплом
1   ...   232   233   234   235   236   237   238   239   ...   357
Bog'liq
assembler uchebnik dlya vuzov 2-e izd YuRXUW1

Пример программы консольного ввода-вывода
Для демонстрации функций высокоуровневого ввода-вывода в окно консоли раз-
работаем программу, которая вводит с клавиатуры строку и отображает ее в заго-
ловке окна консоли, а затем выводит эту строку в окне консоли с изменением те-
кущей позиции курсора и цвета текста (листинг
Листинг 16.15. Фрагменты приложения
- программа консольного ввода-вывода
;с изменением атрибутов выводимого текста


Программирование консольных Windows-приложений
. code
start
proc near
входа в программу:
стандартные дескрипторы ввода-вывода
push
call GetStdHandle
;dOut - дескриптор консольного вывода
push
call GetStdHandle
mov
- дескриптор консольного ввода
строку
курсор в позицию (2,6)
mov
mov
push
push
call
push
push
push
push
push
call
cmp
2
con
dOut
eax, 0
exi t
0
offset
если неуспех
80
offset TitleText
ReadConsoleA
eax, 0
количество
введенных символов
размер буфера TitleText для ввода
если неуспех
введенную строку в заголовок окна консоли:
push offset TitleText
call
успех вывода заголовка
test
exit
строку в окно консоли с различных позиций и с разными цветами
курсор в позицию (2,5)
выведем 10 раз
атрибуты
mov
mov bl,10000001b
ml: push ecx
inc
inc con.yy
push con
push dOut
call
cmp
jz exit ;если неуспех
атрибуты выводимых символов:
получать их циклически сдвигом - регистр BL
mov
push eax
push dOut
call
cmp
exi t
строку
push 0
;если неуспех
push
символов
push
push
push
call
количество выведенных на экран
offset NumWri
NumWri
строки для вывода на экран
offset
строки для вывода на экран
dOut
продолжение


442 Глава
Создание Windows-приложений на ассемблере
Листинг
 (продолжение)
е а х , 0
exit ;еспи неуспех
pop ecx
loopml
e x i t :
из приложения
Каждый консольный процесс имеет собственный список функций-обработчи-
ков, которые вызываются
когда происходят определенные события, на-
пример, при активном окне консоли пользователь нажимает комбинацию клавиш
или
При запуске консольного приложения список функ-
ций-обработчиков содержит только
по умолчанию
которая
вызывает функцию ExitProcess. Консольный процесс может добавлять или уда-
лять дополнительные функции-обработчики, вызывая функцию
Handler:
BOOL
BOOL
Данная функция имеет два параметра:
it
— указатель на
приложением функцию Handler-
Routine, которая должна быть добавлена или удалена;
Add — логическое значение:
функция должна быть добавлена;
— функцию необходимо удалить.
Функция HandlerRoutine — это определенная приложением функция обратного
вызова. Консольный процесс использует эту функцию, чтобы обработать нажатия
клавиш управления. На самом деле HandlerRoutine —
для определенного приложением имени функции:
BOOL
Параметр DwCtrlType определяет тип сигнала управления, получаемого обработ-
чиком. Этот параметр может принимать одно из следующих значений:
К CTRL_C_EVENT = 0 — сигнал, имитирующий нажатие клавиш
может быть
получен из двух источников: с клавиатуры или от функции GenerateConsole-
CtrlEvent;
9 CTRL_BREAK_EVENT = 1 — сигнал, имитирующий нажатие клавиш Ctrl+Break, мо-
жет быть получен из двух источников: с клавиатуры или от функции Generate-
CTRL_CLOSE_EVENT = 2 — сигнал, который система посылает всем процессам, под-
ключенным к данному консольному приложению,
пользователь его за-
крывает (выбирая пункт Close в системном меню окна консоли или щелкая на
кнопке завершения задачи в диалоговом окне Менеджера задач);
= 5 — сигнал, который посылается всем консольным процес-
сам, когда пользователь завершает работу в системе (этот сигнал не указывает,
какой именно пользователь завершает работу);
ii CTRL_SHUTDOWN_EVENT = б — сигнал, который система посылает всем консоль-
ным процессам при подготовке к выключению машины.


Программирование консольных Windows-приложений 443
Функция
должна возвратить логическое значение: 1 — если она
обрабатывает конкретный сигнал управления; 0 — для обработки полученного со-
бытия будет использоваться другая функция-обработчик HandlerRoutine из списка
функций-обработчиков этого процесса (то есть включенная в этот список раньше
данной функции).
Как уже было упомянуто, каждый консольный процесс может определить не-
сколько функций HandlerRoutine, которые связываются в цепочку. Первоначально
этот список содержит только заданную по умолчанию функцию-обработчик, вы-
зывающую функцию
что в результате приводит к завершению текуще-
го консольного приложения. Консольный процесс добавляет или удаляет допол-
нительные функции-обработчики, вызывая функцию
которая
не затрагивает список функций-обработчиков других процессов. Когда консоль-
ный процесс принимает любой из сигналов управления (см. выше), то вызывается
последняя зарегистрированная функция-обработчик, если она не возвращает то
управление передается следующему (предыдущему) зарегистрированному обра-
ботчику и так продолжается до тех пор, пока один из обработчиков не возвратит
Если ни один из обработчиков этого не сделал, то вызывается обработчик, задан-
ный по умолчанию.
Установка обработчиков для сигналов CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT
и CTRL_SHUTDOWN_EVENT дает процессу возможность выполнить специфичные для
него действия по корректному завершению приложения. Пользовательская функ-
ция HandlerRoutine может быть вызвана для того, чтобы выполнить следующие дей-
ствия:
вызвать функцию ExitProcess для завершения
возвратить 0 (ложь) — это означает, что завершение приложения должен вы-
полнить обработчик, заданный по умолчанию;
возвратить 1 — в этом случае никакие другие функции-обработчики не вызы-
ваются, и система отображает модальное окно диалога с запросом о необходи-
мости завершения процесса.
В последнем случае система также отображает окно диалога, если процесс не
отвечает определенное время (5 секунд для
и 20 секунд для
CTRL_LOGOFF_EVENT и
Процесс может использовать функ-
цию
чтобы запретить системе отображать окно диа-
лога. В этом случае система просто заканчивает процесс, когда HandlerRoutine воз-
вращает истину или когда истекает определенный период времени.
В листинге 16.16 приведен пример пользовательского обработчика события —
ввода комбинации
или
За основу взята предыдущая программа.

Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   232   233   234   235   236   237   238   239   ...   357




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish