прерывания |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
прерывания |
Catty |
Сообщение
#1
|
Бывалый Группа: Пользователи Сообщений: 239 Пол: Женский Реальное имя: Юлия Репутация: 3 |
Осуществить коррекцию прерывания Int 9 (от клавиатуры)
так, чтобы: а) выполнялись все действия системного обработчика данного прерывания; б) при нажатии одной из клавиш-переключателей вывести на эк- ран название этой клавиши. клавиша-переключатель: Печать копии экрана. Генерируется при нажатии на кла- виатуре клавиши PrtScr. Обычно используется для печати образа экрана. Для процессора 80286 генерируется при выполнении машинной команды BOUND, если проверяемое значение вышло за пределы заданного диапазона. :flowers: Сообщение отредактировано: Catty - -------------------- For every evil under the sun
There is a remedy or there is none If there is one - try to find it If there is none - never mind it! |
Altair |
Сообщение
#2
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Catty , вот тебе для коррекции int9h, (программа Volvo).
Она работает но PrtScr ей не поймаешь, потому что в порт не пишется эта клавиша.. Код uses dos, crt; Var wasPrtScr: boolean; {признак нажатия принтс скрина} do_exit: boolean;{признак нажатия esc} Old_09: Pointer; {указатель на старую процедуру обработки} KbdIntVec: procedure;{процедура - старый обработчик прерывания} {$f+} Procedure New9; Interrupt; {новая процедура обработки прерывания} Var Scan: Byte;{скэн код клавиши} Begin Scan := Port[ $60 ]; {читаем скэн код из порта клавы} { вот тут должна быть проверка на скэн-код PrtScr } wasPrtScr := (Scan = $14); {это не работает} do_exit := (scan = $01); { Это - Escape } { If wasPrtScr Then Else} Begin Inline( $9C ); {сохраняем регистры} KbdIntVec; {вызываем стандартный обработчки} End; End; {$f-} var k:byte; BEGIN GetIntVec($9, @KbdIntVec); {получаем вектор прерывания} GetIntVec($9, Old_09); {и указатель} SetIntVec($9, Addr(New9)); {ставим свой обработчик} repeat if wasPrtScr then begin writeln('Print Screen pressed'); wasPrtScr := false; end; if keypressed then {нажата клавиша} begin k:=ord(readkey); {читаем клавишу} if k=0 then begin k:=ord(readkey); writeln('ext: ',k) end else writeln(chr(k)); end; until do_exit; SetIntVec($9, Old_09); {ставим старый вектор прерывания, убирая свой} END. Я тут посмотрел, и нашел как отличить CTRL+ALT+DEL.. вот так: Код procedure MyInt9; far; assembler; asm push ax in al,60h cmp al,53h {Є« ўЁи Del} jne @Exit push ds xor ax,ax mov ds,ax mov al,ds:[417h] and al,0Ch cmp al,0Ch {Ctrl+Alt ?} jne @No in al,61h mov ah,al or al,80h out 61h,al xchg ah,al out 61h,al mov al,20h out 20h,al pop ds pop ax iret @No: pop ds @Exit: pop ax push seg JmpFar push Offset JmpFar end; А клоню я к тому, что тебе к нашим ассемблерщикамнадо -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Catty |
Сообщение
#3
|
Бывалый Группа: Пользователи Сообщений: 239 Пол: Женский Реальное имя: Юлия Репутация: 3 |
Ой спасибо Олежик! А можно какие то комментарии понаписывать, а то мне ёё всё таки объяснять надо преподу! :flowers:
-------------------- For every evil under the sun
There is a remedy or there is none If there is one - try to find it If there is none - never mind it! |
Altair |
Сообщение
#4
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Да не мне спасибо, а volvo!
коменты напишу щас -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Altair |
Сообщение
#5
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
сделал.... читай тот пост
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Catty |
Сообщение
#6
|
Бывалый Группа: Пользователи Сообщений: 239 Пол: Женский Реальное имя: Юлия Репутация: 3 |
Спасибо ребята! Только вот вопрос, а почему прога ничего не выдает????
Ты говорил тут что-то не срабатывает? -------------------- For every evil under the sun
There is a remedy or there is none If there is one - try to find it If there is none - never mind it! |
Altair |
Сообщение
#7
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
как это не срабатывает? на нажатия принт скринатолько не срабатывает. Все остальное по заданию.
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
Сообщение
#8
|
Гость |
Catty,
попробуй вот эту программку (понажимай Ctrl, Alt, левый и правый Shift ...) Для выхода - Escape... Прикрепленные файлы __IV.PAS ( 1.17 килобайт ) Кол-во скачиваний: 443 |
Catty |
Сообщение
#9
|
Бывалый Группа: Пользователи Сообщений: 239 Пол: Женский Реальное имя: Юлия Репутация: 3 |
спасибо Volvo :flowers:
-------------------- For every evil under the sun
There is a remedy or there is none If there is one - try to find it If there is none - never mind it! |
Текстовая версия | 23.05.2024 22:30 |