Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2012, 22:19   #1
Renzzo
Новичок
Джуниор
 
Регистрация: 25.02.2012
Сообщений: 2
Восклицание Написание собственного прерывания (проверьте)

Здравствуйте! Задание состоит в том, что надо написать новый обработчик прерывания, заменить им существующий, после чего восстановить исходный. Проверьте пожалуйста, правильно ли написал программу.
Номер и значение заменяемого вектора:
08h - прерывание от системного таймера - генерируется автоматически
Действия, реализуемые программой обработки прерываний:
Печать строки
Текст:
Код:
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   ;Конец программы
Renzzo вне форума Ответить с цитированием
Старый 23.04.2012, 11:03   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Код:
    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
Вопрос: зачем вы обработчик прерывания разместили в основной процедуре? что будет с точки зрения логики программы, когда при выполнении дойдёт до команды iret?

Цитата:
Код:
 mov DX,OFFSET Newint
    mov DS,AX
а что за содержимое в AX, которым вы инициализируете сегментный регистр?
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 23.04.2012 в 11:09.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание собственного 3d движка ZvEr_HaCkEr Gamedev - cоздание игр: Unity, OpenGL, DirectX 16 03.12.2011 13:16
написание собственного события Bayazet Общие вопросы Delphi 11 07.04.2009 13:12
Разработка собственного класса 1ntro Общие вопросы C/C++ 3 16.12.2007 14:54
Установка собственного курсора Amateur Общие вопросы Delphi 4 13.11.2007 05:42
Создание собственного компонента Леха207 Помощь студентам 1 03.07.2007 12:45