After the output of the modified interrupt (the question is, would you like to reboot?), It does not return the value of the old interrupt back. He must, after I click 1, perform a reboot. I work in TASM, here is an example of my code.
.386 dseg segment use16 text1 db 13,10,'Y 1t res? y1/n0 $' dseg ends cseg segment use16 assume ds:dseg, cs:cseg m1: mov cx, dseg mov ds, cx ; читаем из вектора 19 табл.прерыв. 4 байта и сохр. их в стек (прямое обращение) mov ax,0 mov es,ax mov di, 19h shl di,2 mov bx, di mov ax, [di+2] push bx push ax ; записываем в 19 вектор табл. перыв. адрес своей процедуры lea dx,textart mov es:bx,dx mov dx,cs mov es:[bx+2],dx ; вызов нашей процедуры int 19h cmp al,31h jne short m2 ; если не равно 1, то просто завершаем ; запишем в табл.прерыв. сохраненные адреса ранее pop bx pop ax mov [di],bx mov [di+2], ax int 19h m2: mov ah,4ch; завершение программы int 21h textart proc mov ah, 9 ; выводим строку lea dx,text1 int 21h mov ah,1h ;ввод 0 или 1, по идее то что будет введено будет в AL int 21h iret textart endp cseg ends end m1