Народ, снова обращаюсь за помощью. Кто знает, подскажите, если можно, с примерами кода, как можно в .сом-файлах прописать ввод с клавиатуры чисел с контролем диапазона, т.е. если введено число не из диапазона, то сбросить и снова ждать ввода. И ещё: можно ли в переменную в памяти запоминать строку, введённую с клавиатуры? Если да, то подскажите как. Заранее спасибо.
Хм... Дубль 2: http://bookz.ru/authors/abel_-piter.html Какой ты будешь программист, если не понимаешь основ? Курс какой? Ради корочки учишься?
Я на первом курсе. Не надо на меня наезжать. Я ещё только начал всё это изучать, но о прерываниях информации достаточной найти не могу. В учебниках на вводе через прерывания особо никто не останавливается. Как с API это делается - знаю, но хочу работать с .сом - файлами.
Clear_Energy Исправь пост . а то забанят. Как минимум за мат. Geddricko поиск по форуму рулит. Ближе к делу. Можно перехватить прерывание клавиатуры, далее смотрите регистр клавиатуры, анализируете, если код символа соответствует вашим критериям, выводите на экран обычной функцией вывода символа на экран (или самим напрямую в видеопамять). Про перехват прерываний в дос - читай про векторы прерываний. Вот кстати можно еще тут почитать, там даже рабочий исходник дают: http://forum.sources.ru/index.php?showtopic=231147
Код (Text): ВВОД С КЛАВИАТУРЫ: РАСШИРЕННЫЙ DOS ________________________________________________________________ Ниже приведены команды, иллюстрирующие использование функции ввода с клавиатуры в расширенной версии DOS: INAREA DB 20 DUP (' ') ;Область ввода MOV AH,3FH ;Запрос на ввод MOV BX,00 ;Номер для клавиатуры MOV CX,20 ;Максимум байт для ввода LEA DX,INAREA ;Адрес области ввода INT 21H ;Вызов DOS Команда LEA загружает относительный адрес INAREA в регистр DX. Команда INT ожидает, пока пользователь не введет cимволы с клавиатуры, но не проверяет превышает ли число введенных символов максимальное значение в регистре CX (20 в приведенном примере). Нажатие клавиши Return (код шест. 0D) указывает на завершение ввода. Например, после ввода текста "PC Users Group" INAREA будет содержать: PC Users Group, шест.0D, шест.0A Могу ошибаться, но это и есть ввод под ДОСом ))))))))) Если что не так - исправьте.
Наконец-то! Спасибо TermoSINteZ! А про векторы прерываний где искать? И ещё - исходник по ссылке не понятен пока - я новичок...
Clear_Energy Не позорься, тут сразу идет вывод на экран. Без контроля символов. Geddricko В реальном режиме таблица векторов прерываний расположена в первом килобайте памяти начиная с адреса 0000:0000 и содержит 256 векторов прерываний. Вектор прерываний представляет собой адрес [сегмент:смещение] на процедуру обработки прерывания. Так прерыванию с номером 0 соответствует адрес 0000:0000, прерыванию с номером 1 – 0000:0004 и т.д. Таким образом считав 4 байта (дворд) по адресу 0000:0000 вы получите адрес процедуры обработки прерывания ошибки деления. Процедура должно оканчиваться командой iret (а не ret, как в обычных процедурах). При перехвате, делают запрет обработки прерываний, командой cli, сохраняют старый вектор (адрес) прерывания, записывают адрес своей процедуры обработки, разрешают обработку прерываний процессором, командой sti. Вроде ничего не забыл.
ВВОД С КЛАВИАТУРЫ ПО КОМАНДЕ BIOS INT 16H ________________________________________________________________ Команда BIOS INT 16H выполняет специальную операцию, которая в соответствии с кодом в регистре AH обеспечивает следующие три функции ввода с клавиатуры. AH=00: Чтение символа. Данная функция помещает в регистр AL oчередной ASCII символ, введенный с клавиатуры, и устанавливает скэн-код в регистре AH. (Скэн-коды объясняются в следующем разделе). Если на клавиатуре нажата одна из специальных клавишей, например, Номе или F1, то в регистр AL заносится 00. Автоматическое эхо символа на экран по этой функции не происходит. AH=01: Определение наличия введенного символа. Данная функция сбрасывает флаг нуля (ZF=0), если имеется символ для чтения с клавиатуры; очередной символ и скэн-код будут помещены в регистры AL и AH соответственно и данный элемент останется в буфере. AH=02: Определение текущего состояния клавиатуры. Данная функция возвращает в регистре AL состояние клавиатуры из адреса памяти шест.417: Бит 7 Состояние вставки активно (Ins) 6 Состояние фиксации верхнего регистра (Caps Lock) переключено 5 Состояние фиксации цифровой клавиатуры (Num Lock) переключено 4 Состояние фиксации прокрутки (Scroll Lock) переключено 3 Нажата комбинация клавишей Alt/Shift 2 Нажата комбинация клавишей Ctrl/Shift 1 Нажата левая клавиша Shift 0 Нажата правая клавиша Shift Вырезка из книги, ссылку на которую я выкладывал )))))))) Читай, родной, это НАДО!!!
Может кто-нибудь список самых распространённых прерываний досовских дать с описанием функций? Запарился уже. Никто так конкретно и не говорит ничего - уже давно спрашиваю.
ВВОД С КЛАВИАТУРЫ ПО КОМАНДЕ BIOS INT 16H ________________________________________________________________ Команда BIOS INT 16H выполняет специальную операцию, которая в соответствии с кодом в регистре AH обеспечивает следующие три функции ввода с клавиатуры. AH=00: Чтение символа. Данная функция помещает в регистр AL oчередной ASCII символ, введенный с клавиатуры, и устанавливает скэн-код в регистре AH. (Скэн-коды объясняются в следующем разделе). Если на клавиатуре нажата одна из специальных клавишей, например, Номе или F1, то в регистр AL заносится 00. Автоматическое эхо символа на экран по этой функции не происходит. AH=01: Определение наличия введенного символа. Данная функция сбрасывает флаг нуля (ZF=0), если имеется символ для чтения с клавиатуры; очередной символ и скэн-код будут помещены в регистры AL и AH соответственно и данный элемент останется в буфере. AH=02: Определение текущего состояния клавиатуры. Данная функция возвращает в регистре AL состояние клавиатуры из адреса памяти шест.417: Бит 7 Состояние вставки активно (Ins) 6 Состояние фиксации верхнего регистра (Caps Lock) переключено 5 Состояние фиксации цифровой клавиатуры (Num Lock) переключено 4 Состояние фиксации прокрутки (Scroll Lock) переключено 3 Нажата комбинация клавишей Alt/Shift 2 Нажата комбинация клавишей Ctrl/Shift 1 Нажата левая клавиша Shift 0 Нажата правая клавиша Shift Вырезка из той книги.