Вы находитесь на странице: 1из 20

Leccin 2

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

Figura 2.1 Modelo estructural de Smplez+i4.

2.2. Modelo estructural y van hacia la UAL, la MP y los controlado-


res de perifricos, CTEC y CPAN. Ahora hay
Con relacin a Smplez, el nico componente una seal de control adicional que corresponde
adicional visible para el programador es un regis- a las peticiones de interrupcin de la pantalla y
tro de doce bits en la UCP, al que llamaremos X, del teclado. Esta seal procede de CTEC o de
y cuya funcin como registro de ndice veremos en CPAN y va hacia la UC, y de ah que las flechas
el Apartado 2.4. en las lneas de puntos sean bidireccionales.
Adems, la MP tiene ahora 4.096 palabras (las El bus C contiene algunas seales ms. Una de
cuatro ltimas, reservadas para la entrada y la sali- ellas es la de interrupcin, procedente, como
da). Por tanto, las direcciones estarn comprendi- hemos dicho, del exterior de la UCP.
das entre 0 y 212 1 = 4.095.
Compare el lector el modelo estructural de la
Figura 2.1 con el de Smplez (Figura 1.1), y ob- 2.3. Modelo funcional
serve las siguientes diferencias (algunas bastante
patentes; otras, ms bien sutiles): Recordemos que un modelo funcional en el ni-
Aparece el nuevo registro, X. Est incluido en vel de mquina convencional consta de dos partes:
el mismo bloque que la UAL, porque puede los convenios para la representacin de datos e ins-
operarse con l igual que con el acumulador, trucciones y el repertorio de instrucciones. Segui-
pero, a diferencia de ste, est funcionalmen- remos suponiendo los mismos tipos de datos que
te ligado tambin a la UC (como veremos, sta en Smplez (nmeros enteros entre 0 y 4.095, y ca-
puede utilizar el contenido de X para calcular racteres), con los mismos convenios. El repertorio
una direccin). de instrucciones tambin va a ser esencialmente el
No se han detallado las conexiones entre la mismo, con slo dos excepciones:
UAL y los registros, y entre la UC y el registro Las instrucciones CLR y DEC (con cdigos bina-
X, algo ms complicadas que en la Figura 1.1. rios 101 y 110, respectivamente) se sustituyen,
El bus A ya no tiene nueve lneas, sino doce como veremos, por otras con ms funcionali-
(para direccionar 4.096 palabras). dad.
En Smplez, las micrordenes salen de la UC Con el cdigo binario 111 ahora tenemos tres
2.3. Modelo funcional 83

instrucciones que se diferencian por los bits 8 11 9 8 7 6 5 0

y 7 del formato, de modo que: CO R J I CD


11100 es HALT ( quiere decir
indiferente); 11 9 8 7 0
11101 es EI (permiso de interrup- 1 1 1 ECO
ciones);
11110 es DI (inhibicin de inte-
Figura 2.2 Formato de instrucciones de Smplez+i4.
rrupciones).

Las dems instrucciones tienen los mismos sig-


Los campos CO y CD significan lo mis-
nificados definidos en la Tabla 1.2, con las siguien-
mo que en Smplez. Como CD slo tiene seis bits,
tes matizaciones:
slo pueden direccionarse directamente 26 = 64
ST, LD y ADD (000, 001 y 010) pueden almace-
palabras de la MP.
nar, cargar, o sumar a, respectivamente, el acu-
mulador o el registro X. Los tres bits sacrificados del campo CD se utili-
zan ahora para los siguientes propsitos:
La condicin para la bifurcacin en BZ sigue
siendo que el resultado de la ltima operacin El bit 8 (R) indica el registro (AC o X) con el
en la UAL haya sido cero1 . En Smplez esto es que se opera (si es que la instruccin opera con un
equivalente a decir que el contenido del acumu- registro, caso de LD, ST, etc.; en BR y BZ el valor
lador sea cero, pero no en Smplez+i4, porque que tenga R es indiferente). El convenio es que si
los resultados pueden ir al acumulador o al re- el bit 8 tiene el valor 0 se opera con el acumulador,
gistro X. y si tiene el valor 1 se opera con el registro X.
Lo que s cambia sustancialmente es el formato Los bits 7 y 6 (J e I) indican, respectiva-
de instrucciones. mente, direccionamiento indexado y direcciona-
miento indirecto. Enseguida veremos cul es su
efecto. Si ambos tienen el valor 0, el direcciona-
Formato de instrucciones
miento es directo, como en Smplez: CD da, di-
El nuevo formato de instrucciones es el repre- rectamente, la direccin de la MP a la que hace
sentado en la Figura 2.2. La parte superior de la fi- referencia la instruccin (si se trata de una instruc-
gura muestra el formato de todas las instrucciones cin que hace referencia a memoria: LD, ST, BR,
salvo las que corresponden al cdigo de operacin etc.).
111. Para stas, los bits 8 y 7 son una extensin del En definitiva, si los bits 6, 7 y 8 tienen el valor 0
cdigo de operacin, ECO, y su formato es el de (segunda cifra de la representacin octal igual a 0),
la parte inferior. la interpretacin (como instruccin) del contenido
de una palabra es exactamente igual que en Sm-
1
Las operaciones en la UAL son las que ocurren con la plez (salvo para las de cdigos de operacin 101,
instruccin ADD, con las que sustituyen a CLR y DEC, y con
LD (se supone que al cargar un operando desde la MP este 110 y 111, que ya veremos lo que hacen). Si los
operando pasa al registro a travs de la UAL). Lo que ocurre bits 6 y 7 tienen el valor 0, pero el bit 8 tiene el
(en el nivel de microarquitectura) es que los circuitos de la valor 1, entonces la instruccin dice lo mismo,
UAL actan sobre un biestable indicador de cero, Z, que toma pero actuando con el registro X en lugar del AC:
el valor 1 si el resultado de la operacin efectuada es cero
(y 0 en caso contrario). Al interpretar la instruccin BZ, la
el cdigo de operacin 000 (ST) seguido de 100
UC tiene en cuenta el estado de ese indicador para activar (4 octal) se interpreta como almacenar el conte-
unas micrordenes u otras. nido del registro X, etc.
84 Leccin 2. Smplez+i4

2.4. Modos de direccionamiento se interpreta como almacenar el contenido del


