Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Assembler
Перезагрузить страницу Написание собственного прерывания (проверьте)
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
RenZo RenZo вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.10.2011
Post Написание собственного прерывания (проверьте) - 21.04.2012, 22:25

Здравствуйте! Задание состоит в том, что надо написать новый обработчик прерывания, заменить им существующий, после чего восстановить исходный. Проверьте пожалуйста, правильно ли написал программу.
Номер и значение заменяемого вектора:
08h - прерывание от системного таймера - генерируется автоматически
Действия, реализуемые программой обработки прерываний:
Печать строки
Текст:
asm Код:
EofLine EQU '$'
;------------Стек программы------------------------
AStack  SEGMENT STACK
    DW  400 DUP(0)  ;Выделение 1Кб под стэк
AStack  ENDS
;------------Сегмент данных------------------------
DATA    SEGMENT
    KEEP_ES DW 0        ;Буфер для хранения сегмента
    KEEP_IP DW 0        ;и смещения старого прерывания
    STR DB 'Вектор прерывания заменен',0AH,0DH,EofLine
DATA    ENDS
;-------------Сегмент кода-------------------------
CODE    SEGMENT
    ASSUME  SS:AStack,DS:DATA,CS:CODE  
START   PROC    NEAR    
    ;Сохранение адреса старого прерывания
    ;Функция 35 прерывания 21H возвращает текущее
    ;значение вектора прерывания,  помещая значение сегмента в ES,  а
    ;смещение в BX.
    mov AH,35h
    mov AL,08h
    int 21h
    mov KEEP_ES,ES
    mov KEEP_IP,BX
    ;Задание нового обработчика 08h
    ;Для установки написанного прерывания  в  поле  векторов
    ;прерываний  используется  функция 25H прерывания 21H, которая
    ;устанавливает вектор прерывания на указанный адрес.
    push DS
    mov DX,OFFSET Newint
    mov DS,AX
    mov AH,25h     ;функция установки вектора
    mov AL,08h     ;номер вектора
    int 21h           ;меняем прерывание
    pop DS
;------------Тело нового обработчика (печать строки)---------------
Newint  PROC FAR
    push AX
    mov DX,OFFSET STR
    mov AH,9
    int 21h    
    pop AX
    mov AL,20h
    out 20h,AL
    iret
Newint  ENDP
;----Восстанавливаем адрес старого обработчика-----
    CLI
    push DS
    mov DX,KEEP_IP
    mov AX,KEEP_ES
    mov DS,AX
    mov AH,25h
    mov AL,08h
    int 21h           ;восстанавливаем вектор
    pop DS
    STI
    ret
START   ENDP
CODE    ENDS        ;Конец сегмента
    END start   ;Конец программы
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прерывания работают или нет Dmt C++ Builder 5 14.06.2011 04:14
Создание собственного компилятора white_ghost Вопросы начинающих программистов 11 15.11.2010 13:45
Создание собственного стиля окна Hroft Visual C++ 3 19.02.2008 21:42
Обработка прерывания Anatolich Железо. Написание драйверов 3 28.04.2007 16:21
Создание собственного Wizard в С++ Андрейка C. Visual C++ 6 12.09.2006 13:17
Прерывания от com порта в qnx jyanis Железо. Написание драйверов 0 24.05.2006 19:10
Перехват прерывания как реализовать TheOS Железо. Написание драйверов 5 09.12.2005 13:43
Создание собственного движока на С++ Tatsiana Visual C++ 4 23.09.2005 01:37
Получение прерывания от модема Eri© Delphi 0 29.02.2004 15:07
Как сделать прерывания циклов imported_Ежик Lisp 2 21.10.2003 14:20
Использование собственного класса в JSP Anonymous Java 3 05.10.2002 07:19
Не работает 12-я функция прерывания 33h Anonymous Assembler 5 06.08.2002 14:11



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов