• Domingo 22 de Diciembre de 2024, 08:25

Autor Tema:  Programa Residente?  (Leído 2194 veces)

maikmr

  • Miembro MUY activo
  • ***
  • Mensajes: 112
    • Ver Perfil
Programa Residente?
« en: Martes 19 de Abril de 2005, 23:45 »
0
Hola compañeros del foro, necesito crear un programa residente en memoria, y tengo duda de cual funcion de la interrupcion 21h usar y ademas de como usar la porque me parece que es la 31h, pero no estoy seguro. ademas, quiero saber la menero correcta de operar un residente porque hasta donde e podido ver hay que guardar en la pila el PSP el AX, el CX y el DS, pero no se tengo alguas dudas, asi que si tambien no fura mucha melestisa pedirles un ejemplo, se los agradeceré.

Ah y otra cosa el programa residente que quiero crear necesito que entre en ejecucion mediante la combinacion de una seria de teclas como ctrl + j ó alt + r o algo asi, y para ello encontre que se debe parchera el vector de interrupciones y direccionar en el campo del de la int. del teclado el segmento y desplazamiento del segmento de codifgo de me programa que verifica la convinacion de teclas deseadas (ctrl + j) por ejemplo, pero no se como hacerlo, no se que interrupcion usar y que funcion, no tengo ni idea de como hacerlo.
Haci que les agradeseré la ayuda.

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Programa Residente?
« Respuesta #1 en: Miércoles 20 de Abril de 2005, 02:43 »
0
un ejemplo muy conocido:

Código: Text
  1.  
  2. pantalla equ 0b800h
  3. .model tiny
  4. .code
  5. include bdos.mac
  6. org 100h
  7. inicio:
  8.         jmp instalar
  9.         se_g dw 0
  10.         des dw 0
  11.         hora db 8 dup('?')
  12. reloj proc
  13.        cli
  14.        push ax
  15.        push bx
  16.        push cx
  17.        push dx
  18.        push si
  19.        push di
  20.        push ds
  21.        push es
  22.       &#59;;*****************
  23.        mov ax,40h
  24.        mov es,ax
  25.        mov si,6ch
  26.        mov ax,es:[si]
  27.        mov dx,es:[si+2]
  28.        mov bx,32761
  29.        div bx
  30.        shr ax,1
  31.       &#59;;*******
  32.        jnc p0
  33.        add dx,bx
  34.  p0:   mov ch,al
  35.        mov ax,dx
  36.        mov dx,0
  37.        mov bx,1092
  38.        div bx
  39.        mov cl,al
  40.        mov ax,dx
  41.        mov dx,0
  42.        mov bx,18
  43.        div bx
  44.        mov dh,al
  45.       &#59;;******
  46.        mov bh,10
  47.        mov ah,0
  48.        mov al,ch
  49.        div bh
  50.        add ax,3030h
  51.        mov word ptr hora,ax
  52.        mov hora+2,':'
  53.        mov  ah,0
  54.        mov al,cl
  55.        div bh
  56.        add ax,3030h
  57.        mov word ptr hora+3,ax
  58.        mov hora+5,':'
  59.        mov ah,0
  60.        mov al,dh
  61.        div bh
  62.        add ax,3030h
  63.        mov word ptr hora+6,ax
  64.        mov hora+8,':'
  65.        mov ah,0
  66.        mov al,dl
  67.        div bh
  68.        add ax,3030h
  69.        mov word ptr hora+9,ax
  70.       &#59;;*********************************
  71.        mov ax,pantalla
  72.        mov es,ax
  73.        mov di,2*(80-length hora)
  74.        mov cx,length hora
  75.        mov si,0
  76. mover:
  77.        mov al,hora[si]
  78.        mov es:[di],al
  79.        inc di
  80.        mov byte ptr es:[di],07h
  81.        inc si
  82.        inc di
  83.        loop mover
  84. fin:
  85.        pop es
  86.        pop ds
  87.        pop di
  88.        pop si
  89.        pop dx
  90.        pop cx
  91.        pop bx
  92.        pop ax
  93.        sti
  94.        iret
  95. reloj endp
  96.  
  97. instalar:
  98.           GET_INT 1ch,se_g,des
  99.           SET_INT 1ch,,reloj
  100.           TSR_COM<offset instalar-offset inicio+100h>
  101.  
  102.  
  103.  
  104. ;;fin:  int 20h
  105.  
  106. end inicio
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113. GET_INT macro n,s,o
  114.      ifnb <n>
  115.         mov al,n
  116.      endif
  117.      mov ah,35h
  118.      int 21h
  119.      ifnb <s>
  120.         mov s,ES
  121.      endif
  122.      ifnb <o>
  123.         mov o,BX
  124.      endif
  125. endm
  126. SET_INT macro n,s,o
  127.      ifnb <n>
  128.         mov al,n
  129.      endif
  130.      ifnb <s>
  131.         mov DS,s
  132.      endif
  133.      ifnb <o>
  134.         mov DX,offset o
  135.      endif
  136.      mov ah,25h
  137.      int 21h
  138. endm
  139.  
  140.  
  141. TSR_COM macro etq,c
  142.     mov dx,( etq-1)/16+1
  143.     ifnb <c>
  144.         mov al,c
  145.     endif
  146.     mov ah,31h
  147.     int 21h          
  148. endm
  149.  
  150.  
  151.  
  152.  

maikmr

  • Miembro MUY activo
  • ***
  • Mensajes: 112
    • Ver Perfil
Re: Programa Residente?
« Respuesta #2 en: Jueves 21 de Abril de 2005, 18:02 »
0
Gracias por responder, solo que agradeceria si me puede pasar esta inclucion "include bdos.mac" ya que al no tenerla no se pude compilar el codigo, pues quiero ver que es lo que hace, y si talves estubiera comentado podria entenderlo mejor.

Aun si Gracias!
Si alguna otra persona me puede ayudar con algo mas.

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Programa Residente?
« Respuesta #3 en: Domingo 24 de Abril de 2005, 04:49 »
0
para no poner la bios.mac puse las macros que usa el programa al final del mismo; asi que si pone slas macros en el encabezado sustituyendo por el el include... no deberias tener problemas.