acumulador en la direccin de memoria que puede
En Smplez el modo de direccionamiento es encontrarse en la direccin 2, es decir, en la direc-
siempre directo: lo que contiene el campo CD es, cin 2.048 (como (J) = 0, pero (I) = 1, la direccin
directamente, la direccin de referencia en la MP, efectiva es DE = ((CD)) = (2) = 2.048).
o direccin efectiva, DE (direccin del operando En este segundo caso, la palabra de direccin 2
para las instrucciones LD y ADD, direccin donde acta como un puntero: no contiene al operando,
almacenar el operando para la instruccin ST, di- sino que apunta a la palabra que lo contiene. Esta
reccin donde la UC debe buscar la siguiente ins- es la principal utilidad del direccionamiento indi-
truccin para las instrucciones BR y BZ). Como ya recto, como veremos en los ejemplos.
hemos dicho, en Smplez+i4 el direccionamiento El direccionamiento indirecto, al utilizar los do-
es directo cuando los bits J e I de la instruc- ce bits de una palabra para contener una direc-
cin tienen el valor 0. cin, hace que el espacio de direccionamiento
En adelante seguiremos la notacin de utilizar sea 212 = 4.096 palabras, aunque el campo CD s-
parntesis para indicar contenido, sea de un regis- lo tenga seis bits.
tro o de un campo de un formato: (AC) es el conte-
nido del acumulador, (CD) el contenido del campo Direccionamiento indexado
CD. De acuerdo con esta notacin, tenemos que,
con direccionamiento directo, DE = (CD). Si el bit 7 (J) tiene el valor 1, la UCP inter-
preta que para calcular la direccin efectiva tie-
Direccionamiento indirecto ne que sumar el contenido del registro de ndi-
ce, X. Es decir, si (J) = 1 (y (I) = 0), entonces
Si el bit 6 (I) tiene el valor 1, (CD) no es di- DE = (CD)+(X).
rectamente la direccin efectiva, sino la direccin Si en un momento dado durante la ejecucin
de una palabra de la MP que contiene la direc- de un programa el contenido del registro X es
cin efectiva, es decir, que apunta al operando o 000000000110 (6 en decimal), la instruccin
a la instruccin a la que hay que bifurcar. Si re- 000010000010 (0202 en octal)
presentamos simblicamente a esta palabra como
se interpreta como almacenar el acumulador en
MP[CD], la direccin efectiva debera escribirse
la direccin resultante de sumar a (CD) = 2 el
as: DE = (MP[CD]). Pero, para abreviar, escribi-
contenido de X. Como (X) = 6, la direccin que
remos: DE = ((CD)) (contenido del contenido de
calcular la UCP y donde almacenar (AC) ser
CD).
DE = 2+6 = 8.
Un ejemplo. Supongamos que el contenido de
El contenido de X, y por tanto DE, puede modi-
la palabra de direccin 2 es 100000000000. Inter-
ficarse fcilmente durante el curso de la ejecucin
pretado como un nmero, ese contenido, escrito en
de un programa (con las instrucciones LD, ADD,
decimal, resulta ser 211 = 2.048. La instruccin
etc., referidas a X, es decir, con (R) = 1). Esto
000000000010 (0002 en octal)
permite recorrer zonas de la MP sin tener que
se interpreta como almacenar ((CO) = 000) el con-
recurrir, como en Smplez, a la modificacin de
tenido del acumulador (puesto que (R) = 0) en la
instrucciones. Y sta es la principal utilidad del
direccin de memoria 2 (como (J) = (I) = 0, la
direccionamiento indexado: la de disponer de n-
direccin efectiva es DE = (CD) = 2). Su ejecu-
dices (en este caso, slo uno, porque slo hay un
cin machacara el contenido previo de la di-
registro de ndice) que permiten direccionar ele-
reccin 2. Pero
mentos (palabras) dentro de un vector (zona de la
000001000010 (0102 en octal) MP) cuya direccin de comienzo es conocida.
2.4. Modos de direccionamiento 85

Direccionamiento indirecto e indexado En cuanto a 110, que en Smplez era DEC,


ahora es restar el operando inmediato (al AC o
Los dos tipos de direccionamiento pueden apli-
a X, segn sea el bit 8), con lo que ya no slo
carse conjuntamente, lo que se indicar en la ins-
podemos decrementar (con un operando inmedia-
truccin mediante (I) = (J) = 1. En el caso de Sm-
to igual a 1), sino restar cualquier constante com-
plez+i4 el convenio es de postindexacin, es decir,
prendida entre 0 y 63.
primero se acude al puntero para buscar la direc-
Digamos finalmente que en estos casos (cdigos
cin y luego se suma el contenido de X. Simbli-
de operacin 101 y 110) los valores que tengan los
camente, DE = ((CD))+(X).
bits 6 y 7 (I y J) son indiferentes (vase el
Si (2) = 2.048 y (X) = 6, la instruccin
Ejercicio 1).
000011000010 (0302 en octal)
almacenar (AC) en DE = 2.048+6 = 2.054.
Resumen

Direccionamiento inmediato Tenemos, por tanto, las siguientes posibilidades


por lo que respecta a los modos de direcciona-
Ha llegado el momento de definir los nuevos miento:
significados de los cdigos de operacin 101 y Si el cdigo de operacin es 000, 001 o 010
110. En cuanto al primero, en lugar de poner a (instrucciones ST, LD o ADD) entonces el mo-
cero, la UCP lo interpretar como cargar (en AC do de direccionamiento viene dado por la Ta-
o en X, dependiendo de lo que diga el bit R) bla 2.1.
literalmente, o inmediatamente, lo que hay en el
campo CD (lo cual incluye, evidentemente, la fun- bits 8,7,6 octal modo
cin de la antigua instruccin CLR: basta con que 000 0 igual que en Smplez, di-
los seis bits de CD sean ceros). recto: DE = (CD)
Por ejemplo, la instruccin 001 1 indirecto: DE = ((CD))
010 2 indexado:
001000000010 (1002 en octal) DE = (CD)+(X)
carga ((CO) = 001) en el acumulador el contenido 011 3 indirecto e indexado:
de la direccin de memoria 2 (direccionamiento DE = ((CD))+(X)
directo). Pero la instruccin 100 a 111 4a7 lo mismo, pero el regis-
tro fuente o destino es el
101000000010 (5002 en octal) X en lugar del AC
carga en el acumulador el nmero 2 (puesto que
(CD) = 000010). Tabla 2.1. Modos de direccionamiento directo, indirec-
Decimos en este caso que tenemos un operando to e indexado.
inmediato, o un literal. Ntese que se habla de
direccionamiento inmediato, aun cuando no se Si el cdigo de operacin es 011 o 100 (BR o
direcciona la MP, ya que el operando se extrae de BZ) el valor que tenga el bit 8 es indiferente;
la misma instruccin. la direccin de bifurcacin viene determinada
La utilidad de este modo de direccionamiento por los bits 7 y 6, de acuerdo tambin con la
se encuentra cuando se quiere introducir un valor Tabla 2.1.
inicial en el registro AC o en el registro X: evita Si el cdigo de operacin es 101 (cargar lite-
la necesidad de tener previamente almacenado ese ral) o 110 (restar literal) el modo de direcciona-
valor en la MP y leerlo de sta. Pero tal valor ha de miento es inmediato, el bit 8 indica el registro
ser una constante comprendida entre 0 y 63 (que es con el que se opera y los bits 7 y 6 son indife-
lo que da de s el campo CD). rentes.
86 Leccin 2. Smplez+i4

2.5. Convenios simblicos binario octal simblico


