Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
128 / 109 / 103
Регистрация: 16.05.2011
Сообщений: 340
1

Модификация функции 00h прерывания int 16h

15.06.2016, 14:49. Показов 5495. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Можно ли перехватом прерывания 16h изменить значения, возвращаемые функцией 00h ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2016, 14:49
Ответы с готовыми решениями:

BIOS Int 16h
Огромная просьба ко всем форумчанам подсказать дилетанту почему код не выполняется так как должен...

Работа с функциями BIOS драйвера клавиатуры с использованием прерывания 16H
Всем доброго времени суток! Помогите пожалуйста написать программу на языке С++ с использованием...

Работа с функциями BIOS драйвера клавиатуры с использованием прерывания 16H - С++
Доброго времени суток. Помогите пожалуйста написать программу на языке С++ с использованием...

Использование прерывания int 13h функции ah=48h
Может кто знает как использовать прерывание int 13 ah 48 - получить информацию о диске. С...

5
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
15.06.2016, 15:11 2
Можно, но ЕМНИП, лучше это делать перехватом Int 15/AH=4Fh, а нужные значения подсовывать в буффер клавы по Int 16/AH=05h.
0
128 / 109 / 103
Регистрация: 16.05.2011
Сообщений: 340
15.06.2016, 15:30  [ТС] 3
Накалякал такой обработчик. Заменяется цифра 7 на S. По моей логике вроде бы должно работать. Хотя он мне почему-то выводит много символов 'S'.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
new16h:
      mark dw 1234h
      pushf
      push cx
      push di
      push es
      push ds
      in al,60h 
      cmp al,08h
      jne exit1
      mov ah,1Fh
      mov al,73h
      exit1:
      pop ds
      pop es
      pop di
      pop cx
      popf
      jmp dword[cs:old16h]
Цитата Сообщение от Charles Kludge Посмотреть сообщение
лучше это делать перехватом Int 15/AH=4Fh
С клавиатурой более менее разобрался. А вот на счет int 16h пока нет. 4Fh это ведь если прерывание вызывается клавиатурой? А как определить что было прерывание 16h?

Добавлено через 6 минут
ААааааа. Вроде пнонял. При вызове обработчика прерывания 15h мне необходимо считать с порта скан-код. Сравнить с скан-кодом клавиши 7 и произвести запись нового скан-кода в буфер клавиатуры?
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
15.06.2016, 15:39 4
Владимир_ВМ, гляньте здесь.
0
128 / 109 / 103
Регистрация: 16.05.2011
Сообщений: 340
15.06.2016, 16:20  [ТС] 5
Цитата Сообщение от Charles Kludge Посмотреть сообщение
гляньте здесь.
Тот код для меня слишком сложный, к сожалению. Буду пока с буфером колдовать.

Добавлено через 28 минут
Assembler
1
2
3
4
5
6
7
8
9
cli
      xor ax,ax
      mov ES,AX
      mov ax,[es:41ah]
      mov [es:41ch],ax
      mov ah,83
      mov al,31
      mov [es:41ah],ax
      sti
Добавил в обработчик прерывания такой код.
0
Эксперт Hardware
Эксперт Hardware
6103 / 2347 / 390
Регистрация: 29.07.2014
Сообщений: 3,108
Записей в блоге: 4
15.06.2016, 18:02 6
Владимир_ВМ, вот пример просто косвенного вызова INT-16h.
При нажатии клавиши(7) выводит вместо неё текстовую строку.
Добавив пару строк, можно организовать и в виде перехвата.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
;fasm-code......
org  100h
jmp  start
 
mes0    db  ' String: $'
mes1    db  ' Fucking INT-16h: Symbol(7)...',13,10,'$'
 
flag    db  37h                   ; горячая клавиша
old16h  dw  0,0                   ; вектор 16
 
start:  push  es                  ;
        mov   ax,3516h            ; ...сохраняем его
        int   21h                 ;
        mov   [old16h],bx         ;
        mov   [old16h+2],es       ;
        pop   es                  ;
 
        mov   ah,9                ; запрос на ввод строки
        mov   dx,mes0             ;
        int   21h                 ;
 
new16h: xor   ax,ax               ; функция нуль
        pushf                     ;
        call  dword [old16h]      ; зовём INT-16h!
        cmp   al,13               ; Enter - выход..
        je    exit                ;
        cmp   al,[flag]           ; наш клиент?
        jnz   noTarget            ; нет - не трогать (врагов)
        mov   ah,9                ; иначе: наша мессага
        mov   dx,mes1             ;
        int   21h                 ;
        mov   al,7                ; пикнем бипером
noTarget:                         ;
        int   29h                 ; остальные выводим на экран
        jmp   new16h              ; на повтор..
 
exit:   int   20h                 ; катапульта!
0
15.06.2016, 18:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2016, 18:02
Помогаю со студенческими работами здесь

Прерывание int 16h, ввод с клавиатуры
Доброго всем времени суток. У меня есть задача, в которой мне нужно воспользоваться вводом с...

Как эмулировать нажатие клавиш int 16h
Здравствуйте, работаю вот с 05h, хочу эмулировать нажатие клавиши. mov al, 02h mov ah, 05h mov...

[Debug] Функции ввода и вывода строк прерывания INT 21h
Добрый день! Подскажите как решить эти задачи с помощью Debug, покажите один пример - ввести...

Будут ли работать функции прерывания int 13h с виртуальным флоппи диском
Все привет) Меня интересует будут ли работать функции прерывания int 13h с виртуальным флоппи...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru