Ich versuche zum Erstellen eigenen unterbrechen ... für int 40h, int 42h, int 45h.i das Vektor-Design erstellt hat, aber nach der Anweisung IRET nennt es Fehler ist zeigt, die Anweisung noch nicht definiert wird ... wie sie beheben diese ...warum Interrupt-Routine nicht stoppt?
ich versuche, Subtraktion, Division und Multiplikation hinzufügen, um den Interrupt mit i bisher versucht:
code segment
assume cs:code,ds:code
org 1000h
mov ax,0000h
mov ds,ax
mov bx,40h*4
mov ax,offset add
mov word ptr [bx],ax
mov dx,0
mov word ptr[bx+2],dx
mov bx,42*4
mov ax,offset sub
mov word ptr [bx],ax
mov dx,0
mov word ptr[bx+2],dx
mov bx,45*4
mov ax,offset div
mov word ptr [bx],ax
mov dx,0
mov word ptr[bx+2],dx
mov bx,48*4
mov ax,offset mul
mov word ptr [bx],ax
mov dx,0
mov word ptr[bx+2],dx
mov cx, 01h;
cmp cx, 01h
jz 40hh
cmp cx, 02h
jz 42hhh
cmp cx, 03h
jz 45hhh
cmp cx, 04h
jz 48hhh
40hh:
int 40h
42hhh:
int 42h
45hhh:
int 45h
48hhh:
int 48h
add:
mov dl,40h
mov dh,30h
add dh,dl
iret
sub:
mov dl,40h
mov dh,30h
sub dl,dh
iret
mul:
mov al,4h
mov bh,3h
mul bh
iret
div:
mov ax,40h
mov cx,05h
div cx
iret
e: ret
int 21h
Ich habe nicht die Energie haben, um zu versuchen, dieses Problem zu beheben, aber Sie tun müssen, mehr als du in den Interrupts selbst machst. Werfen Sie einen Blick auf eine gute grundlegende Referenz auf DOS-basierte Assembly und Interrupt-Hooking –
Außerdem fallen Sie gerade durch Ihre vermeintlichen Interrupt-Handler, wie Ihr Code endet, was eine schreckliche Idee ist. –
kommentieren Sie Ihren Code. Verwenden Sie außerdem einen Debugger, um einen Einzelschritt durchzuführen. Das ist kein [mcve]; es könnte viel kürzer sein. –