000010000010 0202 ST .A,/2[.X]
Para facilitar la lectura de los programas segui- 010010000011 2203 ADD .A,/3[.X]
remos utilizando, adems de la representacin oc- 000110000010 0602 ST .X,/2[.X]
010110000011 2603 ADD .X,/3[.X]
tal, los convenios simblicos del ensamblador de
Smplez (cdigos de operacin nemnicos, direc- La combinacin representada por las dos lti-
ciones en decimal o con etiquetas). Pero ahora te- mas instrucciones raramente se utilizar, aunque
nemos que ampliar esos convenios para incluir la la UC no tendra ningn problema para interpretar-
informacin sobre el registro utilizado y el modo las. Por ejemplo, la ltima dice sumar al conteni-
de direccionamiento. do de X el contenido de la palabra cuya direccin
es 3+(X): se utiliza X como registro de direc-
cin y, calculada DE = 3+(X), se utiliza X como
Informacin sobre el registro
registro de operacin, modificndose su conte-
En las instrucciones que hacen referencia a un nido.
registro escribiremos, a continuacin del cdigo,
.A o .X para indicar que se opera con AC o Direccionamiento indirecto e indexado
con X, y despus, si la instruccin hace referencia
a MP, una coma y finalmente la direccin. El lector Para indicar que el direccionamiento es indirec-
puede analizar los siguientes ejemplos2 : to e indexado (es decir, (J) = (I) = 1) seguiremos el
convenio de utilizar dos veces los corchetes:
binario octal simblico binario octal simblico
000000000010 0002 ST .A,/2 000011000010 0302 ST .A,[/2][.X]
000100000010 0402 ST .X,/2 010011000011 2303 ADD .A,[/3][.X]
001100000111 1407 LD .X,/7 000111000010 0702 ST .X,[/2][.X]
010111000011 2703 ADD .X,[/3][.X]
Direccionamiento indirecto Sobre las dos ltimas instrucciones cabe hacer
la misma observacin anterior.
Se indica el direccionamiento indirecto median-
te corchetes. Por ejemplo:
Direccionamiento inmediato
binario octal simblico
000001000010 0102 ST .A,[/2] El direccionamiento inmediato lo representare-
000101000010 0502 ST .X,[/2] mos con # delante del operando inmediato. Para
010101000011 2503 ADD .X,[/3] cargar seguiremos utilizando el mismo nombre ne-
mnico LD que para la instruccin normal de
La ltima instruccin sumara a lo que ya con- cargar (CO = 001), y para la de restar introducire-
tuviese el registro X el contenido de la palabra de mos el nemnico SUB. Por ejemplo:
la MP apuntada por la palabra de direccin 3, de- binario octal simblico
jando el resultado en X. 101000000010 5002 LD .A, #2
101100001010 5412 LD .X, #10
Direccionamiento indexado 110000000001 6001 SUB .A, #1
110100111111 6477 SUB .X, #63
Se indica que el direccionamiento es indexado El valor de los bits 6 y 7 es indiferente en es-
escribiendo [.X] tras la direccin: tos casos: la codificacin octal 5302 corresponde-
2
Observe que no se trata de programas, sino de ejemplos ra tambin a la instruccin LD .A, #2, la 5712 a
aislados de instrucciones. LD .X, #10, etc.
2.6. Contando con X 87

Dir.MP Cont. Programa en Comentarios


(dec.) (oct.) ensamblador
------ ------ ------------------- -----------------------
* [0] 5000 LD .A, #0
[1] 0023 ST .A, /PEN ; pone a cero PEN
* [2] 5001 LD .A, #1
[3] 0024 ST .A, /ULT ; pone 1 en ULT
[4] 0026 ST .A, /SUM ; pone 1 en SUM
* [5] 5410 LD .X, #8 ; inicia contador

[6] 1023 BUCLE LD .A, /PEN


[7] 2024 ADD .A, /ULT ; PEN+ULT
[8] 0025 ST .A, /SIG ; lo lleva a SIG
[9] 2026 ADD .A, /SUM ; SUM+SIG
[10] 0026 ST .A, /SUM ; lo lleva a SUM
[11] 1024 LD .A, /ULT ; ULT
[12] 0023 ST .A, /PEN ; lo lleva a PEN
[13] 1025 LD .A, /SIG ; SIG
[14] 0024 ST .A, /ULT ; lo lleva a ULT
*[15] 6401 SUB .X, #1 ; decrementa contador

*[16] 4022 BZ /FIN ; si es cero, fin

*[17] 3006 BR /BUCLE ; si no, vuelve al bucle


[18] 7000 FIN HALT

[19] 0000 PEN RES 1


[20] 0000 ULT RES 1
[21] 0000 SIG RES 1
[22] 0000 SUM RES 1
END

Programa 2.1 Suma de los diez primeros trminos de la sucesin de Fibonacci.

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

Dir.MP Cont. Programa en Comentarios


(dec.) (oct.) ensamblador
------ ------ ---------------------- ----------------------------
[0] 3004 BR /PRINC
[1] 0144 CIEN DATA 100 ; constante 100
[2] 0225 P149 DATA 149 ; puntero a 149
[3] 0226 P150 DATA 150 ; puntero a 150
[4] 1401 PRINC LD .X, /CIEN ; inicia contador
[5] 5000 LD .A, #0
[6] 2102 BUCLE ADD .A, [/P149] ; suma los nmeros
[7] 0103 ST .A, [/P150]
[8] 6401 SUB .X, #1 ; decrementa contador
[9] 4017 BZ /FIN ; si es cero, fin
[10] 1002 LD .A, /P149 ; modificacin
[11] 6001 SUB .A, #1 ; del
[12] 0002 ST .A, /P149 ; puntero
[13] 1103 LD .A, [/P150] ; carga el resultado parcial
[14] 3006 BR /BUCLE ; vuelta al bucle
[15] 7000 FIN HALT
END

Programa 2.2 Suma, con direccionamiento indirecto, de cien nmeros almacenados en la memoria.

2.7. Punteros e ndices Ahora ya no se modifica ninguna instruccin,


aunque s un puntero. Esto no es tan grave, pero
Veremos ahora con dos ejemplos la utilidad de el programa sigue sin ser invariante: si se ejecuta
los modos de direccionamiento indirecto e indexa- de nuevo, el puntero que est en la palabra de di-
do. Ambos ejemplos se refieren a la suma de cien reccin 2 ya no es 149, sino 50. Esto sera fcil de
nmeros almacenados en las posiciones 50 a 149, corregir, poniendo el valor inicial del puntero en
que realizbamos en la Leccin 1 mediante modi- tiempo de ejecucin (no en el momento de la car-
ficacin de instrucciones (Programa 1.3). ga en memoria, como se hace en el Programa 2.2).
Bastara para ello aadir una palabra al principio
con la constante 149, independiente del puntero, y
Punteros
las instrucciones necesarias para poner en el pun-
Introduciremos 149 (direccin en la que se tero ese valor inicial. Por ejemplo:
encuentra el ltimo nmero) en una palabra de la [0] 3004 BR /PR
memoria, y 150 (direccin donde se deja la su- [1] 0144 CN DATA 100 ;constante 100
ma) en otra, de modo que estas dos palabras ac- [2] 0000 PN RES 1 ;puntero
ten como punteros. Haciendo uso del direccio- [3] 0226 PS DATA 150 ;puntero a 150
namiento indirecto ya no ser necesario modificar [4] 0225 DT DATA 149 ;constante 149
ninguna instruccin a cada paso por el bucle, sino [5] 1004 PR LD .A, /DT
el puntero que inicialmente apunta a 149 para que [6] 0002 ST .A, /PN ;inicia puntero
[7] 1401 LD .X, /CN ;inicia contador
apunte a 148, 147, etc. Con esta idea (y utilizando
... ... ...
de nuevo el registro X como un simple contador
de 100 a 1) resulta el Programa 2.2. No obstante, hay una solucin mejor.
2.7. Punteros e ndices 89

Dir.MP Cont. Programa en Comentarios


(dec.) (oct.) ensamblador
------ ------ ------------------------ -------------------------
[0] 3004 BR /PRINC
[1] 0143 C99 DATA 99 ; constante 99
[2] 0062 PZ DATA 50 ; puntero a comienzo zona
[3] 0226 PSUM DATA 150 ; puntero a 150
[4] 1401 PRINC LD .X, /C99 ; inicia el ndice
[5] 5000 LD .A, #0 ; inicia el acumulador
[6] 2302 BUCLE ADD .A, [/PZ][.X] ; suma los nmeros
[7] 6401 SUB .X, #1 ; decrementa contador
[8] 4012 BZ /FIN ; si es cero, fin
[9] 3006 BR /BUCLE ; vuelta al bucle
[10] 2102 FIN ADD .A, [/PZ] ; suma el primer nmero
[11] 0103 ST .A, [/PSUM] ; guarda resultado final
[12] 7000 HALT
END

Programa 2.3 Suma, con direccionamiento indirecto e indexado, de cien nmeros almacenados en la memoria.

ndices sultados parciales en una palabra reservada a ese


