день добрый! Прошу помощи . У меня почему-то не работают примеры, которые я вырулила из инета по установкам прерываний. Причем ни один не работает. Я нашла синтаксис, пыталась просмотреть дебугером испоняемый код. Когда установленное прерывание вызываю как подпрограмму- то работает, а если как прерыванеи- нет. Не найду причину, прошу помочь.
Один из примеров брала по этой ссылке
http://nickp.fatal.ru/index.php?page=./bibl/assembler/asmtut5.htmпо другой брала следующий пример. В комментариях те опреаторы ,что пыталась исполнять. Интересно, у кого-то он работать будет? Буду признательна за ответы.
code segment use16
assume CS:code,DS:data
;Главная процедура
main proc
mov AX,data ; Инициализация сегментного
mov DS,AX ; регистра DS
;Сохраним исходный вектор
mov AH,35h ; Функция получения вектора
mov AL,60h ; Номер вектора
int 21h
mov word ptr old_08,BX ; Смещение исходного обработчика
mov word ptr old_08+2,ES ; Сегмент исходного обработчика
;Установим наш обработчик
mov AH,25h ;Функция заполнения вектора
mov AL,60h
mov DX,offset new_08 ; Смещение нашего обработчика
; call new_08
push DS ; Сохраним DS=data
push CS ; Перепишем CS в DS
pop DS ; через стек. DS:DX->new_08
;mov AX,seg new_08 ; Получим сегмент с процедурой new_08
;mov DS,AX ; Перепишем его в DS
int 21h
pop DS ; Восстановим DS=data
; Продолжение основной программы
; Перед завершением программы восстановим исходный вектор
lds DX,old_08 ; Заполним DS:DX из old_08
mov AH,25h ; Функция заполнения вектора
mov AL,60h ; Номер вектора
int 21h
mov AH,01h ; Функция DOS вывода на экран
int 21h
mov AX,4C00h ;Функция завершения программы
int 21h
main endp
;Процедура обработчика прерываний
new_08 proc
push AX ;Сохраним исходное значение AX
mov AH,0Eh ; Функция вывода символа
mov AL,'5' ; Выводимый символ
int 10h ; Переход в BIOS
mov AL,20h ; Разблокировка прерываний
out 20h,AL ; в контроллере прерываний
pop AX ; Восстановим AX
iret ; Возврат в прерванную програму
new_08 endp
data segment
old_08 dd 0 ; Ячейка для хранения исходного вектора
data ends
stk segment
db 256 dup(0)
stk ends
code ends
end main