Vous êtes sur la page 1sur 3

Programacin en Ensamblador

Carlos F. Jimnez P. carlosfjimenezp@yahoo.com.mx Cali Julio 14 de 2005


;La Interrupcion

Ejemplo del uso interrupciones

; La interrupcin es un mecanismo mediante el cual se interrumpe el flujo secuencial de un programa para entrar a una ; rutina de atencin de interrupcin, la interrupcin se origina por una seal del hardware con la cual se solicita al ; Procesador atencin a un evento que normalmente algo infrecuente. ; En el PC existen mltiples fuentes de interrupcin por ejemplo el temporizador 8253 genera interrupciones peridicas, la ; Tarjeta de sonido y el puerto paralelo en modo EPP y ECP tambin son fuente de interrupciones ; Para utilizar una interrupcin en ensamblador son los siguientes: Se escribe la rutina o sub programa que se ejecutara ; Para atender la interrupcin a continuacin se asigna el vector de interrupcin correspondiente al esta rutina mediante la ; Funcin 25 de la INT 21h. ; Es importante tener en cuenta que el sistema operativo puede tener ya asignadas las interrupciones a otras funciones por ; Lo tanto es importante hacer una copia del offset de la rutina de atencin antes de sobrescribirla con la nuestra y al ; finalizar el programa restaurar el vector original. ; A continuacin se presenta un ejemplo de la captura del vector de interrupcin 08 el cual corresponde al temporizador ; Programable 8253 del pc. ;Comenzamos por definir el segmento de pila o stack reservando para este 256 bytes. STACK SEGMENT PARA STACK 'STACK' DB 256 DUP(0) STACK ENDS ASSUME CS:COD , DS:DATA ; Se difine el segmento de datos y declaramos algunas variables DATA SEGMENT ; Registros para guardar la direccin del vector actual al cual se encuentra asignada al int 08 VECCS DW ? ; Segmento en el cual se aloja la rutina actual de atencin VECIP DW ? ; Offest de la rutina actual de atencin. ;Otras variables NUMERO DB ? CONTEO DB ? CERO DB 0 ;Mensajes POR DB 'Detector de interrupcin 08.','$' POR2 DB 'Carlos Fernando Jimnez. Bucaramanga 2000 ','$' irqtimer DB 'Interrupcin 08 detectada','$' DATA ENDS

;Segmento de cdigo COD SEGMENT MAIN PROC FAR MOV AX,data MOV DS,AX ;Sobreponemos los segmentos de cdigo y datos

PORTADA: ; Desplegamos el mensajeDetector de interrupcin 08 MOV AH,09H MOV DX, OFFSET POR INT 21H PUSH AX ;Return MOV AH,06H MOV DL,0DH INT 21H ; RETORNO DE CARRO MOV AH,06H MOV DL,0AH INT 21H ; ALIMENTACION DE LINEA POP AX ; Desplegamos el mensaje Carlos Fernando Jimnez. Bucaramanga 2000 MOV DX, OFFSET POR2 ; INT 21H PUSH AX ;Reurn MOV AH,06H MOV DL,0DH INT 21H ; RETORNO DE CARRO MOV AH,06H MOV DL,0AH INT 21H ; ALIMENTACION DE LINEA POP AX ; Guardar vector original del timer el cual corresponde a la interrupcin 08 ; Mediante la funcin 35 de la int 21h ; Entradas AL =35, AH = Vector de interrupcin a guardar ; Salidas BX =IP, ES= Segmento MOV AX,3508H INT 21H MOV AX,DATA MOV DS,AX MOV VECIP,BX MOV VECCS,ES

;Se debe reasignar el vector del segmento de datos ya ;que la funcin anterior rescribe DS ;Guardamos el IP ;Guardamos el segmento

; Escribir vector timer nuevo ; Entradas AL =25, AH = Nuevo vector de interrupcin, DX =IP, DS= Segmento MOV AX,2508H MOV DX,CS MOV DS,DX ;30 MOV DX,OFFSET TIMERN INT 21H ;INICIO: MAIN1: JMP MAIN1 MAIN ENDP

; Nueva rutina de atencin a la interrupcin 08 o del timer. TIMERN: MOV AX,data MOV DS,AX ; Desplegamos el mensaje 'Interrupcin 08 detectada MOV AH,09H MOV DX, OFFSET irqtimer INT 21H ;Return PUSH AX MOV AH,06H MOV DL,0DH INT 21H ; RETORNO DE CARRO MOV AH,06H MOV DL,0AH INT 21H ; ALIMENTACION DE LINEA POP AX IRET ; Retorno de interrupcin al flujo normal del programa COD ENDS END MAIN

Vous aimerez peut-être aussi