Lo correcto, ya que disponemos de un registro efecto (la de direccin 150). Pero es que ahora no
de ndice, es hacer uso de la funcin que propor- son necesarias, porque el acumulador no se utiliza
ciona. Recordemos que su contenido se suma a ya para ninguna otra cosa (antes, en cada paso por
(CD) o a ((CD)) para obtener la direccin efec- el bucle, se modificaba una instruccin, o un pun-
tiva. Si lo vamos incrementando (o decrementan- tero, a travs del acumulador). Por tanto, haciendo
do), esta direccin efectiva ir igualmente incre- uso de la funcin que su propio nombre indica, po-
mentndose (o decrementndose). As, el puntero demos ir acumulando la suma en l. Resulta as un
puede quedar fijo, apuntando siempre a la primera programa que no slo tiene menos instrucciones,
palabra o a la ltima de la zona, y el contenido de sino que es de ejecucin ms rpida, porque acce-
X puede ir creciendo de 0 a 99, o disminuyendo de menos veces a la memoria.
de 99 a 0. Bastar entonces que la instruccin que El registro X se utiliza ya con su verdadera fun-
tiene que ir refirindose a palabras sucesivas (de cin de registro de ndice, pero, al mismo tiempo,
arriba abajo, o de abajo arriba) utilice direc- como contador para controlar el bucle. Como (X)
cionamiento indirecto e indexado. vara entre 99 y 0, pero se decrementa y se com-
Partiendo de estas premisas, hay diversas va- prueba si ha llegado a cero despus de la instruc-
riantes posibles, segn que el puntero apunte al cin ADD (en la que se usa su valor), resulta que la
principio o al final de la zona y segn que el ndice ltima vez que se ejecuta ADD el contenido de X
vaya incrementndose o decrementndose. En el es 1, no 0. Esa es la razn de la instruccin [10].
Programa 2.3 se ha seguido la opcin de apuntar Evidentemente, hay otras soluciones. Por ejemplo,
a la direccin ms baja (50) y hacer que el ndice iniciar X con 100 y decrementarlo antes de ADD.
vaya disminuyendo desde 99 hasta 0. La instruccin esencial del programa es:
Tres observaciones vienen al caso: ADD .A, [/2][.X]
A primera vista, puede sorprender la ausencia Las dems tienen funciones auxiliares: dar va-
de algunas instrucciones que estaban en el progra- lores iniciales, controlar el bucle y obtener el re-
ma anterior: son las que van actualizando los re- sultado final.
90 Leccin 2. Smplez+i4

2.8. Interrupciones Inhibicin y permiso de interrupciones

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

del programa en el que el programador ha de- Comunicaciones entre el programa y las


cidido que tiene que ocurrir. Por el contrario, el rutinas de servicio
programador no tiene control sobre los momen-
tos en que aparecern las interrupciones. Cuan- El funcionamiento de las rutinas de servicio ni-
do se pasa a atender una interrupcin, la rutina camente puede entenderse estudindolo conjunta-
de servicio no tiene normalmente nada que ver mente con el de un programa que haga uso de
con las operaciones que el programa interrum- ellas. Imaginemos un programa que empieza escri-
pido estaba realizando. De ah la necesidad de biendo algo por la pantalla, luego sigue con clcu-
que en los cambios de contexto se preserven los que no vienen al caso, pero llegado a cierto
y luego se restauren los contenidos de los re- punto necesita leer datos del teclado, y finalmen-
gistros AC y X; de no hacerlo as, la rutina de te escribe algn resultado por la pantalla. Veamos
servicio podra machacar resultados parcia- primero dnde se ubican en la MP los componen-
les del programa almacenados en ellos. tes de software que entran en juego: el programa,
En las llamadas a subprogramas de Smplez y las rutinas de servicio, las zonas de datos, etc.
Smplez+i4, el programador construye la ins- El mapa de memoria se muestra en la Figu-
truccin de retorno, porque sabe exactamente ra 2.3. El programa se carga en las direcciones
cul es la direccin de retorno5 . Pero ahora no bajas (parte superior). En la direccin 63 la UCP
es as, y debe ser la UCP la que, automtica- guarda la direccin de retorno. Las zonas de datos
mente, al cambiar de contexto, guarde en algn de la pantalla y del teclado ocupan las direcciones
sitio la direccin de retorno. En el caso de Sm- 3.840 a 3.919 y 3.920 a 3.999 respectivamente. A
plez+i4, la UCP est diseada de modo que al partir de la direccin 4.000 estn las instrucciones
pasar a atender a una interrupcin guarda siem- que salvan los registros y averiguan la causa de in-
pre la direccin de retorno (direccin de la ins- terrupcin, y a continuacin, las RS.
truccin siguiente a aqulla durante la cual apa- Esta disposicin es arbitraria, y podramos
reci la interrupcin) en una palabra determina- igualmente haber elegido otras direcciones para
da de la MP, la de direccin 63. De este modo,
al final de la rutina de servicio se podr vol- 0
ver al programa interrumpido con la instruccin programa
BR [/63] (bifurcacin a la direccin que est
almacenada en la palabra de direccin 63).
63 direccin de retorno
Tras guardar la direccin de retorno en la pa-
labra de direccin 63 la UCP bifurca, tambin
3840
automticamente, a una direccin a partir de la
zona de datos de la pantalla
cual deberemos tener un programa que guarde
3919
los contenidos de los registros AC y X, investi- 3920
gue la causa de la interrupcin y pase a ejecu- zona de datos del teclado
tar la rutina de servicio que corresponda a esa 3999
4000
causa. En Smplez+i4, esa direccin a la que la consulta y rutinas de
servicio de interrupciones
UCP bifurca automticamente es la 4.000.
5
Ya hemos dicho en el Apartado 1.10 que las UCP reales 4092
tienen instrucciones para llamar a y retornar de subprogramas puertos de e/s (no MP)
4095
(Apartado 4.6), y no hay que construir instrucciones de re-
torno. La UCP se encarga de los retornos de subprogramas y
de rutinas de servicio, como veremos en la Leccin 6. Figura 2.3 Asignacin de la MP en Smplez+i4.
2.8. Interrupciones 93

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

Dir.MP Cont. Programa en Comentarios


(dec.) (oct.) ensamblador
------ ------ --------------------- -----------------------------------------
[ 0] 3014 BR /PRINC
[ 1] 0000 MSPAN RES 1 ; Mensaje de la pantalla
[ 2] 0000 MSTEC RES 1 ; Mensaje del teclado
[ 3] 0000 XPAN RES 1 ; ndice para la RS de la pantalla
[ 4] 0000 XTEC RES 1 ; ndice para la RS del teclado
[ 5] 7400 PZPAN DATA 3840 ; Puntero a la zona de la pantalla
[ 6] 7520 PZTEC DATA 3920 ; Puntero a la zona del teclado
[ 7] 7774 PEPAN DATA 4092 ; Puntero al puerto de estado de pantalla
[ 8] 7776 PETEC DATA 4094 ; Puntero al puerto de estado de teclado
[ 9] 7775 PDPAN DATA 4093 ; Puntero al puerto de datos de pantalla
[10] 7777 PDTEC DATA 4095 ; Puntero al puerto de datos de teclado
[11] 0117 CTE79 DATA 79 ; Constante para iniciar ndices
[12] PRINC ... ; Entre otras cosas, el programa llena
... ; la zona de datos de la pantalla
[20] 5000 LD .A,#0
[21] 0001 ST .A,/MSPAN ; Inicia [1] y [2] (donde
[22] 0002 ST .A,/MSTEC ; las RS ponen sus mensajes)
[23] 1013 LD .A,/CTE79
[24] 0003 ST .A,/XPAN ; Inicia los ndices para
[25] 0004 ST .A,/XTEC ; las zonas de datos
[26] 5003 LD .A,#3 ; Inicia el puerto de estado
[27] 0107 ST .A,[/PEPAN] ; de la pantalla
[28] 5002 LD .A,#2 ; Inicia el puerto de estado
[29] 0110 ST .A,[/PETEC] ; del teclado
[30] 7200 EI ; A partir de este momento la UCP
... atiende interrupciones
[40] 1002 ESPT LD .A,/MSTEC ; Ahora el programa necesita
[41] 4050 BZ /ESPT ; los caracteres del teclado:
... ; espera a que la RS avise
... ; El programa procesa ahora los datos ledos, y si
... ; necesita leer ms vuelve a iniciar al teclado
... ; (instrucciones como [20],[22],[23],[25],[28] y [29])
...
[45] 1001 ESPP LD .A,/MSPAN ; Ahora quiere escribir otra
[46] 4055 BZ /ESPP ; lnea por la pantalla: espera
... ; Rellena la zona de datos y vuelve a iniciarla
... ; (instrucciones como [20],[21],[23],[24],[26] y [27],
... ; pero vea el Ejercicio 12)
[50] HALT
[51] 0000 AC RES 1 ; para guardar el acumulador
[52] 0000 X RES 1 ; para guardar el registro X
[53] 7662 PRSTEC DATA RSTEC ; puntero a la RS del teclado
[54] 7654 PBIFPAN DATA BIFPAN ; para bifurcacin en la RS de la pantalla
[55] 7671 PBIFTEC DATA BIFTEC ; para bifurcacin en la RS del teclado
[56] 7676 PFIN DATA FIN ; para salida a operaciones finales

Programa 2.4 Iniciacin y uso de las rutinas de servicio.

1. Guardar en la MP los contenidos de AC y X. sulta 0 poner 1 en MSPAN).


