Ввод чего-то куда-то

Тема в разделе "WASM.BEGINNERS", создана пользователем Geddricko, 10 дек 2008.

  1. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    Народ, снова обращаюсь за помощью. Кто знает, подскажите, если можно, с примерами кода, как можно в .сом-файлах прописать ввод с клавиатуры чисел с контролем диапазона, т.е. если введено число не из диапазона, то сбросить и снова ждать ввода. И ещё: можно ли в переменную в памяти запоминать строку, введённую с клавиатуры? Если да, то подскажите как. Заранее спасибо.
     
  2. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    в готовых com файлах? ДОС?
     
  3. scf

    scf Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    386
    Clear_Energy
    Думаю, человеку нужно просто сделать две лабы по ассемблеру
     
  4. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    Я вообще хочу разобраться со вводом. Ввод прописать в исходнике - не в готовом, под Досом.
     
  5. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    я в прерываниях не шарю...
     
  6. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    В этом-то и проблема. И я не шарю. Кто знает - подключайтесь!
     
  7. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    На кого учишься? Это ведь задание по программированию?
     
  8. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    Я на программиста учусь. Но это не задание. Я независимо изучаю ассемблер.
     
  9. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
  10. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    Хм... Дубль 2:
    http://bookz.ru/authors/abel_-piter.html
    Какой ты будешь программист, если не понимаешь основ? Курс какой? Ради корочки учишься?
     
  11. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    Я на первом курсе. Не надо на меня наезжать. Я ещё только начал всё это изучать, но о прерываниях информации достаточной найти не могу. В учебниках на вводе через прерывания особо никто не останавливается. Как с API это делается - знаю, но хочу работать с .сом - файлами.
     
  12. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Clear_Energy
    Исправь пост . а то забанят. Как минимум за мат.

    Geddricko
    поиск по форуму рулит.
    Ближе к делу. Можно перехватить прерывание клавиатуры, далее смотрите регистр клавиатуры, анализируете, если код символа соответствует вашим критериям, выводите на экран обычной функцией вывода символа на экран (или самим напрямую в видеопамять).
    Про перехват прерываний в дос - читай про векторы прерываний.

    Вот кстати можно еще тут почитать, там даже рабочий исходник дают:
    http://forum.sources.ru/index.php?showtopic=231147
     
  13. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    Код (Text):
    1. ВВОД С КЛАВИАТУРЫ: РАСШИРЕННЫЙ DOS
    2.      ________________________________________________________________
    3.  
    4.      Ниже приведены команды, иллюстрирующие использование функции ввода  с
    5. клавиатуры в расширенной версии DOS:
    6.  
    7.           INAREA    DB   20 DUP (' ')   ;Область ввода
    8.                     MOV  AH,3FH         ;Запрос на ввод
    9.                     MOV  BX,00          ;Номер для клавиатуры
    10.                     MOV  CX,20          ;Максимум байт для ввода
    11.                     LEA  DX,INAREA      ;Адрес области ввода
    12.                     INT  21H            ;Вызов DOS
    13.  
    14.      Команда LEA  загружает  относительный  адрес  INAREA  в  регистр  DX.
    15. Команда INT ожидает, пока пользователь не введет cимволы с клавиатуры,  но
    16. не проверяет превышает ли число введенных символов максимальное значение в
    17. регистре CX (20 в приведенном примере).  Нажатие клавиши Return (код шест.
    18. 0D) указывает на завершение ввода.  Например, после ввода текста "PC Users
    19. Group" INAREA будет содержать:
    20.  
    21.                PC Users Group, шест.0D, шест.0A
    Могу ошибаться, но это и есть ввод под ДОСом )))))))))
    Если что не так - исправьте.
     
  14. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    Наконец-то! Спасибо TermoSINteZ!
    А про векторы прерываний где искать?
    И ещё - исходник по ссылке не понятен пока - я новичок...
     
  15. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Clear_Energy
    Не позорься, тут сразу идет вывод на экран. Без контроля символов.
    Geddricko
    В реальном режиме таблица векторов прерываний расположена в первом килобайте памяти начиная с адреса 0000:0000 и содержит 256 векторов прерываний.
    Вектор прерываний представляет собой адрес [сегмент:смещение] на процедуру обработки прерывания.
    Так прерыванию с номером 0 соответствует адрес 0000:0000, прерыванию с номером 1 – 0000:0004 и т.д. Таким образом считав 4 байта (дворд) по адресу 0000:0000 вы получите адрес процедуры обработки прерывания ошибки деления.
    Процедура должно оканчиваться командой iret (а не ret, как в обычных процедурах).
    При перехвате, делают запрет обработки прерываний, командой cli, сохраняют старый вектор (адрес) прерывания, записывают адрес своей процедуры обработки, разрешают обработку прерываний процессором, командой sti.
    Вроде ничего не забыл.
     
  16. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    Я в курсе. Это пример, а не законченная программа ))))))
     
  17. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    А что делает прерывание INT 16h ?
     
  18. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    ВВОД С КЛАВИАТУРЫ ПО КОМАНДЕ 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

    Вырезка из книги, ссылку на которую я выкладывал ))))))))
    Читай, родной, это НАДО!!!
     
  19. Geddricko

    Geddricko New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    32
    Может кто-нибудь список самых распространённых прерываний досовских дать с описанием функций? Запарился уже. Никто так конкретно и не говорит ничего - уже давно спрашиваю.
     
  20. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    ВВОД С КЛАВИАТУРЫ ПО КОМАНДЕ 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

    Вырезка из той книги.