Programación General > ASM (Ensamblador)
Programa Residente?
(1/1)
maikmr:
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:
un ejemplo muy conocido:
--- Código: Text --- pantalla equ 0b800h.model tiny.codeinclude bdos.macorg 100hinicio: jmp instalar se_g dw 0 des dw 0 hora db 8 dup('?')reloj proc cli push ax push bx push cx push dx push si push di push ds push es ;;***************** mov ax,40h mov es,ax mov si,6ch mov ax,es:[si] mov dx,es:[si+2] mov bx,32761 div bx shr ax,1 ;;******* jnc p0 add dx,bx p0: mov ch,al mov ax,dx mov dx,0 mov bx,1092 div bx mov cl,al mov ax,dx mov dx,0 mov bx,18 div bx mov dh,al ;;****** mov bh,10 mov ah,0 mov al,ch div bh add ax,3030h mov word ptr hora,ax mov hora+2,':' mov ah,0 mov al,cl div bh add ax,3030h mov word ptr hora+3,ax mov hora+5,':' mov ah,0 mov al,dh div bh add ax,3030h mov word ptr hora+6,ax mov hora+8,':' mov ah,0 mov al,dl div bh add ax,3030h mov word ptr hora+9,ax ;;********************************* mov ax,pantalla mov es,ax mov di,2*(80-length hora) mov cx,length hora mov si,0mover: mov al,hora[si] mov es:[di],al inc di mov byte ptr es:[di],07h inc si inc di loop moverfin: pop es pop ds pop di pop si pop dx pop cx pop bx pop ax sti iretreloj endp instalar: GET_INT 1ch,se_g,des SET_INT 1ch,,reloj TSR_COM<offset instalar-offset inicio+100h> ;;fin: int 20h end inicio GET_INT macro n,s,o ifnb <n> mov al,n endif mov ah,35h int 21h ifnb <s> mov s,ES endif ifnb <o> mov o,BX endifendmSET_INT macro n,s,o ifnb <n> mov al,n endif ifnb <s> mov DS,s endif ifnb <o> mov DX,offset o endif mov ah,25h int 21hendm TSR_COM macro etq,c mov dx,( etq-1)/16+1 ifnb <c> mov al,c endif mov ah,31h int 21h endm
maikmr:
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:
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.
Navegación
Ir a la versión completa