2. Averiguar quin ha interrumpido. 4. Si ha sido el teclado, pasar a ejecutar su RS
3. Si ha sido la pantalla, pasar a ejecutar su RS (leer el carcter del puerto de datos y llevarlo
(escribir un carcter de su zona de datos a su a su zona de datos, decrementar su ndice, y si
puerto de datos, decrementar su ndice, y si re- resulta 0 poner 1 en MSTEC).
2.8. Interrupciones 95

Dir.MP Cont. Programa en Comentarios


(dec.) (oct.) ensamblador
------ ------ ---------------------- -------------------------------------
ORG 4000
[4000] 0063 ST .A,/AC ; Guarda (AC)
[4001] 0464 ST .X,/X ; Guarda (X)
[4002] 1110 LD .A,[/PETEC] ; Mira si ha sido el teclado:
[4003] 6003 SUB .A,#3 ; en tal caso, debe tener los dos
[4004] 4165 BZ [/PRSTEC] ; bits de su puerto de estado a "1"
[4005] 1403 LD .X,/XPAN ; Si no ha sido el teclado, es la
[4006] 4166 BZ [/PBIFPAN] ; pantalla; si no es el ltimo
[4007] 1305 LD .A,[/PZPAN][.X] ; carcter, accede a la zona de
[4008] 0111 ST .A,[/PDPAN] ; datos, lo escribe
[4009] 6401 SUB .X,#1 ; y decrementa el ndice
[4010] 0403 ST .X,/XPAN
[4011] 3170 BR [/PFIN] ; Va al final
[4012] 5001 BIFPAN LD .A,#1 ; Si es el ltimo carcter, inhibe
[4013] 0107 ST .A,[/PEPAN] ; las interrupciones de pantalla,
[4014] 0001 ST .A,/MSPAN ; avisa al programa,
[4015] 1105 LD .A,[/PZPAN] ;
[4016] 0111 ST .A,[/PDPAN] ; escribe el carcter
[4017] 3170 BR [/PFIN] ; y va al final
[4018] 1404 RSTEC LD .X,/XTEC ; Caso del teclado: mira si es
[4019] 4167 BZ [/PBIFTEC] ; el ltimo carcter
[4020] 1112 LD .A,[/PDTEC] ; Carga el carcter en el AC,
[4021] 0306 ST .A,[/PZTEC][.X] ; lo lleva a la zona de datos
[4022] 6401 SUB .X,#1 ; y decrementa el ndice
[4023] 0404 ST .X,/XTEC
[4024] 3170 BR [/PFIN]
[4025] 5001 BIFTEC LD .A,#1 ; Si es el ltimo carcter, inhibe
[4026] 0107 ST .A,[/PETEC] ; las interrupciones de teclado,
[4027] 0002 ST .A,/MSTEC ; avisa al programa
[4028] 1110 LD .A,[/PDTEC] ; y lee el carcter
[4029] 0106 ST .A,[/PZTEC] ;
[4030] 1063 FIN LD .A,/AC ; stas son las operaciones
[4031] 1464 LD .X,/X ; finales: restaurar AC y X,
[4032] 7200 EI ; permitir interrupciones
[4033] 3177 BR [/63] ; y volver al programa
END

Programa 2.5 Rutinas de servicio de interrupciones.


5. Antes de volver al programa interrumpido (con to indirecto. As, para bifurcar a la instruccin que
BR [/63]), restaurar los contenidos de AC y ocupa la palabra cuya direccin est identificada
de X y permitir interrupciones (con EI). por la etiqueta RSTEC reservamos, con la etiqueta
PRSTEC, una palabra que contenga esa direccin,
El lector puede comprobar que el Programa 2.5
es decir, un puntero. Como vemos en el listado del
implementa las operaciones especificadas en los
Programa 2.4, el lenguaje ensamblador permite es-
puntos 1 a 5. En l estn incluidas las rutinas de
cribir el valor del puntero como DATA RSTEC. El
servicio: la de la pantalla empieza en la direccin
ensamblador (el programa que traduce a binario)
4.005 y la del teclado en la 4.018 (etiqueta RSTEC).
se encargar de averiguar que a RSTEC le corres-
Algunas observaciones para facilitar el anlisis:
ponde el valor 4.018 (7662 octal).
Al estar todas las instrucciones en direcciones En el Programa 2.4 se utilizan etiquetas del
superiores a 63, para hacer bifurcaciones dentro Programa 2.5, y viceversa. Esto implica que, en
del programa hay que recurrir al direccionamien- principio, ambos programas fuente deben ensam-
96 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

En la primera lnea puede verse ORG 4000.


Figura 2.4 Tiempos de servicio de interrupciones.
Esto le dice al ensamblador que la instruccin que
viene a continuacin va a cargarse en la direccin to en que se ejecuta la instruccin EI del Progra-
4.000, con lo que le da los valores correctos a las ma 2.4 (el programa que hace uso de las RS).
etiquetas BIFPAN, etc. La pantalla interrumpir enseguida, se ejecutar
Las instrucciones [4013] y [4026] merecen un su RS, inicindose la escritura del primer carc-
comentario especial. Una vez que la pantalla ha ter, y se volver al programa, donde se seguirn
terminado de escribir los ochenta caracteres, sus ejecutando instrucciones (las que correspondan a
interrupciones deben inhibirse, pues de lo contra- los puntos que hemos puesto entre la instruc-
rio seguira interrumpiendo indefinidamente (Ejer- cin EI, en [30], y la LD .A, /MSTEC, en [40]).
cicio 11). Ser el programa el que, ms adelante, Si suponemos que la pantalla escribe con una ve-
rellene de nuevo la zona de datos, ponga valores locidad de treinta caracteres por segundo, volver
iniciales otra vez y vuelva a permitir interrupcio- a interrumpir a los 33 milisegundos, pero duran-
nes. Lo mismo puede decirse del teclado. La in- te ese tiempo pueden haberse ejecutado cientos de
hibicin se hace cargando 1 (000... 01 en bi- miles de instrucciones del programa6 , como ilus-
nario) en el acumulador y llevndolo al puerto de tra la Figura 2.4. Por su parte, las interrupciones
estado. Esto tiene el efecto secundario de poner a del teclado se suceden a un ritmo an ms bajo7 .
1 el bit preparado, pero no importa, primero As, la UCP sigue ejecutando instrucciones del
porque ya tena ese valor, y adems poco despus programa, interrumpindose a veces para escribir
se va a ejecutar una instruccin de escritura (caso un carcter por la pantalla o para leer un carcter
de la pantalla) o de lectura (caso del teclado) que del teclado. Como todo esto es muy rpido (para
va a poner ese bit a 0 o a 1 respectivamente la percepcin humana), un observador que no se-
(Ejercicio 12). Y ese mismo 1 del acumulador pa lo que ocurre podra pensar que el ordenador
se usa para avisar al programa con MSPAN o MSTEC. est haciendo tres cosas al mismo tiempo (calcu-
Tambin es de destacar la necesidad de la ins- lar, leer caracteres del teclado y escribir caracteres
truccin [4032]. En efecto, la UCP inhibe todas por la pantalla), como si tuviera tres UCP (y co-
las interrupciones en cuanto pasa a atender a una, mo algunos camareros, tan eficientes que parecen
por lo que es preciso permitirlas antes de volver al atender a varios clientes al mismo tiempo).
programa interrumpido, pues de lo contrario slo Este efecto se llama concurrencia aparente.
se atendera la primera interrupcin (pero vase el La concurrencia real es la que se da en ordena-
Ejercicio 9 para una cuestin de matiz). dores que efectivamente tienen varias unidades de
procesamiento, como los que comentaremos en la
Leccin 15, y no una nica UCP (en la analoga de
Concurrencia aparente los camareros, cuando hay uno para cada cliente).
6
He aqu una tarea que requiere algunas dosis de Puede ser un nmero reducido de instrucciones, que se
ejecutan repetidamente dentro de un bucle.
imaginacin, concentracin y paciencia: le pedi- 7
Depende de la habilidad de quien teclea, pero slo en la
mos al lector que complete los detalles del siguien- redaccin de El Planeta podramos ver a alguien llamado
te anlisis sobre lo que ocurre a partir del momen- Clark Kent escribiendo a treinta pulsaciones por segundo.
2.9. Comentarios sobre Smplez+i4 97

2.9. Comentarios sobre Smplez+i4 br puesto 1 en MSTEC y en la siguiente ejecu-


cin de BZ se saldr del bucle. Pero qu ocurre
Smplez+i4 sirve para ilustrar cmo la adicin si la interrupcin aparece durante la ejecucin de
de unos recursos sencillos de hardware (en el ni- LD? La RS contiene instrucciones que afectan a
vel de microarquitectura podremos ver con deta- la UAL y al valor del indicador Z, que es el que
lle qu recursos son esos) enriquece notablemente mira la instruccin BZ9 . Por tanto, cuando ter-
el modelo funcional de la mquina convencional. mine el servicio de la interrupcin y la UCP eje-
No obstante, es interesante que el lector reflexio- cute BZ /ESPT la condicin para la bifurcacin ya
ne sobre este hecho: cmo puede utilizarse esa no depende del resultado de la instruccin LD, con
memoria de 4.096 palabras? El problema es que lo que el programa no funcionar como pretenda
toda referencia a una direccin mayor que 63 hay el programador (puede que se salga del bucle sin
que hacerla a travs del direccionamiento indirec- tener que hacerlo, o que siga en l cuando debera
to 8 . Por tanto, cualquier programa medianamente salir). El problema es que no hemos previsto salvar
largo tendr que hacer uso continuamente de pun- todo el estado de la UCP en el cambio de contex-
teros (y no slo para las instrucciones de procesa- to: la informacin (un bit) sobre el resultado de la
miento de operandos, sino tambin para las bifur- ltima operacin en la UAL (igual o distinto de
caciones a direcciones superiores a 63, como ya cero) forma tambin parte de ese estado.
se ha puesto de manifiesto en el programa de ser- He aqu tres posibles soluciones para resolver
vicio de interrupciones). Pero todos esos punteros este problema:
tienen que estar entre las direcciones 0 y 63. Es- La UCP podra guardar automticamente (me-
to limita mucho las posibilidades y hace a la m- diante hardware) esa informacin (el valor del
quina ms lenta (el direccionamiento indirecto im- indicador Z) durante el cambio de contexto (de
plica ms accesos a la memoria, y, por tanto, ms igual modo que hace con la direccin de retor-
tiempo de procesamiento). En algunos ordenado- no), y recuperarla al hacer el retorno. Esto im-
res que tenan un modelo funcional parecido a ste plicara aadir una nueva instruccin de bifur-
se resolva este problema mediante otro modo de cacin que, adems de la funcin de BR, recu-
direccionamiento: el relativo a pgina; lo descri- pere ese bit.
biremos en la Leccin 4.
Podramos dotar a la mquina de instrucciones
Y una reflexin final e importante sobre el me-
adicionales que permitiesen guardar en la MP
canismo de interrupciones. Volvamos a analizar lo
el valor de ese bit y luego recuperarlo (y en-
que ocurre mientras el Programa 2.4 est esperan-
tonces se hara mediante software, igual que se
do los ochenta caracteres del teclado, ejecutando
hace con (AC) y con (X)).
el bucle
Las dos soluciones anteriores implican modifi-
[40] 1002 ESPT LD .A, /MSTEC caciones del modelo funcional (y, por tanto, re-
[41] 4050 BZ /ESPT diseo de la UCP), puesto que requieren nuevas
La ejecucin de estas instrucciones se ver in- instrucciones. Es posible otra solucin (aunque
terrumpida cada vez que se pulse una tecla. Si la algo rebuscada) para conseguir lo mismo sin
interrupcin aparece durante la ejecucin de BZ no aadir instrucciones: modificar el programa de
pasa nada: la siguiente instruccin a ejecutar (des- consulta y servicio de interrupciones (Progra-
pus de salir de la RS) ser la LD, y si el carc- ma 2.5) para que se encargue de consultar a la
ter ledo del teclado ha sido el ltimo la RS ha- entrada el valor de (Z) y de restaurarlo a la sa-
8
lida. Vase el Ejercicio 10.
O utilizando X con un valor superior a 63, pero viene a
9
ser lo mismo: es como cargar el valor del puntero en X. Vase la nota al pie de la pgina 83.
98 Leccin 2. Smplez+i4

2.10. Resumen Ahora podemos responder, aunque sea parcial-


mente (y para el caso muy simplificado de Sm-
Si MD es el nombre de un campo del formato plez+i4), a las preguntas que plantebamos en el
de instrucciones que indica, en general, el modo de Apartado 2.1:
direccionamiento, entonces podemos, tambin en Cmo puede la UCP abandonar la ejecucin
general, escribir: de un programa, ejecutar otro (la rutina de ser-
vicio de la interrupcin), y luego volver al pri-
DE = f((CD),(MD)) mero como si nada hubiese ocurrido? Median-
te unos circuitos que guardan automticamente
Es decir, la direccin efectiva de la MP a la que
la direccin de retorno en la palabra de la MP
hace referencia una instruccin se calcula a partir
de direccin 63 y bifurcan a una direccin pre-
de (CD) (contenido del campo CD del formato
determinada (4.000). Para que despus de vol-
de instrucciones) en funcin de cul sea el modo
ver el programa se siga ejecutando normalmen-
de direccionamiento.
te, hay que salvar el contexto (en Smplez+i4,
El direccionamiento directo es como en Sm- (AC) y (X), aunque tambin sera preciso guar-
plez: DE = (CD). dar (Z)) y luego restaurarlo. Aqu hemos vis-
En el direccionamiento indirecto la direc- to una solucin con los mnimos elementos de
cin efectiva se obtiene leyendo el contenido de hardware, en la que, salvo (CP), el cambio de
la palabra de direccin (CD). Simblicamente: contexto se realiza mediante software.
DE = ((CD)). Esto resulta de utilidad para tener
Cmo se comunican el programa y la rutina de
punteros en la MP.
servicio? (por ejemplo, el programa le tiene que
El direccionamiento indexado consiste en que
decir a la rutina que lea una lnea de carac-
DE = (CD)+(X), y se utiliza para recorrer zo-
teres y los ponga en una zona de memoria, y la
nas de memoria haciendo variar el contenido del
rutina le tiene que avisar al programa cuando ha
registro de ndice, X.
terminado). Mediante variables globales (pa-
El direccionamiento inmediato permite tener el labras de la MP a las que acceden el programa
operando en la misma instruccin (no hay, pues, y las rutinas).
direccin efectiva, o tambin podemos decir que
Puede verse interrumpida la propia rutina de
sta es la de la propia instruccin).
servicio? No, porque al pasar a atender a una
El uso de modos de direccionamiento facilita la
interrupcin los circuitos inhiben automtica-
programacin en lenguaje de mquina, como he-
mente las interrupciones. Pero esta situacin
mos ilustrado con varios ejemplos en la primera
podra cambiarse, utilizando la instruccin EI
parte de esta Leccin.
dentro de la rutina.
Despus hemos estudiado las interrupciones,
que permiten realizar de manera simultnea Qu hace la UCP ante dos peticiones de in-
(aparentemente) las operaciones de comunicacio- terrupcin simultneas? En Smplez+i4, atien-
nes con los perifricos y las de procesamiento. Pa- de primero al teclado (Programa 2.5; vase el
ra que tal cosa sea posible es preciso tener carga- Ejercicio 7). En general, se establecen priori-
das en la MP las rutinas de servicio de los dispo- dades mediante hardware o software.
sitivos que pueden interrumpir. Cuando un perif- Para qu otras cosas que no sean transferen-
rico interrumpe, la UCP conmuta de programa: cias de datos sirven las interrupciones? Res-
deja el que estaba ejecutando y pasa a averiguar ponderemos a esta pregunta ms adelante (en
qu perifrico ha interrumpido y a ejecutar su ru- el Apartado 3.6), pero, como avance, el lector
tina de servicio. puede tratar de resolver el Ejercicio 13.
2.14. Ejercicios 99

2.11. Observaciones terminolgicas 2.14. Ejercicios


Algunos traducen pointer por apuntador. Pun- Los Ejercicios 2 al 6 consisten en desarrollar pro-
tero es, sin embargo, la denominacin ms habitual. gramas para Smplez+i4.Debern resolverse haciendo
Lo que hemos llamado zona de datos suele cono- el uso adecuado de sus modos de direccionamiento.
cerse como buffer de entrada/salida.
1. Al definir las instrucciones que tienen modo
Los nemnicos de las instrucciones EI y DI provie- de direccionamiento inmediato (cdigos binarios
nen de Enable Interrupt y Disable Interrupt. 101 y 110) hemos dicho que el operando inmedia-
to ocupa los bits del campo CD, y que el valor de
los bits 6 y 7 es indiferente. Pero puesto que es-
2.12. Notas histricas tos bits no son necesarios para estas instrucciones,
podramos haberlos aprovechado para ampliar el
La idea de utilizar un registro como ndice se intro-
margen de valores posibles de ese operando in-
dujo en el Mark I de la Universidad de Manchester
mediato. Cul sera ese margen?
(no el Mark I de la Universidad de Harvard mencio-
nado en el Apartado 0.12), en 1949 (Lavington, 1993). 2. Reprograme en Smplez+i4 el problema del inter-
Entonces le llamaron Bline, o Btube (A era cambio de dos zonas de memoria (Programa 1.4).
el acumulador, y C el registro de instruccin, o de 3. Escriba un subprograma para el problema pro-
control). En una entrevista con Tom Kilburn (Bowker y puesto en el Ejercicio 27 de la Leccin 1.
Giordano, 1993) se encuentran muchos detalles intere-
4. Escriba un programa que permita poner a cero
santes sobre los trabajos pioneros de este grupo ingls.
una zona de memoria de sesenta y cuatro palabras
Los primeros ordenadores que aplicaron el direc-
que empieza por la de direccin 100 (decimal).
cionamiento indirecto fueron el IBM709 (1958) y el
PDP1 (Programmed Data Processor), de D.E.C. 5. Escriba un programa que recorra la misma zona
(1959). En este caso se trataba, adems, de un direc- (direcciones 100 a 163) y que deje en una pala-
cionamiento indirecto multinivel: todas las palabras bra reservada en el mismo programa la direccin
incluan un bit de indireccin, de modo que se poda de la primera palabra de esa zona cuyo conteni-
hacer DE = ((CD)), DE = (((CD))), etc. do sea 0. Si no se encuentra ninguna palabra con
El direccionamiento relativo conjuntamente con el contenido 0, el programa debe terminar dejando
indirecto aparece en 1960: el CDC160 de Control Da- 0 en la palabra reservada.
ta. Por cierto, era un ordenador parecido a Smplez+i4: 6. En el Programa 2.5 se supone que los caracteres
instrucciones, acumulador y direcciones de doce bits, se almacenan en sus zonas de abajo arriba (pri-
MP de 4.096 palabras de doce bits... Slo careca del mer carcter ledo del teclado, o a escribir en la
direccionamiento indexado (Jones, 2002). pantalla, en la direccin ms alta). Rehaga el pro-
La idea de las interrupciones no se introdujo para las grama para que se siga el convenio de almacena-
comunicaciones con los perifricos, sino para la detec- miento opuesto.
cin del desbordamiento en el UNIVAC 1, aparecido
7. Si los perifricos solicitan interrupcin al mismo
en 1951 (Codd, 1962). En un prototipo del National
tiempo. A cul se atiende primero? Modifique el
Bureau of Standards americano llamado DYSEAC
Programa 2.5 para invertir esta prioridad.
se aplic al tratamiento de la entrada/salida (Leiner y
Alexander, 1954), y poco despus (en 1953) se intro- 8. Las rutinas de servicio del Programa 2.5 supo-
duca en los ordenadores comerciales, empezando con nen que las lneas tienen siempre ochenta carac-
el UNIVAC 1103. teres. Lo normal es que una lnea pueda tener una
longitud variable (con un valor mximo, que pue-
de seguir siendo 80), indicndose su final con el
2.13. Orientaciones bibliogrficas carcter de retorno (ret, o CR: Carria-
ge Return), que tiene como codificacin ASCII
Los libros citados en la Leccin anterior son aplica- 0001101 (13 en decimal). Reprograme esas ru-
bles a sta: los modelos ficticios que utilizan inclu- tinas para que terminen al llegar a los ochenta ca-
yen tambin direccionamiento indirecto y/o indexado. racteres, o bien cuando aparezca CR.
100 Leccin 2. Smplez+i4

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}}

Вам также может понравиться

  • Codigos
    Codigos
    Документ9 страниц
    Codigos
    Anonymous DWFmWf
    Оценок пока нет
  • Practica Subred y VLSM
    Practica Subred y VLSM
    Документ8 страниц
    Practica Subred y VLSM
    jhormancely
    100% (2)
  • Lecc 09
    Lecc 09
    Документ20 страниц
    Lecc 09
    rafaelantonio01
    Оценок пока нет
  • Alta Disponibilidad Con Heartbeat 150212234124 Conversion Gate02
    Alta Disponibilidad Con Heartbeat 150212234124 Conversion Gate02
    Документ32 страницы
    Alta Disponibilidad Con Heartbeat 150212234124 Conversion Gate02
    rafaelantonio01
    Оценок пока нет
  • Lecc 09
    Lecc 09
    Документ20 страниц
    Lecc 09
    rafaelantonio01
    Оценок пока нет
  • Lecc 10
    Lecc 10
    Документ12 страниц
    Lecc 10
    rafaelantonio01
    Оценок пока нет
  • Lecc 11
    Lecc 11
    Документ14 страниц
    Lecc 11
    rafaelantonio01
    Оценок пока нет
  • Lecc 09
    Lecc 09
    Документ20 страниц
    Lecc 09
    rafaelantonio01
    Оценок пока нет
  • Lecc 07
    Lecc 07
    Документ38 страниц
    Lecc 07
    rafaelantonio01
    Оценок пока нет
  • Lecc 04
    Lecc 04
    Документ36 страниц
    Lecc 04
    rafaelantonio01
    Оценок пока нет
  • Lecc 01
    Lecc 01
    Документ34 страницы
    Lecc 01
    rafaelantonio01
    Оценок пока нет
  • Lecc 07
    Lecc 07
    Документ38 страниц
    Lecc 07
    rafaelantonio01
    Оценок пока нет
  • Lecc 05
    Lecc 05
    Документ32 страницы
    Lecc 05
    rafaelantonio01
    Оценок пока нет
  • Lecc 06
    Lecc 06
    Документ50 страниц
    Lecc 06
    rafaelantonio01
    Оценок пока нет
  • Lecc03 PDF
    Lecc03 PDF
    Документ30 страниц
    Lecc03 PDF
    rafaelantonio01
    Оценок пока нет
  • Lecc 02
    Lecc 02
    Документ20 страниц
    Lecc 02
    rafaelantonio01
    Оценок пока нет
  • Lecc 00
    Lecc 00
    Документ66 страниц
    Lecc 00
    Ernesto Oviedo
    Оценок пока нет
  • AvAdministration (ESPAÑOL)
    AvAdministration (ESPAÑOL)
    Документ678 страниц
    AvAdministration (ESPAÑOL)
    rafaelantonio01
    Оценок пока нет
  • Estación Maestra SIMA - Actuadores AUMA
    Estación Maestra SIMA - Actuadores AUMA
    Документ65 страниц
    Estación Maestra SIMA - Actuadores AUMA
    Fre HM
    Оценок пока нет
  • Espirometro Datospir120 PDF
    Espirometro Datospir120 PDF
    Документ6 страниц
    Espirometro Datospir120 PDF
    Emmanuel Herrera Santana
    Оценок пока нет
  • Ipsec
    Ipsec
    Документ26 страниц
    Ipsec
    Willian Yanza
    Оценок пока нет
  • Siempre LTE + Voice Advanced PRO - TT-SLTE-P6-V1
    Siempre LTE + Voice Advanced PRO - TT-SLTE-P6-V1
    Документ4 страницы
    Siempre LTE + Voice Advanced PRO - TT-SLTE-P6-V1
    Guillermo Medina
    Оценок пока нет
  • Ejercicio
    Ejercicio
    Документ22 страницы
    Ejercicio
    albertozapata
    Оценок пока нет
  • Elementos Informáticos
    Elementos Informáticos
    Документ58 страниц
    Elementos Informáticos
    Evi sanchez
    Оценок пока нет
  • Informe La Programacion Web Formato IEEE
    Informe La Programacion Web Formato IEEE
    Документ3 страницы
    Informe La Programacion Web Formato IEEE
    kjashkasjh
    Оценок пока нет
  • Cómo Limpiar Virus Del Celular
    Cómo Limpiar Virus Del Celular
    Документ3 страницы
    Cómo Limpiar Virus Del Celular
    Merin Merin
    Оценок пока нет
  • Mapa Conceptual Yamidddddddddddddddddddddd
    Mapa Conceptual Yamidddddddddddddddddddddd
    Документ3 страницы
    Mapa Conceptual Yamidddddddddddddddddddddd
    Martha Zulay Sanchez Arias
    Оценок пока нет
  • Practica 07
    Practica 07
    Документ18 страниц
    Practica 07
    mlsd2010
    Оценок пока нет
  • Intro Ducci On
    Intro Ducci On
    Документ22 страницы
    Intro Ducci On
    eric lop veg
    Оценок пока нет
  • Ingenieria Social Con Beef
    Ingenieria Social Con Beef
    Документ19 страниц
    Ingenieria Social Con Beef
    FRANCISCO ROBERTO ORELLANA ROBLES
    Оценок пока нет
  • Lenguaje Maquina
    Lenguaje Maquina
    Документ19 страниц
    Lenguaje Maquina
    Madaí Kanthunzita
    Оценок пока нет
  • 01 - Análisis de Bases de Datos de Ventas Mediante Formato Condicional
    01 - Análisis de Bases de Datos de Ventas Mediante Formato Condicional
    Документ39 страниц
    01 - Análisis de Bases de Datos de Ventas Mediante Formato Condicional
    Luis Eduardo
    Оценок пока нет
  • .....
    .....
    Документ19 страниц
    .....
    Jhimmy Usuriano Eduardo
    Оценок пока нет
  • Labview 2009 Full
    Labview 2009 Full
    Документ7 страниц
    Labview 2009 Full
    HectorLopez
    Оценок пока нет
  • Modulo II
    Modulo II
    Документ121 страница
    Modulo II
    My name
    Оценок пока нет
  • Configuracion AutoDJ PDF
    Configuracion AutoDJ PDF
    Документ5 страниц
    Configuracion AutoDJ PDF
    gerardgoag
    Оценок пока нет
  • Ccna1 Cap01
    Ccna1 Cap01
    Документ31 страница
    Ccna1 Cap01
    Juan
    Оценок пока нет
  • Guia 4K 709 V1
    Guia 4K 709 V1
    Документ102 страницы
    Guia 4K 709 V1
    carlos_bujosa
    Оценок пока нет
  • Radio Digital
    Radio Digital
    Документ7 страниц
    Radio Digital
    Candy Andrea Condori Sanchez
    Оценок пока нет
  • Practica1 SEBASTIAN CAMILO BRAVO BARRERA
    Practica1 SEBASTIAN CAMILO BRAVO BARRERA
    Документ26 страниц
    Practica1 SEBASTIAN CAMILO BRAVO BARRERA
    John F. Rodriguez Bahamon
    Оценок пока нет
  • 2.1 Tecnologías de Cómputo
    2.1 Tecnologías de Cómputo
    Документ8 страниц
    2.1 Tecnologías de Cómputo
    Jose Luis Flores
    Оценок пока нет
  • Ejemplos NoSQL
    Ejemplos NoSQL
    Документ33 страницы
    Ejemplos NoSQL
    Mario
    Оценок пока нет
  • HTTP SSH
    HTTP SSH
    Документ12 страниц
    HTTP SSH
    Luis Jose Garcia
    Оценок пока нет
  • Programador de Microcontroladores PIC S
    Programador de Microcontroladores PIC S
    Документ8 страниц
    Programador de Microcontroladores PIC S
    sanlugo
    Оценок пока нет
  • Chatbot Actividad4
    Chatbot Actividad4
    Документ6 страниц
    Chatbot Actividad4
    Jonathan Neri
    Оценок пока нет
  • Medicion de Temperatura
    Medicion de Temperatura
    Документ3 страницы
    Medicion de Temperatura
    anon_76721220
    Оценок пока нет