Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 200
∙ повысить рейтинг »
Evgen aka Chuma
Статус: 5-й класс
Рейтинг: 0
∙ повысить рейтинг »
quirck
Статус: 1-й класс
Рейтинг: 0
∙ повысить рейтинг »

∙ Assembler

Номер выпуска: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!
Следующий код демонстрирует работу резидентов:

Код (Assembler) :: выделить код
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 благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное