Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: FERNIIIIN en 28 Mayo 2019, 06:23 am



Título: crear interrupción por hardware
Publicado por: FERNIIIIN en 28 Mayo 2019, 06:23 am
Hola a todos, tengo una super pregunta, ¿Como se crea una interrupción por hardware?

Tengo un programa que hace un conteo del 0 al 59 y cuando llega a 60 pasa denuevo al 0 y reinicia el ciclo, hasta ahi voy bien, pero no se como hacer que al presionar la tecla "1" se active un retraso y que al presionar "2" se active otro retraso diferente.


En código tengo lo siguiente:
Código
  1. org 100h
  2.  
  3. .model small
  4.  
  5. .stack 100
  6.  
  7. .data
  8. u db 0
  9. d db 0
  10. v db 0
  11. tiempo db 0
  12.  
  13. .code
  14.  
  15. start:
  16. mov cx,00h ; inicializo contador en cero
  17.  
  18. inicio:
  19. mov tiempo,cl
  20. ;call retraso1s  ;salto a retraso de 1s
  21. ;call retraso5s  ;salto a retraso de 1s
  22. ;call retraso10s ; salto a retraso de 10s
  23. mov cl,tiempo
  24. cmp cl,10 ; compara si en el contador es mayor a 9
  25. jc aumento ;Destino es menor que origen
  26. ;jne repite ; sino es verdadera la ultima comparacion regresa a repite
  27. jz separar ;Numeros iguales
  28. jnz separar ;Destino mayor a origen
  29. cmp d,06h
  30. jc inicio ;Destino es menor que origen
  31. jz start ;Numeros iguales
  32.  
  33.  
  34. separar:
  35. mov al,cl
  36. AAM
  37. mov u,al
  38. mov al,ah
  39. AAM
  40. mov d,al
  41. ;cmp d,06h
  42. ;jz salir ;Numeros iguales
  43. mov ah,02h
  44. mov dl,d
  45. add dl,30h
  46. int 21h  
  47. mov ah,02h
  48. mov dl,u
  49. add dl,30h
  50. int 21h
  51. inc cl ; incremento el contador en uno
  52. jmp inicio
  53. ret
  54.  
  55. aumento:
  56. mov dl,cl ; muevo el valor del contador a dl para imprimir
  57. inc cl ; incremento el contador en uno
  58. add dl,30h ; sumo 30h a dl para convertirlo al codigo ascii y poder imprimirlo
  59. mov ah,02h ; funcion para imprimir un caracter
  60. int 21h ; imprimo
  61. jmp inicio
  62. ret      
  63.  
  64.  
  65. retraso1s:
  66.    MOV     CX, 0FH
  67.    MOV     DX, 4240H
  68.    MOV     AH, 86H
  69.    INT     15H    
  70. ret
  71.  
  72. retraso4s:
  73.    MOV     CX,3aH
  74.    MOV     DX,9680H
  75.    MOV     AH,86H
  76.    INT     15H    
  77. ret
  78.  
  79. retraso5s:
  80.    MOV     CX,45H
  81.    MOV     DX,9680H
  82.    MOV     AH,86H
  83.    INT     15H    
  84. ret
  85.  
  86.  
  87. retraso10s:
  88.    MOV     CX, 98H
  89.    MOV     DX, 9680H
  90.    MOV     AH, 86H
  91.    INT     15H    
  92. ret
  93.  
  94.  
  95. salir:
  96. .exit
  97. end
  98.  


Espero que me puedan dar una idea de como continuar


Título: Re: crear interrupción por hardware
Publicado por: xv0 en 29 Mayo 2019, 22:41 pm
Hola di no me equivoco la int 15 puede interceptar el teclado, por que no haces un bucle y depende del valor haga una cosa u otra, y luego al finalizar el retraso que vuelva de nuevo al bucle.

Saludos.


Título: Re: crear interrupción por hardware
Publicado por: FERNIIIIN en 17 Junio 2019, 05:07 am
lamento la respuesta tardía, lo realice y me funciono.
 :-[ :-[

Gracias, por tu apoyo.