Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056

Обработчик прерывания звуковой карты

28.04.2018, 00:17. Показов 1308. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здр. имеются процедуры перехвата и восстановления обработчика прерывания звуковой карты Sound Blaster..
пжл, проконсультируйте меня для чего дополнительно нужно еще разрешать и запрещать прерывание?
ведь обычно для других прерываний такие действия не требуются.. также хотелось бы более подробных разъяснений по командам..

Assembler
1
sbirq equ 5     ;только IRQ0-IRQ7
;процедура hook перехватывает прерывание звуковой карты Sound Blaster и разрешает его
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hook proc near
mov ax,3508h+sbirq
int 21h 
 
mov word ptr old,bx 
mov word ptr old+2,es
 
mov ax,2508h+sbirq 
mov dx,offset handler
int 21h
 
mov cl,1
shl cl,sbirq
not cl         ;построим битовую маску
in al,21h     ;прочитаем OCW1
and al,cl     ;разрешим прерывание
out 21h,al   ;запишем OCW1
 
ret
hook endp
;процедура restore восстановим обработчик и запретим прерывание
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
restore proc near
mov ax,2508h+sbirq 
lds dx,dword ptr old
int 21h 
 
mov cl,1
shl cl,sbirq     ;построим битовую маску
in al,21h            ;прочитаем OCW1
or al,cl               ;запретим прерывание
out 21h,al           ;запишем OCW1
 
ret
restore endp
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.04.2018, 00:17
Ответы с готовыми решениями:

Обработчик прерывания таймера: при одном проходе вывод на экран символ «?» , а на следующем проходе «#»
На языке ассемблер написать резидентную программу, которая бы обрабатывала прерывание по времени (timer) и при одном проходе выводила бы...

Обработчик прерывания клавиатуры
По идее обработчик отлавливает нажатие на клавишу SHIFT и устанавливает соответствующий бит в слове флагов клавиатуры, но он этого не...

Собственный обработчик прерывания клавиатуры - закрыть программу по нажатию ESC
Изменить код так, чтобы по нажатию клавиши esc программа закрывалась Data segment time dw 18 ;переменная таймера 18,2 сигнаа...

13
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
28.04.2018, 00:37
Цитата Сообщение от proc3nt Посмотреть сообщение
пжл, проконсультируйте меня для чего дополнительно нужно еще разрешать и запрещать прерывание?
Лень запускать MS-DOS, но вот у меня сейчас работает комп с Win-98, а это почти-что DOS и там имеем
C:\>debug
-i 21
B8
то есть включены только IRQ0 IRQ1 IRQ2 IRQ6
остальные не включены. Их прерывания ловить не кому. А их вектора указывают куда-то в BIOS и подозреваю, что там вся обработка - ругаться на экране и вешать компьютер.
2
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
28.04.2018, 00:46  [ТС]
Цитата Сообщение от Ethereal Посмотреть сообщение
-i 21
Ethereal, а напомни-ка мне, что делает ключ -i

Цитата Сообщение от Ethereal Посмотреть сообщение
B8
1011 1000 b, почему тогда только IRQ0 IRQ1 IRQ2 IRQ6 если единичные биты в других положениях установлены?
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
28.04.2018, 00:54
Цитата Сообщение от proc3nt Посмотреть сообщение
ведь обычно для других прерываний такие действия не требуются..
Для программных прерываний не требуются. А для тех аппаратных, что могут произойти от неизвестной заранее аппаратуры очень даже и требуются. И по другому быть не может, ведь прерывание от неизвестной аппаратуры неизвестно как обрабатывать. А IRQ5 как раз не имеет никого назначения, это в чистом виде прерывание от неизвестной аппаратуры.

Добавлено через 1 минуту
Цитата Сообщение от proc3nt Посмотреть сообщение
Ethereal, а напомни-ка мне, что делает ключ -i
"-" это приглашение к вводу команды у DEBUG.EXE
"i 21" - команда прочитай-ка мне 21h-й порт

Добавлено через 2 минуты
Цитата Сообщение от proc3nt Посмотреть сообщение
1011 1000 b, почему тогда только IRQ0 IRQ1 IRQ2 IRQ6 если единичные биты в других положениях установлены?
У 1011 1000 нулевые биты 0-й 1-й 2-й 6-й, значит разрешены IRQ0 IRQ1 IRQ2 IRQ6, единичные биты 3-й 4-й 5-й 7-й, значит IRQ3 IRQ4 IRQ5 IRQ7 запрещены.
2
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
28.04.2018, 00:58  [ТС]
Цитата Сообщение от Ethereal Посмотреть сообщение
У 1011 1000 нулевые биты 0-й 1-й 2-й 6-й
ну да, это я немного общитался..
Цитата Сообщение от Ethereal Посмотреть сообщение
А IRQ5 как раз не имеет никого назначения
а почему берется именно пятое аппаратное, если там сложение используется? в результате вроде должно получиться 350Dh
Цитата Сообщение от proc3nt Посмотреть сообщение
mov ax,3508h+sbirq
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
28.04.2018, 01:11
Цитата Сообщение от proc3nt Посмотреть сообщение
а почему берется именно пятое аппаратное, если там сложение используется? в результате вроде должно получиться 350Dh
Потому-что нулевое прерывание это от деления на ноль, а прерывания от сигналов IRQ начинаются с 8-го. IRQ0 дает 8-е прерывание, то есть от таймера. IRQ1 дает 9-е прерывание, то есть от клавиатуры. И так далее. Номер прерывания = номер IRQ + 8, для IRQ = 0..7
Линии IRQ3..IRQ7 из этого диапазона выведены на шину, т.е. это запросы прерывания от внешних устройств. Для них номера прерываний B..F соответственно.

