Программирование на Ассемблере
Теперь переходим к
функциям ввода. 6.4.2. Ввод с клавиатуры. Читать данные с клавиатуры совсем несложно. Для этого нужно просто открыть
консоль (окно ввода/вывода) и читать данные из полученного канала. В
предыдущем пункте мы рассмотрели функцию Write, которая используется для
записи данных в канал. Библиотека DOS содержит подобную функцию и для
чтения из канала. Эта функция называется Read и имеет смещение -42. Функция Read, как и Write, вызывается с тремя параметрами: в D1 идентификатор канала ввода/вывода
в D2 адрес буфера для чтения данных
в D3 число байт для чтения Рассмотрим подпрограмму, которая вводит несколько символов с клавиатуры в
некоторый буфер: Read = -42 ;(6.4.2A) ...
getchr: ;получить (D3) символов с клавиатуры
move.l #inbuff,D2 ;буфер ввода - в D2
move.l dosbase(PC),A6 ;базовый адрес библиотеки dos.library
jsr Read(A6) ;вызов функции чтения из канала
rts ;и все! inbuff: blk.b 80,0 ;буфер ввода с клавиатуры Возврат из функции Read происходит при нажатии . Если при этом
количество введенных символов больше, чем требовалось (в D3), то в буфер
записываются только первые (D3) символов, а остальные символы могут быть
прочитаны при следующем обращении к Read.
Вводимые символы автоматически печатаются на экране, причем для
редактирования строки Вы можете использовать клавишу \"Backspace\". Число
символов, записанных в буфер inbuff, возвращается функцией Read в D0.
Сказанное относится только к консоли типа CON:. RAW:-консоль работает
несколько по-другому, см. далее.
Рассмотрим программу, в которой за созданием окна ввода/вывода следует
фрагмент: move #80,D3
bsr.s getchr ;читаем 80 символов
lea inbuff,A0
clr.b 0(A0,D0) ;добавляем нулевой байт в конце
bsr pmsg ;выводим содержимое буфера
bp: nop ;место для контрольной точки
Загрузив эту программу в отладчик и поставив контрольную точку на адрес
\"bp\" (в системе SEKA для этого нужно ввести \"bp\" после запуска программы),
Вы сможете наблюдать за работой функции Read:
После запуска программы на экране появится окно с курсором в левом верхнем
углу.
|