Академический Документы
Профессиональный Документы
Культура Документы
Smplez+i4
2.1. Propsito
que decir a la rutina que lea una lnea de caracte-
Los modos de direccionamiento de la memoria
res y los ponga en una zona de memoria, y la rutina
principal que se encuentran en las UCP reales son
tiene que avisarle cuando haya terminado), pue-
muy variados; los presentaremos, de manera gene-
de verse interrumpida la propia rutina de servicio?,
ral, en la Leccin 4. Ahora nos proponemos estu-
qu hace la UCP ante dos peticiones de interrup-
diar tres de esos modos, el inmediato, el indirecto
cin simultneas?, para qu otras cosas que no
y el indexado, poniendo de manifiesto su utilidad
sean transferencias de datos sirven las interrupcio-
con algunos ejemplos sencillos.
nes?... Las respuestas no son nicas, porque se han
Tambin nos introduciremos en el tratamien-
elaborado muchas soluciones distintas, y cada una
to de interrupciones. Es un concepto importante,
implica un encaje delicado entre los elementos de
que, cuando se aborda por primera vez, requiere
hardware y los de software. Aqu veremos un es-
ciertas dosis de reflexin y abstraccin para cap-
quema trivializado, con los mnimos elementos de
tarlo en su esencia. Es importante porque, en el es-
hardware.
tado actual de la arquitectura de ordenadores, cabe
pensar en modelos funcionales muy simples, con Seguiremos usando como herramienta didcti-
pocos modos de direccionamiento (Apartado 4.9), ca un ordenador muy simplificado: partiendo de
pero de ningn modo sera concebible un proce- Smplez, lo modificaremos mnimamente para que
sador (una UCP) sin un mecanismo de interrup- permita esos tres modos de direccionamiento, as
ciones. Y al principio no es fcil de comprender. como interrupciones de los dos nicos perifricos
La introduccin genrica del Apartado 1.13 pue- considerados (la pantalla y el teclado). Tambin
de parecer sencilla, pero a poco que se reflexione usaremos el lenguaje ensamblador, pero slo para
empiezan a surgir preguntas: cmo puede la UCP facilitar la lectura de los programas: no hay que
abandonar la ejecucin de un programa, ejecu- olvidar que el objeto de estudio en esta Primera
tar otro (la rutina de servicio de la interrupcin), y Parte es el nivel de mquina convencional.
luego volver al primero como si nada hubiese ocu- Una advertencia: aunque esta Leccin ocupa
rrido?, cmo se comunican el programa y la ruti- menos pginas que la anterior, seguramente va a
na de servicio? (por ejemplo, el programa le tiene requerir ms esfuerzo por parte del lector.
81
82 Leccin 2. Smplez+i4
12 bus A
25 bus C UCP 3
X CTEC teclado
AC MP
UC
UAL
CPAN pantalla
bus D 12
2.6. Contando con X tro X), y las instrucciones que han cambiado estn
sealadas con un asterisco. Observe que:
Como primer programa para Smplez+i4, vea-
El programa es, esencialmente, el mismo. Se
mos cmo el registro de ndice, X, puede utilizar-
utiliza siempre direccionamiento directo (salvo en
se, simplemente, como contador (y no como regis-
las instrucciones que cargan AC y X con operan-
tro de direccionamiento).
dos inmediatos).
El Programa 1.2 (para sumar los diez primeros
trminos de la sucesin de Fibonacci) lo haba- Hemos podido conservar el direccionamiento
mos reescrito utilizando el ensamblador (Progra- directo gracias a que todas las direcciones son me-
ma 1.7). El lector debe comparar este ltimo con nores que 64. De no haber sido as, habramos teni-
el Programa 2.1. En las lneas en blanco haba ins- do que utilizar punteros (vase el siguiente Apar-
trucciones que ahora han desaparecido (extraan o tado). Igualmente, X ha podido recibir su valor ini-
introducan en la memoria el valor del contador, cial con direccionamiento inmediato gracias a que
y esa funcin de contar ahora se hace con el regis- ese valor (el nmero 8) es menor que 64.
88 Leccin 2. Smplez+i4
Programa 2.2 Suma, con direccionamiento indirecto, de cien nmeros almacenados en la memoria.
Programa 2.3 Suma, con direccionamiento indirecto e indexado, de cien nmeros almacenados en la memoria.
Presentaremos ahora un mecanismo de interrup- En ciertas partes de los programas hay que evi-
ciones trivializado; en las Lecciones 6 y 7 estudia- tar que la UCP atienda interrupciones. Por ejem-
remos detalladamente otro ms parecido a los que plo, hasta que el programa no haya puesto los va-
se encuentran en los procesadores reales. lores de los punteros a las zonas de datos. Y la
Smplez+i4 tiene tambin dos perifricos, cuyos pantalla no deber interrumpir hasta que el pro-
puertos de estado y de datos tienen como direccio- grama no haya preparado en su zona de datos los
nes las cuatro ltimas del espacio total de direccio- caracteres que deben escribirse.
namiento, que ahora comprende 4.096 palabras. Smplez+i4 tiene dos mecanismos de permiso
Es decir, a la pantalla le correspondern las direc- e inhibicin de interrupciones, uno general y otro
ciones 4.092 (puerto de estado) y 4.093 (puerto de especfico para cada perifrico. El primero consis-
datos), y al teclado, 4.094 (estado) y 4.095 (datos). te en un par de instrucciones, EI (permiso de in-
Como esas direcciones son inaccesibles con di- terrupciones) y DI (inhibicin de interrupciones)
reccionamiento directo utilizaremos punteros si- (Apartado 2.3). Su funcin es muy sencilla: si la
tuados en direcciones menores que 64.3 UCP ejecuta EI, a partir de ese momento est dis-
puesta para atender interrupciones (supondremos
Causas de interrupcin, zonas de datos y que cuando el ordenador arranca las interrup-
rutinas de servicio ciones quedan inhibidas hasta que se ejecute una
instruccin EI), y si ejecuta DI pasa todo lo con-
Las causas de interrupcin pueden ser muchas trario: la UCP deja de atender interrupciones.
y de naturaleza variada (las veremos en el Aparta- El permiso para que un perifrico pueda generar
do 3.6), pero en Smplez+i4 slo hay dos, los dos interrupciones se da con un bit del puerto de esta-
perifricos. El teclado interrumpir cada vez que do. Recordemos (Apartado 1.12) que el puerto de
se pulse una tecla, diciendo as que tiene un ca- estado contiene la informacin que indica si el pe-
rcter preparado para enviar, y la pantalla lo har rifrico est preparado o no. Esa informacin est
siempre que termine de escribir un carcter, anun- codificada en el bit de menor peso (o bit menos
ciando que est preparada para recibir otro. significativo) del puerto, y el siguiente bit indi-
Reservaremos en la MP dos zonas de datos de ca si el perifrico puede generar interrupciones (1)
ochenta palabras: una para el teclado y otra para o no (0). Un perifrico slo puede interrumpir a la
la pantalla. En cada una de estas zonas cabe una UCP si tiene permitidas sus propias interrupciones
lnea de ochenta caracteres. y adems la UCP las permite de manera general.
Para cada causa de interrupcin tiene que es- Si ambas condiciones se cumplen el perifrico in-
tar cargado en la MP un programa que se ocupe terrumpir en cuanto est preparado.
de atenderla. A estos programas se les llama ruti- Para iniciar la pantalla escribiremos el conteni-
nas de servicio (en adelante, RS). La RS de la do binario 000... 11 en el puerto 4.092: el bit
pantalla transfiere los ocho bits menos significati- menos significativo a 1 para indicar que la pan-
vos de una palabra de su zona de datos al puerto talla est preparada, y bit siguiente tambin a 1
4.093, y la del teclado transfiere el contenido del para darle permiso de interrupcin; de este modo,
puerto 4.095 a una palabra de su zona de datos. en cuanto se ejecute EI la pantalla interrumpir.
Para recorrer las zonas adecuadamente usaremos Como habamos dicho al explicar la espera acti-
direccionamiento indirecto e indexado. va, cuando se ejecute (en la RS) una instruccin
3
Por si el lector se lo pregunta, s, tambin puede hacerse ST sobre el puerto de datos (4.093) el controlador
con direccionamiento indexado. pondr el bit preparado a 0, y lo volver a po-
2.8. Interrupciones 91
ner a 1 cuando termine de sacar el carcter en la operacin (poner a buen recaudo el estado de
pantalla. la UCP: direccin de la instruccin siguiente y
Para iniciar el teclado escribiremos 000... 10 contenido de los registros) se le llama salvar el
en el puerto 4.094: el bit menos significativo aho- contexto; si mientras se lleva a cabo aparecen
ra es 0; el controlador del teclado lo pondr a nuevas interrupciones, no se atienden (quedan
1 en cuanto se pulse una tecla, y entonces inte- pendientes, inhibidas), porque la UCP, autom-
rrumpir si el permiso general est dado. En la RS ticamente, inhibe el permiso general al pasar a
habr una instruccin LD sobre el puerto de datos atender a una interrupcin.
(4.095), que, adems de llevar el contenido de ese 2. Despus hay que identificar la causa de la inte-
puerto a AC o a X, tiene el efecto de que el con- rrupcin y bifurcar a la direccin de comienzo
trolador pone a 0 ese bit preparado. de la RS de esa causa (completando as el cam-
bio de contexto).
Cambios de contexto 3. Durante la ejecucin de la RS pueden apare-
cer nuevas interrupciones (en el caso de Sm-
Para comprender cmo funciona el mecanismo
plez+i4, cuando, por ejemplo, se pulsa una tecla
de interrupciones hay que conocer algunos deta-
mientras se ejecuta la RS de la pantalla). Caben
lles del modelo procesal. En este momento el lec-
varias posibilidades: en el esquema ms senci-
tor debera releer el Apartado 1.13 de la Leccin
llo (el nico que consideraremos aqu), la UCP
anterior, donde se introduca la idea. Para hacerlo
no atiende a ninguna interrupcin mientras es-
tendr que interrumpir la lectura de estas lneas y
t ejecutando la RS de otra. En esquemas ms
bifurcar a la pgina correspondiente; pero antes
elaborados se permite un anidamiento de inte-
guardar, de algn modo, recuerdo de esta pgi-
rrupciones, generalmente asociado a unas prio-
na que est leyendo ahora para poder volver a ella.
ridades fijadas previamente, de manera que una
Algo parecido tiene que hacer la UCP para atender
RS slo puede verse interrumpida por una in-
a una interrupcin:
terrupcin de mayor prioridad que la suya (lo
1. Primero, la UCP termina la ejecucin de la ins- veremos en los Apartados 3.6 y 7.4).
truccin en curso4 y guarda la direccin de 4. Terminada la ejecucin de la RS, hay que res-
retorno para poder volver a la instruccin si- taurar el contexto, es decir, recuperar los con-
guiente. Antes de proceder con las operaciones tenidos de los registros AC y X y, antes de bi-
propias de la atencin a la interrupcin es pre- furcar a la direccin de retorno, permitir inte-
ciso guardar los contenidos de los registros AC rrupciones (instruccin EI).
y X. En efecto, estos contenidos pueden ver-
se afectados por la ejecucin de la RS, y el
programa que se ha interrumpido debe luego Diferencias con los subprogramas
continuar como si nada hubiera pasado. A esta
El abandono temporal de un programa en eje-
4
Esto es lo que se hace normalmente, y lo que supon- cucin para pasar a ejecutar una rutina de servicio
dremos en lo sucesivo. Algunas UCP tienen en su repertorio recuerda, especialmente en lo que se refiere al he-
instrucciones cuya ejecucin requiere demasiado tiempo (por
cho de salvar y restaurar la direccin de retorno, a
ejemplo, porque operan sobre secuencias de miles de palabras
en la MP) como para mantener una interrupcin pendiente. una bifurcacin a subprograma. Hay, sin embargo,
En su esquema de interrupciones est previsto que esas ins- tres diferencias fundamentales:
trucciones puedan verse interrumpidas, lo que complica el di-
seo de la UCP. Por otra parte, algunas causas de interrupcin
La bifurcacin a subprograma es consecuencia
deben hacer abortar la ejecucin de la instruccin en curso; de la ejecucin de instrucciones escritas por el
esto no se da en Smplez+i4, pero vase el Apartado 6.14. programador. Ocurre exactamente en el punto
92 Leccin 2. Smplez+i4
las zonas de datos. Las nicas direcciones que es- una de sus zonas, as como a los puertos de esta-
tn fijadas por el hardware de la UCP son la 63 y do de los dos perifricos. En [30] da permiso para
la 4.000, as como las de los puertos de los perif- interrumpir y luego pasa a ejecutar instrucciones
ricos (4.092 a 4.095). que implementan algn algoritmo cuyos detalles
Analicemos ahora el Programa 2.4 (en la pgina no hacen ahora al caso. Mientras la UCP ejecuta
siguiente). Las direcciones [1] a [10] se han reser- estas instrucciones, la pantalla y el teclado irn in-
vado para albergar variables y punteros. Los pun- terrumpiendo de vez en cuando. En cada interrup-
teros son necesarios para poder acceder (con direc- cin de la pantalla, su RS escribir un carcter (ex-
cionamiento indirecto) a direcciones mayores que trado de su zona de datos) en la pantalla, y en cada
63. Concretamente, y refirindonos a las direccio- interrupcin del teclado, su RS introducir (en la
nes [1] a [10] por las etiquetas del programa fuente zona de datos del teclado) el carcter pulsado.
en ensamblador: En un determinado momento (direccin [40]) el
MSPAN est reservada para el mensaje de la RS programa necesita los ochenta caracteres que ha
de la pantalla: el programa pone inicialmente enviado el teclado. Pero el programador no puede
0 en esa palabra y la RS pone 1 cuando ha saber si en el momento de ejecutarse esa instruc-
terminado de escribir ochenta caracteres (para cin que est en la direccin [40] ya se han le-
simplificar, en este ejemplo supondremos que do todos los caracteres. Para eso est la variable
son exactamente ochenta los caracteres que se MSTEC: cuando se hayan introducido los ochenta
escriben, vase el Ejercicio 8). caracteres la RS del teclado habr puesto en ella
MSTEC est reservada para el mensaje de la RS el valor 1. De ah el bucle [40][41], similar al
del teclado: el programa pone 0 en esa pala- bucle de espera activa (pero controlado por el
bra al iniciar y la RS pone 1 cuando ha ledo valor de la variable MSTEC, no por el bit prepa-
ochenta caracteres (simplificamos tambin, su- rado del puerto de estado). Anlogamente, si el
poniendo que los datos que se introducen por el programa pretende enviar otra lnea a la pantalla,
teclado ocupan siempre ochenta caracteres). antes de rellenar la zona de datos con nuevos ca-
racteres tendr que esperar a que se hayan escrito
XPAN y XTEC son los valores de los ndices para
los anteriores (bucle [45][46]).
las RS de la pantalla y del teclado: el progra-
El programa termina con la instruccin HALT,
ma los inicia con el valor 79, y las RS los
en la direccin 50. A continuacin hay seis pala-
van decrementando cada vez que se escribe un
bras necesarias, como ahora veremos, para varia-
carcter por la pantalla o se lee un carcter del
bles y punteros de las RS (igualmente se podran
teclado, respectivamente.
haber puesto al principio, puesto que se trata de
PZPAN es un puntero a la primera palabra de la seudoinstrucciones; si no recuerda lo que es esto,
zona de datos de la pantalla, y lo mismo PZTEC vuelva a leer el Apartado 1.11).
para el teclado.
PEPAN, PETEC, PDPAN y PDTEC son punteros pa-
Servicio de las interrupciones
ra poder acceder a los puertos de estado y de
datos. Ya sabemos que cuando abandona la ejecucin
El programa propiamente dicho empieza en la de un programa para atender a una interrupcin,
direccin [12] (etiqueta PRINC). Antes de escribir la UCP, automticamente, guarda la direccin de
por la pantalla rellena su zona de datos con una retorno en la palabra de direccin 63 y bifurca a la
lnea (ochenta caracteres). Entre las direcciones direccin 4.000. A partir de esa direccin hay que
[20] y [29] inicia a las dos rutinas de servicio co- tener cargado en la MP un programa que realice
municndoles la direccin de comienzo de cada las siguientes operaciones:
94 Leccin 2. Smplez+i4
RS de la pantalla tiempo
blarse conjuntamente, para que el ensamblador
pueda conocer sus valores (direcciones reales de
la memoria). Pero en el Apartado 3.8 y, con ms
detalle, en el 6.8, veremos que es posible ensam-
1/30 seg.
blarlos por separado. 5
(~10 instrucciones) RS del teclado
9. Se supone que el efecto de la instruccin EI es igual que la de la primera vez (en la que se pone
retardado, es decir que si hay una interrupcin el bit preparado a 1. Por qu? Qu hay que
pendiente no se atiende inmediatamente despus hacer?
de ella, sino de la que le sigue. Para comprender 13. El objetivo de este Ejercicio es modificar y aa-
por qu debe ser as, analice lo que ocurre cuando dir lo necesario en el software de tratamiento de
hay una interrupcin pendiente en el momento de interrupciones de Smplez+i4 (Programa 2.5) pa-
ejecutarse la instruccin EI del Programa 2.5. ra considerar una tercera causa de interrupcin:
10. Este ejercicio y los dos siguientes se refieren al la interrupcin de reloj, generada peridicamen-
Programa 2.5. Adale lo necesario para que res- te, cada segundo, por un controlador externo a la
taure al salir no slo los valores de (AC) y (X) UCP. Estas interrupciones entran por la misma l-
sino tambin la informacin (un bit, valor del in- nea que las de pantalla y las de teclado, de modo
dicador Z) sobre si el ltimo resultado en la UAL, que en el programa en cuestin hay que aadir dos
antes de atender a la interrupcin, fue 0 o no. partes: una para consultar si la causa de interrup-
Para ello, despus de salvar (AC) y (X), el pro- cin es el reloj, y otra para, en caso afirmativo,
grama pondr una seal en una variable local realizar las operaciones de servicio oportunas. Es-
en funcin del resultado de BZ. Tenga en cuen- tas operaciones consistirn en actualizar tres va-
ta que las instrucciones que restauran al final los riables (palabras de la MP) en las que se manten-
valores de los registros, LD .A,/AC y LD .X,/X dr el tiempo transcurrido desde que se arranc el
ponen 0 o 1 en el indicador Z segn los valo- ordenador: HOR (horas: desde 0 hasta la mxima
res respectivos que tengan (AC) y (X). Por tanto, capacidad de representacin en una palabra), MIN
en caso de que haya que restaurar 0, al salir del (minutos: de 0 a 59) y SEG (segundos: de 0 a 59).
programa habr que ejecutarlas en ese orden o en Como orientacin, tenga en cuenta lo siguiente:
el inverso segn cul de los dos, X o AC, respec- La interrupcin de reloj debe tener prioridad
tivamente, contena 0 al entrar. Tambin habr sobre las otras dos.
que considerar el caso contrario y cuidar de que El controlador que genera estas interrupciones
no se ponga el bit a 0 indebidamente. de reloj tiene dos puertos: al puerto de estado se
11. Hemos dicho que si se omiten las instrucciones le ha asignado (por hardware) la direccin 4.090,
[4013] y [4026] la pantalla y el teclado seguiran y al de datos la 4.091.
interrumpiendo. Cul sera el resultado? El puerto de datos sirve, fundamentalmente,
para ajustar el perodo del reloj (frecuencia con la
12. Cuando se trata del ltimo carcter (instruccio- que el controlador genera las interrupciones). En
nes etiquetadas con BIFTEC y BIFPAN) hay que este Ejercicio no utilizaremos esta funcin (supo-
inhibir las interrupciones del perifrico. Con el nemos que un programa de inicializacin, el mis-
repertorio de instrucciones de Smplez+i4 no es mo que pone los valores iniciales de HOR, MIN y
posible alterar un bit del puerto de estado sin mo- SEG, ha escrito ya el valor de este perodo: 1 seg.),
dificar los otros, y al escribir 1 en l estamos pero s tendremos que leerlo, de acuerdo con lo
poniendo el bit de interrupcin a cero, pero tam- que se dice en el punto siguiente.
bin el bit preparado a uno. Como hemos di-
cho en las observaciones sobre el programa, este En el puerto de estado, el bit menos signifi-
efecto secundario es inocuo, pero y si esa modi- cativo (preparado) lo pone a 1 el controla-
ficacin del puerto de estado se hiciese despus dor cada segundo, y se pone a 0 ejecutando una
de leer (teclado) o escribir (pantalla) el carcter? operacin de lectura sobre el puerto de datos. El
En particular, observe que ST .A,[/PDPAN] po- siguiente bit (permiso de interrupcin) lo habr
ne 0 en ese bit, y el controlador lo pone a 1 puesto a 1 el programa de inicializacin, y no
cuando ha terminado de escribir el carcter en la lo tocaremos.
pantalla. El seudocdigo del programa puede ser:
Y continuando con esa reflexin, la iniciacin de si SEG < 59 SEG = SEG + 1;
si no {SEG = 0;
la pantalla para la segunda vez que se quiere es- si MIN < 59 MIN = MIN + 1;
cribir (y las sucesivas) no puede ser exactamente si no {MIN = 0; HOR = HOR + 1}}