Добавлено через 3 минуты
Короче, линия IRQ5 бесхозная на шине. У нее нет назначения, как хошь, так и используй. Ее и задействует SoundBlaster. В итоге получается, что прерывание от SoundBlaster-а это прерывание 0Dh = 8+5
2
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
28.04.2018, 01:13  [ТС]
Цитата Сообщение от Ethereal Посмотреть сообщение
команда прочитай-ка мне 21h-й порт
а за что отвечает порт 21h? почему именно он при чтении выдает маску доступности аппаратных прерываний?
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
28.04.2018, 01:31
Порт 21h - это один из портов контроллера прерываний. У первых IBM PC это была отдельная микросхема, Intel 8259a называлась и у нее было 28 ног, а сейчас ее функционал в более крупную микросхему какого-то моста засунули. Но программная совместимость сохраняется, иначе старые программы работать не будут.
Так вот из 21h-го порта читается маска запрещения прерываний от линий IRQ из этого контроллера прерываний, а при записи в этот порт эта маска в этот контроллер записывается. Никакого другого назначения у этого порта нет.
1
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
28.04.2018, 01:37  [ТС]
Ethereal, спасибо.. все разложено по полочкам.. тему можно закрывать..
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
28.04.2018, 01:46
Да не, у меня там неточность, поскольку писал по памяти. 21h-й порт может использоваться еще и для инициализации контроллера прерываний, если предварительно соответствующую команду подать в 20h-й порт. Вот тут подробности http://devotes.narod.ru/Books/3/ch05_10j.htm
Но на такие детали можно не обращать внимание. Если просто читать/писать 21h-й порт, то это чтение/запись маски прерываний. А инициализация контроллера прерываний - это такая штука, что вот как BIOS сделал и не трогай, иначе компьютер встанет колом.
1
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
28.04.2018, 01:51  [ТС]
хорошо, будем знать..
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
28.04.2018, 08:16
Цитата Сообщение от proc3nt Посмотреть сообщение
что делает ключ -i
почему тогда только IRQ0 IRQ1 IRQ2 IRQ6
а почему берется именно пятое аппаратное
а за что отвечает порт 21h?
..ого! топовые вопросы пошли?
давно-бы пора справочником обзавестись, в любой макулатуре это расписано по-полочкам.
0
28.04.2018, 08:43

Не по теме:

Да я, был грешок, засомневался уж не троллят ли меня. У ТС-а 140 лучших ответов. Отвечал в непонятках.

0
28.04.2018, 09:59

Не по теме:

Цитата Сообщение от Ethereal Посмотреть сообщение
Да я, был грешок, засомневался уж не троллят ли меня. У ТС-а 140 лучших ответов. Отвечал в непонятках.
В ассемблера как и в жизни, кто-то лучше знает DOS, кто-то WINDOWS, кто-то *NIX, а другие вообще на железе сидят. У кого-то основной компилятор MASM, у кого-то TASM, у кого-то FASM или какой нибудь *ASM, а некоторорц вообще "эмансипанты". Каюсь, я сам ещё не по всем портам лазил. :-[

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.04.2018, 09:59
Помогаю со студенческими работами здесь

Обработчик прерывания(звук)
Здравствуйте,у меня такое задание: разработать обработчик прерывания который при нажатии некоторой клавиши издаст звук.(мелодия) У меня...

Обработчик прерывания клавиатуры: замена символа
Помогите пожалуйста написать свой обработчик клавиатурного прерывания: меня в частности интересует, как сделать программу резидентной,...

Резидентный обработчик 21h прерывания (из 10-й главы Калашникова)
Имеется вот такой код резидентного обработчика прерываний, написанный предположительно на MASM данная программа должна после выполнения...

Резидентный обработчик прерывания клавиатуры: замена символа "a" на "b"
Нужно создать резидентную программу, которая будет заменять определенную букву на другую при вводе с клавиатуры. На данный момент вышло...

Резидентный обработчик прерывания 21h (по книге Калашникова)
Всем добрый день. Изучаю ассемблер по книге Калашникова . Программа перехватывает 21-ое прерывание и подменивает выводимую строку. ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru