РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты в разделе Номер выпуска: | 1666 | Дата выхода: | 06.11.2017, 15:15 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 46 / 18 | Вопросов / ответов: | 1 / 1 | Консультация # 191643: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующие вопросы по книге О.А.Калашникова, глава 10: 1) правильно ли я понимаю, что "резидентная программа" - это либо com- либо exe-программа находящаяся в ОЗУ после запуска данной программы и после соответственно нажатия клавиши Enter ? 2) и что "резиден... Консультация # 191643: Здравствуйте, уважаемые эксперты!
Прошу вас ответить на следующие вопросы по книге О.А.Калашникова, глава 10:
1) правильно ли я понимаю, что "резидентная программа" - это либо com- либо exe-программа находящаяся в ОЗУ после запуска данной программы и после соответственно нажатия клавиши Enter ?
2) и что "резидентная программа" продолжает выполняться, находясь в ОЗУ в режиме реального времени то есть имеется какая то связь на исполнение "резидентной программы" в микропроцессоре в реальном времени ?
3) что значит "программа находится в ОЗУ" ? она (программа) выполняется в настоящее время в микропроцессоре или что-то другое ?
4) параграф 10.3,
... резидентная программа должна перехватывать то или иное пре рывание, с тем, чтобы программист или другие программы могли обратиться к ней.
Прерывание — это своего рода процедура (подпрограмма), которая имеет не название (например, print_string), а номер. как Вы объясняли ранее, прерывание - это не совсем процедура, а скорее прерывание можно определить как последовательность определенных асемблеровских команд. вопросы - а) правильно ли я понимаю, что прерывание (последовательность команд) можно написать-определить на ассемблере точно также как и процедуру - вообще говоря и в частности ? или прерывание пре-определено заранее каким-либо образом ? каким образом ? б) что значит "резидентная программа должна перехватывать то или иное прерывание" ? в) я не могу понять каким образом резидентная программа, которая является обычной com- или exe-программой-файлом и ко торая находится в ОЗУ в режиме реального времени, может перехватывать совершенно другую последовательность команд (прерывание) ? г) что значит "перехватывать прерывание" ? д) почему "должна перехватывать" ? е) как понять и что значит "с тем, чтобы программист или другие программы могли обратиться к ней (то есть к резидентной программе)" ? ж) как понять и что значит - "могли обратиться к ней" ? з) каким образом и как программист или другие программы могут обращаться к программе (резидентной), которая уже находится в ОЗУ, то есть в режиме исполнения в реальном-то времени ? и) что значит "обращаться" (к резидентной программе) ? к) что значит "ничто не мешает программисту перехватить ... прерывание ..." ? как программист может перехватить программный процесс (прерывание) ? это происходит в режиме реального времени ? или все-таки правильнее сказать, что не программист перехватывает прерывание, а это делает все-таки резидентная программа, которая находится в ОЗУ ?
Спасибо. Дата отправки: 01.11.2017, 14:57 Вопрос задал: ialmiev (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Зенченко Константин Николаевич (Модератор): Здравствуйте, ialmiev! Следующий код демонстрирует работу резидентов:
model tiny code org 100h begin: mov ax,3 ; устанавливаем третий режим, принудительно int 10h mov ax,3509h;читаем вектор прерывания аппаратного обработчика клавиатуры int 21h mov old09o,bx;запоминаем его mov old09s,es ;сегмент :смещение mov ax,2509h;устанавливаем свой обработчик lea dx,new09 int 21h mov ah,9 ;выводим строку для красоты с сообщением lea dx,dbMes int 21h mov ah,10 ;читаем строку пользователя lea dx,dbStr int 21h mov ax,2509h;возвращаем старый обработчик mov dx,old09o mov ds,old09s int 21h ret ;выход old09o dw ? old09s dw ? dbMes db 10,10,13,'Enter string:$' dbStr db 120,?,120 dup(?) new09: push es push ax mov ax,0B800h;адресуем сегмент на видео буфер mov es,ax in al,60h;читаем порт контролера клавиатуры push ax and al,7Fh;получаем скен-код клавиши cmp al,1eh;это клавиша А-Ф pop ax mov ah,'T' ;считаем что клавиша нажата jnz @@01;нет не наша клавиша and al,80h;проверяем признак нажатия-отпускания клавиши jz @@00;нажата переход mov ah,'F' ;отпущенна @@00: mov al,ah mov ah,0fh mov es:[10h],ax ;ну тут как с рожицей @@01: pop ax pop es jmp dword ptr cs:[old09o] ;передаем управление старому обработчику end begin Установив свой обработчик на контролер клавиатуры, запускается подпрограмма ввода строки. Каждый раз когда нажимается - отпускается клавиша, получает управление наш обработчик. Прочитав скен-код клавиши( у каждой клавиши свой, это потом система определяет в соответствии с режимами: верхний-нижний регистр, русская-английская раскладка и т.д.), наш обработчик выделяет сам код клавиши- младшие семь бит, также определяет нажата или отпущена клавиша - старший бит и выводит результат с помощью прямой записи в видео буфер. Наше обрабатываемое событие клавиша А-Ф. И только потом обработчик передает управление старому обработчику клавиатуры, чтобы система могла обработать полностью само событие.
Удачи!  | Консультировал: Зенченко Константин Николаевич (Модератор) Дата отправки: 06.11.2017, 10:49 5 нет комментария ----- Дата оценки: 06.11.2017, 12:12 | Рейтинг ответа: 0 |
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий