Выполнение назначения цепочки прерываний - PullRequest
1 голос
/ 25 февраля 2011

Как видно из заголовка, я пытаюсь создать цепочку для interrut.Что я ищу, так это то, что когда вызывается прерывание по таймеру (IRQ 0) и обработчик прерывания (ISR) завершает его, выполняется мой код.Я пытаюсь сделать это на ассемблере, C или любом другом языке, который позволяет мне это делать.Я нашел пример на этой странице , но он не работает на TASM.Не могли бы вы помочь мне с этим или где я могу найти информацию об этом?Спасибо.: D

1 Ответ

3 голосов
/ 25 февраля 2011

Я больше им не пользуюсь, но просто хотел поиграть снова с, вероятно, ассемблером, который я сделал своими первыми шагами по сборке:

.186
.MODEL TINY, C

.code
ORG 100h

Entry:
; Install handler
   push   ds
   xor    cx, cx
   mov    ds, cx
   mov    ax, ds:[8*4]
   mov    dx, ds:[8*4+2]
   cli
   mov    ds:[8*4], OFFSET InterruptHandler
   mov    ds:[8*4+2], cs
   pop    ds
   mov    word ptr [OldIntVect], ax
   mov    word ptr [OldIntVect+2], dx
   sti

; Wait for the user to press a key. In the meantime you should see lots of wildcards!
   xor   ax, ax
   int   16h

; Restore original handler
   mov    ax, word ptr [OldIntVect]
   mov    dx, word ptr [OldIntVect+2]
   push   ds
   xor    cx, cx
   mov    ds, cx
   cli
   mov    ds:[8*4], ax
   mov    ds:[8*4+2], dx
   sti
   pop    ds

; Exit to DOS
   int   20h

PROC MyHandler

   mov   ah, 0Eh
   mov   al, '*'
   int   10h
   ret
ENDP


InterruptHandler:
   pushf
   call  cs:[OldIntVect]
   cmp   [busy], 0
   jne   ExitHandler ; If jumps then the timer was faster than the time it takes for MyHandler to complete

   mov   cs:[busy], 1
   pusha
   call  MyHandler ; Other options are using a pointer to function or just inlining the code here.
   popa
   mov   cs:[busy], 0

ExitHandler:
   iret

OldIntVect dd ?
busy       db ?

END Entry

Протестировано под WinXP (32-бит):

>tasm timer.asm
Turbo Assembler  Version 1.01  Copyright (c) 1988, 1989 Borland International

Assembling file:   TIMER.ASM
Error messages:    None
Warning messages:  None
Remaining memory:  481k


>tlink /t timer.obj
Turbo Link  Version 3.0 Copyright (c) 1987, 1990 Borland International

>timer
***************************

Но это, конечно, справедливо только для среды DOS (DOSBox, 32-битные версии Windows и т. Д.) И с некоторыми настройками для загрузчика максимум.

В любом случае, спасибо за прекрасное время, которое вы только что дали мне, чтобы восстановить все это: P

...