Показать сообщение отдельно

Помогите найти ошибку
  #1  
Старый 12.10.2009, 20:42
Prototype
Новичок
Регистрация: 29.07.2007
Сообщений: 4
С нами: 9887230

Репутация: 0
По умолчанию Помогите найти ошибку

Необходимо перехватить прерывание 5h
Но процедура Int_05h не выполняется

Код:
data segment
  old_cs dw ?; для хранения «старого» вектора
  old_ip dw ?; прерываний с номером 5h

  Ubdate db 0; Что нажал пользователь
data ends

code segment
   assume cs:code, ds:data
start:
mov ax,data
mov ds,ax
call clrscr

; Запомним текущий вектор 5h
	mov  ax, 3505h
	int  21h
	
	mov  old_ip, bx
	mov  old_cs, es

; Подменим обработчик
	push ds			; DS:DX <- Новый обработчик
	mov  dx, offset Int_05h

	;mov  ax, seg Int_05h
	;mov  ds, ax

	mov  ax, 2505h
	int  21h		; Установили его
	pop  ds
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov bx,0

make_delay:
	mov ah,0
	mov al,ubdate
	test ax,ax
	jnz ekran
	jmp nenado
	ekran:
	  mov ubdate,0
	  ;действия
	nenado:
jmp make_delay

q:
	; Восстановливаем все назад
	push ds
	
	mov  dx, old_ip 
	mov  ax, old_cs
	mov  ds, ax
	mov  ah, 25h
	mov  al, 9h
	int  21h
	pop  ds
	
	mov  ax, 4C00h	; И выходим
	int  21h
jmp konec
;////////////////////////////////////////////////////////////////////////////////////////////////////
Int_05h proc
       cli		;Запрещаем прерывания
       push ax
       push bx
       push cx
       push dx
       push si
       push di
       push es		;и сегментные регистры
       push ds

      mov ubdate,1

       pop ds		;Восстановим сохраненные регистры
       pop es
       pop di
       pop si
       pop dx
       pop cx
       pop bx
       pop ax
       sti		;Разрешим прерывания
       iret		;Выход (возврат в прерванное место)...
Int_05h endp

CLRSCR proc naer   ;Очищает экран
  push ax
  mov ax, 03
  int 10h
  pop ax
  ret
CLRSCR endp

konec:
code ends
end start

Последний раз редактировалось Prototype; 12.10.2009 в 21:19..
 
Ответить с цитированием