Добавлен: 30.10.2018
Просмотров: 546
Скачиваний: 6
Title DB „Текст в заголовке‟, 0 ; строка заканчивается нулевым байтом
. CODE ; начало кодового фрагмента
Main PROC NEAR ; точка входа в программу
CALL AlloсConsole
LEA EAX, Title ; адрес строки – в EAX
PUSH EAX ; а потом – в стек
CALL SetConsoleTitleA
PUSH 0 ; в стек – нулевой код завершения
CALL ExitProcess
Main ENDP
END Main
Больше возможностей по работе с консолью дают функции
ReadConsole и WriteConsole. Первая обеспечивает простейший ввод текста с
клавиатуры без анализа управляющих клавиш с занесением результата во
внутренний буфер программы. Вторая функция выводит текст на экран.
Для использования этих функций надо сначала получить 2
дескриптора: стандартный дескриптор ввода и стандартный дескриптор
вывода. Оба дескриптора получаются с помощью функции GetStdHandle с
параметром-константой (-10) (для ввода) и (-11) (для вывода). Для
сохранения дескрипторов надо зарезервировать память (два двойных слова).
Параметры функции ReadConsole:
дескриптор ввода
адрес буфера для сохранения вводимой строки
размер буфера в байтах
адрес области памяти для сохранения количества реально введенных
символов
резервный параметр со значением 0
Параметры функции WriteConsole:
дескриптор вывода
адрес буфера для хранения выводимой строки
размер буфера в байтах
адрес области памяти для сохранения количества реально выводимых
символов
резервный параметр со значением 0
Структура программы:
1. Объявление всех используемых функций как внешних
2. Объявление используемых данных
Bufer DB 50 DUP (?) ; буфер на 50 байтов
HandIn DD ? ; здесь будет дескриптор входного потока
HandOut DD ? ; а здесь – выходного
Len DD ? ; здесь будет реальная длина введенной строки
3. Команды
PUSH -10
CALL GetStdHandle
MOV HandIn, EAX ; сохраним дескриптор входного потока
PUSH -11
CALL GetStdHandle
MOV HandOut, EAX ; сохраним дескриптор выходного потока
PUSH 0 ;занесение в стек входных параметров функции ReadConsole
PUSH OFFSET Len ; адрес области Len в стек
PUSH 50
PUSH OFFSET Bufer ; адрес области Bufer в стек
PUSH HandIn
CALL ReadConsole
CMP EAX , 0 ; проверить код завершения
JZ Exit ; переходим на обработку неудачного ввода
PUSH 0
PUSH OFFSET Len
PUSH Len
PUSH OFFSET Bufer
PUSH HandOut
CALL WriteConsole
Кроме трех перечисленных, для консольного ввода/вывода можно
использовать еще около 50 функций, например:
SetConsoleCursorPosition: установка позиции курсора для ввода или
вывода
SetConsoleTextAttribute: установка цветовых атрибутов текста и его
фона
ReadConsoleInput: низкоуровневый ввод с консоли с возможностью
обработки управляющих клавиш и событий от мыши
WriteConsoleOutput: низкоуровневый вывод в экранный буфер с
возможностью использования нескольких буферов (окон)
Практические задания к теме №13.
Задание 1. Оформить выполненные ранее программы с подпрограммами в
виде двухмодульных, вынеся во вспомогательный модуль текст
подпрограммы.
Задание2. Выполнить простейшие консольные Windows-программы с
помощью утилит tasm32, tlink32 и td32.