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

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


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

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

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 892
от 01.11.2007, 04:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 377, Экспертов: 21
В номере:Вопросов: 1, Ответов: 1


Вопрос № 106911: растолкуйте пожалуйста тупому как работает обработчик прерываний...

Вопрос № 106.911
растолкуйте пожалуйста тупому как работает обработчик прерываний

Приложение:

Отправлен: 26.10.2007, 18:03
Вопрос задал: Новосельцев Сергей Сергеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: An42
Здравствуйте, Новосельцев Сергей Сергеевич!
Процедура прерывания: (INT)
1. Эта программа которая имеет постоянный адрес (он вычисляется по номеру прерывания)
2. Эта программа всегда заканчивается командой IRET.
3. Получив сигнал на выполнение прерывания, процессор сначала сохраняет в стеке регистр флагов, и полный адрес возврата в прерванную программу (cs:ip), затем он загружает адрес соответствующего прерывания и тем самым переходит на процедуру прерывания.
4. Дойдя до команды IRET процессор из стека извлекает полный адрес возврата (cs:ip) и восстанавливает регистр флагов, программа переходит в ту точку, где она была прервана.

init_21h proc far ;Вход в нашу процедуру в stack помещаются (flags,cs,ip)
; cs:ip есть адрес возврата следующей за командой INT 21h в ;какой-либо программе.

;--------------------------------
;Пример: (какая-то другая программа)
; …
; mov ah,0ah
; mov dx,offset mes
; int 21h
;*** cs:ip - Вот в это место мы возвратимся после вызова прерывания
;-------------------------------

cmp ah,9 ; Проверка функции ah=09h
je ok ; если да то на ok

jmp dword ptr cs:[init_21h_proc] ; иначе процессор загружает процедуру по адресу
;cs:[init_21h_proc] и выполняет ее.
;Дойдя до IRET процессор вытолкнет из стека адрес
;возврата (cs:ip) и флаг, программа продолжится в
; нашем примере где три звездочки (*** cs:ip – Вот в это место мы возвратимся после…)

ok: ;Если ah=09h, то
push ds
push dx
push cs
pop ds

mov dx,offset mess ; в dx сохраняется новый адрес сообщения
pushf ; заносим в стек fags
call dword ptr cs:[init_21h_proc] ;заносим в стек cs:ip теперь stack (flags,cs,ip – это
; точка возврата, где следующей командой будет после
; завершение процедуры (pop dx)),
; и переходим на выполнение
; процедуры по адресу cs:[init_21h_proc]
; Дойдя до IRET вытолкнем из стека cs:ip и flags
pop dx ; и продолжим с этой строки.
pop ds
iret ; При выполнение этой команды вытолкнем из стека
; cs:ip и flags и продолжим там, где в нашем примере
; три звездочки (*** cs:ip - Вот в это место мы возврати...)

init_21h_proc dd ?

mess db 'all right !$'
init_21h endp

Удачи
Ответ отправил: An42 (статус: 5-ый класс)
Ответ отправлен: 29.10.2007, 13:32


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.61.1 от 16.10.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное