Como este es un curso trucho vamos a hacer un salto al tema de las interrupciones. Habiamos visto que en la Rom Bios existen las rutinas basicas para que la maquina arranque, se testee a si misma, y cargue de donde pueda el sistema operativo DOS. Ademas busca en la memoria las ROM de cada dispositivo, dandoles por turno el control. Bien. Al principio de la memoria (posicion 0000:0000h) hay una tabla, llamada tabla de interrupciones. Cada vez que el micro encuentra una orden INT seguida de un numero, salta a la posicion de memoria correspondiente que encuentra en esta tabla. Como cuando prendemos la maquina en la ram no hay nada o basura, la memoria rom bios se encarga de tomar alguna de las interrupciones, escribiendo las direcciones de memoria en esa tabla. La rom de la tarjeta de video toma las interrupciones correspondientes al video (como la 10h), Y la rom de cada dispositivo va escribiendo una direccion que apunta a si misma. Esa es la razon por la que se pueden conectar tantos dispositivos distintos a las pc sin que haya grandes conflictos. Podemos ver la tabla de interrupciones con debug. Cargamos Debug, y hacemos d0:0,ff y nos muestra las primeras FF posiciones de memoria. int0 int1 int 2 int 3 etc.. . . . 0000:0000 69 92 1B 00 F4 06 70 00-C3 E2 00 F0 F4 06 70 00 i.....p.......p. 0000:0010 F4 06 70 00>54 FF 00 F0<43 EB 00 F0 EB EA 00 F0 ..p.T...C....... 0000:0020 A5 FE 00 F0 51 0B 42 13-97 EA 00 F0 97 EA 00 F0 ....Q.B......... 0000:0030 97 EA 00 F0 97 EA 00 F0-57 EF 00 F0 F4 06 70 00 ........W.....p. 0000:0040 EE 0B 42 13 4D F8 00 F0-41 F8 00 F0 FF 0B 42 13 ..B.M...A.....B. 0000:0050 39 E7 00 F0 5A 05 45 0C-2E E8 00 F0 D2 EF 00 F0 9...Z.E......... 0000:0060 00 E0 00 F0>1B 06 45 0C<6E FE 00 F0 35 0C 42 13 ......E.n...5.B. 0000:0070 7A 0B 42 13 A4 F0 00 F0-22 05 00 00 90 54 00 C0 z.B....."....T.. 0000:0080 D1 40 1B 00 FD 40 1B 00-4F 03 4A 23 8A 03 4A 23 .@...@..O.J#..J# 0000:0090 17 03 4A 23 EA 42 1B 00-71 43 1B 00 D6 A1 1B 00 ..J#.B..qC...... 0000:00A0 14 0C 42 13 10 05 42 0E-D7 40 1B 00 D7 40 1B 00 ..B...B..@...@.. 0000:00B0 D7 40 1B 00 D7 40 1B 00-3F 01 F1 11 9F 01 F2 11 .@...@..?....... 0000:00C0 EA D8 40 1B 00 EA 00 F0-D7 40 1B 00 D7 40 1B 00 ..@......@...@.. cada interrupcion ocupa 4 bytes de la tabla, por ejemplo: la interrupcion 0 ocupa los bytes 0,1,2 y 3. (69 92 1B 00) esto da una direccion que es 001B: 9269. Si el micro encuentra la instruccion INT 0, busca la direccion y continua an la direccion 001B:9269 Ahora podemos hacer una maldad: la interrupcion 5 es la que se llama cuando apretamos la tecla print screen, e imprime la pantalla. La direccion esta a partir de 0:13. La interrupcion 19 bootea de nuevo la maquina, como cuando hacemnos control-alt-del. Ahora reemplacemos la direccion de la interrupcion 5 con la de la interrupcion 19, haciendo E0:14, 1B 06 45 0C o lo que halla en su interrupcion 19 despues q y salimos al dos. Aparentemente no pasa nada. Lo unico que hicimos es reemplazar la direccion de la rutina que atiende a la int 5 (print screen) con la que atiende a la int 19 . Ahora si apretamos la tecla print screen en vez de imprimir la pantalla, se resetea la maquina. No es increible? (continuara?) "Esos programas en cassete nos sirven: donalos al museo de computacion!"