− 1 −
I. LENGUAJE ABSOLUTO
En el capitulo anterior hemos visto que mediante un diagrama de flujo queda perfectamente analizado y descripto cualquier proceso de cálculo, es decir que podemos utilizar los diagramas como lenguaje para expresar algoritmos de cálculo. Vimos también que los diagramas de flujo se pueden considerar en varios niveles, yendo desde la descripción en bloque hasta la descripción detallada de los procesos de cálculo.
Para la comunicación entre hombres es suficiente en muchos casos hacer una descripción en bloque ya que, en general, los detalles son comunes a muchos procesos y se consideran conocidos, pero cuando la descripción del proceso debe hacerse para que lo interprete y ejecute una computadora tendrá que ser hecha con todo detalle y no dejar ningún sobreentendido.
Pero no basta con hacer una descripción detallada del fenómeno como seria un diagrama de flujo en detalle, sino que es preciso usar una simbología simple y que sea aceptada por la computadora en que se va a trabajar. A esta simbología básica que es capaz de interpretar una computadora es lo que se llama lenguaje de máquina ó lenguaje absoluto.
En general cada modelo distinto de computadora tiene su lenguaje absoluto particular, por eso al hablar de lenguaje absoluto debemos referirnos a una máquina concreta particular.
Para cada computadora el lenguaje esta constituido por instrucciones y números y su estructura depende de la estructura de la computadora, es decir de las partes de que está compuesta, de las funciones que estas pueden realizar, y de las relaciones entre e ellas.
II. LA COMPUTADORA CEUNS
1. La información
La información que se utiliza en la computadora CEUNS se puede clasificar por el siguiente cuadro :
Los números cortos están compuestos por 9 bits, que se pueden considerar indistintamente como 3 octales. Así, si se consideran sin signo, su rango de a variabilidad serán los enteros comprendidos entre 0 y 511, es decir que el menor número binario sería 000 000 000 y el mayor 111 111 111.- En octal estos números serian 000 y 777.
Los números cortos con signo utilizan la representación de los complementos y el rango en este caso será : (-256 , 255 ) ó en binario y octal (100000000 , 011111111 ), ( 400 , 377) respectivamente.
Los números largos siempre están compuestos por 12 octales de los cuales dedican los 9 de la izquierda para la mantisa en caso que se trate de números flotante.-
Los números en punto fijo, se consideran siempre en el siguiente intervalo
− 8-1 L 8-1
utilizando para la representación de los negativos la forma . . . [línea incompleta]
− 2 −
módulos para los números en punto fijo es : ( 0 , 810 ) Los números en punto flotante, tendrán la mantisa dentro del rango
−1 m 1
y el exponente entre
−128 e 127
y el intervalo normal será
½ m 1 , −1 m − ½
En punto flotante el intervalo de variabilidad de los números es
(8-128 , 8127)
que corresponde aproximadamente a (10-116, 10115)
Las instrucciones
Las instrucciones están compuestas por 6 octales agrupados de la siguiente forma :
XX X XXX
P. F. B DO
el primer grupo consta de dos octales e indican el tipo de función a realizar ; a este grupo le llamaremos parte de función (P. F.). El segundo grupo consta de un solo octal que determina comúnmente (1) un registro B particular ; a este octal le llamaremos simplemente digito B (B). El tercer grupo esta compuesto por tres octales que pueden representar
i) una dirección de memoria
ii) un entero con signo
iii) una máscara
la utilización mas común es la primera, y con ella se indica la dirección de la memoria sobre la que opera la PF, por eso se denomina dirección de operando (DO). La DO puede indicar una posición de las memorias rápidas o un sector del tambor. Para algunas funciones particulares la parte DO se considera entero con signo y se toma como operando (llamado operando inmediato) cuando se trata de operaciones aritméticas con cortos, ó entero sin signo si se utiliza en las operaciones lógicas en este caso decimos que se trata de una máscara. Cada una de estas variantes está determinada por la forma que tenga la PF correspondiente.
2.- Las memorias
En CEUNS las memorias están divididas en tres tipos :
Memoria operativa ó de núcleos
Memoria semi-operativa ó de barras
Memoria auxiliar ó Tambor magnético.
La memoria operativa esta constituida físicamente por anillos ó núcleos de ferrita. Su organización la descompone en 256 zonas (2) (numeradas de 0 a 377) ; cada zona está compuesta de 128 registros largos (L), es decir de 12 octales ; cada registro largo en dos registros medios (M), de nueve bits ; y cada medio en dos registros cortos (H) de tres octales.- Así que cada largo tiene cuatro cortos y cada zona contiene 256 M y 512 H.-
Para identificar estos registros se asocia a cada H un entero octal comprendido entre 000 y 777 ; por lo tanto los M están identificados por los números pares incluidos en dicho rango, y los L por los múltiplos de 4 (3).-
Por comodidad a veces consideraremos estos registros agrupados en páginas (P). Cada página contendrá 16 L, 32 M y 64 H, por
(1) Veremos otras utilizaciones del dígito B mas adelante.-
(2) Por razones económicas [línea completa ilegible, falta la nota (3)]
− 3 −
tanto una zona está compuesta por ocho páginas. Para ayudar la memoria podemos observar que el primer octal de la parte de DO indica la página donde está ubicado el operando.- Esta memoria está conectada con las unidades aritméticas y de control y con el tambor magnético. La información puede circular en todos los sentidos.
La memoria semioperativa está formada físicamente por barras de ferritas. Su organización en 256 zonas (numeradas de 400 a 777) y cada una en páginas y registros es exactamente igual a la organización de la memoria operativa. La diferencia esencial es que la información almacenada en esta memoria es fija, almacenada durante la construcción de la computadora, e inamovible posteriormente. Por tanto esta información puede circular solo en un sentido (de la memoria a los órganos). Los órganos a que está conectada son los mismos que los que está conectada la memoria operativa salvo el tambor.-
En la memoria semi-operativa están permanentemente almacenadas las rutinas de cálculo más comunes como son la raíz cuadrada, las funciones circulares, la exponencial y logarítmica, así como las rutinas frecuentes de entrad y salida, y los compiladores.
La importancia de esta memoria es su gran velocidad a un costo muy bajo.-
La memoria auxiliar está compuesta por un tambor magnético dividido en 512 sectores (S) (numerados de 000 a 777). La capacidad de información de un sector es equivalente a la de una página de la memoria operativa. La mem oria auxiliar está conectada únicamente con la memoria operativa y las transferencias de información se hacen en ambos sentidos por bloques, enviando un sector sobre una página ó viceversa.-
− 4 −
3— LA UNIDAD DE CONTROL
Mediante éste órgano la computadora es capaz de interpretar las instrucciones almacenadas en la memoria operativa o semioperativa, y ordenar su ejecución a los distintos órganos correspondientes. Para realizar esta tarea la Unidad de Control cuenta con varios registros, estos son :
El registro FP (función presente)
El registro d
El registro C
El registro Z1
El registro Z2
El registro T
El registro Z1 indica la zona de memoria en donde está almacenada la instrucción que se va a ejecutar, y el registro en donde esta ésta ubicada se indica en el registro C.
Una vez seleccionada la instrucción a interpretar se envía la PF y el dígito B de dicha instrucción al dígito FP, y la parte DO al registro d. El contenido de d (si es considerado como dirección propia de operando) indicará en que registro de la zona individualizada en Z2 está almacenado el operando.
El registre T se usará solo en les operaciones de transferencia entre el tambor y la memoria operativa y en é1 se indicara en que pagina particular de la zona seleccionada por Z2 interviene en la transferencia. Los 5 primeros registros de la lista anterior tienen una longitud da 3 octales ; el registro T esta compuesto por un solo octal.
Veremos más adelante, al tratar de los registres B, como estos, en algún sentido, se pueden considerar como parte de la unidad de control.-
4.- LA UNIDAD ARITMETICA
La unidad aritmética es el órgano donde se ejecutan las operaciones aritméticas básicas. Si estas se hacen entre números largos operamos en un registro llamado acumulador (A), y si se hicieran entre números cortos se operaria en uno de los registros Bi, que describiremos en la próxima sección.
El acumulador (A) esta compuesto por dos registros de 12 octales cada uno que designaremos por AM (parte mas significativa) AL (parte menos significativa) ya que en general precisamos de un registro de largo doble al de los de L de memoria para alojar los resultados de las operaciones aritméticas. Si se trabaja en aritmética flotante los tres octales menos significativos de AM se reservan para almacenar el exponente correspondiente. Para ejecutar cualquier operación aritmética se llevará primero un operando a A, y sobre este y el contenido de un L se aplicará la operación, cuyo resultado quedará almacenado en A, con la parte mas significativa en AM y la menos significativa en AL. Si se trabaja en aritmética flotante después de cada operación el resultado se normaliza y redondea en AM, quedando en AL un resto que eventualmente se podrá usar.
Para llevar un resultado a la memoria solo se puede transferir sobre un L la parte AM. Para poder almacenar la parte AL, se PRECISARÁ UN SHIFT PREVIO de AL a AM.
5.- LOS REGISTROS B.
Al describir las unidades de control y aritmética mencionamos a los registros Bi, pudiéndolos considerar como parte tanto de una como de otra, según la función que ejecute.-
− 5 −
Los registros Bi, son registros de 3 octales de longitud numerados de 1 a 7 (*). Estos registros también se llaman a veces, registros índice. En estos registros se pueden ejecutar dos tipos de operaciones :
i) aritméticas y lógicas con números cortos
ii) la operación llamada B-modificación
En las operaciones del primer tipo se utilizan los registros Bi para almacenar un operando (siempre numero de tres octales) sobre el contenido de dicho Bi y un H de la memoria operativa o semi-operativa se aplicarte a operación aritmética (+ , −) o lógica ( , , ≠) que se pretenda El resultado de esta operación queda sobre al mismo Bi, y posteriormente se puede trasladar a la memoria operativa (pero no a la semi-operativa) para su almacenamiento.- La operación de B-modificación consiste en sumar el contenido del registro Bi indicado por el dígito B, de la instrucción al contenido del registro d de la unidad de control antes de seleccionar el operando. De esta forma una instrucción con parte DO fija puede referirse : a diferentes operandos, si se modifica adecuadamente el contenido del registro Bi indicado por el dígito B, de dicha instrucción.-
No todas las instrucciones son B-modificables, ya que para algunas operaciones del primer tipo hemos de usar el digito B para indicar sobre que registro B en particular se opera (en este caso el digito B seria utilizado como una segunda dirección de operando). Sin embargo como también es de interés poder B-modificar las instrucciones aritméticas realizadas con números cortos, un grupo especial de instrucciones indicara en su PF que se trabaja sobre un B particular, el B7 : y así el digito B de estas instrucciones queda liberado y se puede usar para la B-modificación. Nótese que para este último grupo de funciones el B7 se puede auto-B-modificar.
6.- ENTRADA Y SALIDA
La entrada y salida se hace utilizando como soporte cinta de papel perforada de 5 canales y usando para codificar la información el código FERRANTI.
Tanto la entrada como la salida se hace utilizando el acumulador como registro intermedio.
La unidad de entrada es un lector fotoeléctrico Ferranti con una velocidad de 500 c/seg.
La unidad de salida es una perforadora electromecánica con velocidad de 33 c/seg.
La cinta de salida se interpreta fuera de línea mediante una teleimpresora Creed.
III. CODIGO DE INSTRUCCIONES (Ejemplos)
1.-Notación (XX)
(1) H = Registro corto
(2) M = Registro medio
(3) L = Registro largo
(4) P = Página
(*) El registro B0 es inexistente, pero se puede considerar como si existiera y siempre contuviese el número 000.-
(**) Las letras usadas de (1) a (6) pueden ir afectadas de un subíndice para individualizar la dirección del registro correspondiente.-
− 6 −
(5) S = Sector
(6) z = Zona
(7) A = Acumulador
(8) AM = Parte más significativa de A
(9) AL = Parte menos significativa de A
(10) Bi = Registro B
(11) C = Registro de la U. C.
(12) := = Colocar el contenido del registro o el resultado de la operación indicada en el miembro de la derecha, en el registro indicado en la izquierda.
(13) + = Suma
(14) − = Diferencia
(15) = Multiplicación
(16) = Cociente
(17) = Unión
(18) = Intersección
(19) ≠ = No equivalente
(20) n = Shift n lugares a la derecha
(21) n = Shift n lugares a la izquierda
(22) = Mayor o igual
(23) = = Igual
(24) n = Complemento de n
(25) Z1 = Registro de la U. C.
(26) Z2 = Registro de la U. C.
(27) T = Registro de la U. C.
2.- OPERACIONES CON NUMEROS CORTOS NO B-MODIFICABLES
31 Bi := Hj
63 Hj := Bi
15 Bi := Bi + Hj
11 Bi := Bi − Hj
01 Bi := DO
21 Bi := Bi + DO
25 Bi := Bi − DO
05 Bi := Bi ≠ DO
Ejemplos
1.-Dados los enteros m, n, p en los H 100, 101,102 poner : 2m + n − p en el H 103
311 100 B1 := m
151 100 B1 := 2m
151 101 B1 := 2m+n
111 102 B1 := 2m+n−p
631 103 H103 := 2m+n−p
2.- Poner 2m−1 en 777
311 100
151 100
251 001
631 777
3.-Cambiar el signo de 2m−l
311 777
111 777
111 777
631 777
oOo-------------
− 7 −
3.- OPERACIONES B-MODIFICABLES CON NUMEROS CORTOS
60 B7 := B7 + Hj
64 B7 := B7 − Hj
44 B7 := B7 Hj
40 B7 := B7 Hj
70 B7 := B7 ≠ Hj
Ejemplos :
4.-Poner en el H 777 la suma de los registros cuya dirección se encuentra almacenada en los H 100, 101, 102
i) 317 777
117 777 Poner a cero B7
311 100
312 101 Ubicar en B1, B2, B3 los
313 102 contenidos de H 100, 101, 102
601 000
602 000 Sumar los contenidos de los
603 000 registros indicados en H 100, 101, 102
637 777 El resultado se lleva a H 777.
ii) 317 777
117 777
311 100
601 000
311 101
601 000
311 102 Con esta variante aunque tiene el
601 000 mismo número de instrucciones uti-
637 777 liza únicamente el registro B1.
5.-Poner 000 en H 100 si el contenido de H 200 es par y 001 si es impar
017 001
400 200
637 100
6.- Dados a, b, c en H 100,101, l02 formar : a b c en 103.-
017 777
700 102
400 101
440 100
630 103
− 8 −
4 OPERCIONES CON NUMEROS LARGOS/ EN PUNTO FLOTANTE.
54 A := L
50 L := A
32 A := A + L
36 A := A − L
16 A := L − A
17 A := A.L
27 A := A /L
En las operaciones con punto flotante se considera la mantisa almacenada en los 9 octales más significativos y el exponente en los tres octales menos significativos del registro indicado por la D. O. Después la de cada operación aritmética normaliza la mantisa. (La operación 54 la normaliza.)
Ejemplos.
7.- Suponemos los números x, y, z respectivamente en los registros L100, L104, L110. Formar x2+ y2+ z2 , y almacenarlo en L114.
540 100
170 100 forma x2 en L100
500 100
540 104
170 104 forma y2 en L104
500 104
540 110
170 110 forma z2 en A
320 100
320 104
500 114 forma x2 + y2 + z2 en L114
8.- Formar (x − y) / z2 y almacenarlo en L114
540 110
170 110 forma z2 en L110
500 110
540 100 forma x − y en A
360 104
270 110
500 114 (x − y) / z2 en L114
Obsérvese que formando previamente el divisor ahorramos dos transferencias.
− 9 −
5 OPERCIONES ARITMETICAS CON NUMEROS LARGOS EN PUNTO FIJO. LA OPERCION DESPLAZAMIENTO
24 A := L
04 L := A
30 A := A+L
34 A := A−L
14 A := L−A
07 A := A•L
En estas operaciones se necesitará a veces ajustar la posición del punto para homogeneizar los resultados, para ello se precisa utilizar la operación desplazamiento. Esta operación se realiza mediante las funciones :
22 A := ADO
26 A := ADO
Ejemplos.
9 Dados en L100 y L104 dos números largos en punto fijo con cuatro cifras enteras el primero y seis el segundo, almacenar su suma en L110
240 100
260 002
300 104
040 110
10.-Dados en L100 y L104 dos números en punto fijo con cuatro enteros, hallar su producto, y almacenarlo también con cuatro enteros en L110,
240 100
070 104
6 OPERACIONES BIT A BIT.
A los 8 bits menos significativos de un corto Hi, podemos individualizarlos utilizando para ello el digito B. Así designaremos bij (*) al bit j-ésimo del Hi, siendo j el valor del digito B. La operación con mayor interés que puede ejecutarse sobre un único bit es la complementación, cosa que se hace mediante la función
47 bij := bij
Ejemplos.
11.-Si el corto almacenado en H100 es par, sustituirlo por el impar inmediatamente mayor y si es impar por el par inmediatamente menor.
470 100
(*) Mas propia pero mas larga seria la notación bDO,B
− 10 −
Obsérvese que en este caso el dígito B no indica registro B sino de cual bit particular de H100 se trata.
OPERACIONES DE RUPTURA DE SECUENCIA, SELECCION Y RETORNO En general, después de ejecutada una instrucción se pasa a decodificar y ejecutar la instrucción que esta almacenada en la memoria en el registro siguiente, es decir que el contenido del registro C de la unidad de control varia de unidad en unidad. Pero en particular, hay un grupo de instrucciones que llamaremos de ruptura de secuencia o de salto, en las que el contenido de C varía o puede variar de forma diferente. Estas instrucciones son las que permiten ejecutar las ramificaciones y los ciclos de los procesos de cálculo.
Salto incondicional :
37 C :=DO
03 C := −DO
Salto condicional :
13 si Bi 0 ;C :=DO, si no C :=C+1
23 si b0j 0 ;C :=DO, si no C :=C+1
33 si A 0 ;C :=DO, si no C :=C+1
Relacionadas con estas funciones de cambio de secuencia están las funciones de selección, mediante las que fijamos la zona de memoria rápida que opera o la pagina que interviene en una transferencia con el tambor ; y las de retorno mediante las que fijamos la dirección del registro M y la zona a donde tenemos que volver después de utilizar la memoria semi-operativa o fija.
Funciones de selección
74 T := DO
43 Z1 := DO
(*) Z2 Z2 := DO
Funciones de retorno
67 H1 := C H2 := Z
(*) A esta función no le está todavía asignado número de código pero lo indicaremos en los ejemplos por Z2
− 11 −
EJEMPLOS :
Hasta ahora, como todos los ejemplos desarrollados eran secuenciales, no tenía importancia considerar en qué registros M particulares estaban ubicadas las instrucciones que componían las pequeñas rutinas expuestas. En lo sucesivo al lado izquierdo de cada instrucción indicaremos la dirección del registro M, en que se encuentra almacenada, para que en los casos de ruptura de secuencia sepamos en que instrucción debemos continuar.
12.- Sumar todos los números cortos contenidos en la página 1, y el resultado ponerlo en H200. Escribir la rutina a partir del primer registro medio de la pagina 4.
400 017 000
402 011 701
404 601 177
406 131 414
410 211 001
412 370 404
414 630 200
13.- Sumar en punto flotante todos los números largos contenidos en la página 1, y el resultado ponerlo en L200. Escribir la rutina a partir del primer registro medio de la pagina 4 y compararlo con la del ejercicio 12.
400 260 030 A := 0
402 011 701
404 321 177
406 131 414
410 211 004
412 370 404
414 500 200
14.- Calcular el valor del polinomio a31x31 + a30x30 +. . . . . + a1 x + a0 , supuesto que los coeficientes ai (i = 0, 1, 2 . . . , 31) están almacenados como números largos en punto flotante en los 100 a 274 respectivamente, para el valor de x almacenado en el acumulador.
400 011 610
402 211 270
404 321 274
406 131 414
410 211 004
412 370 402
414
• • • • • •
15.- Supuestos almacenados dos vectores A y B de 16 componentes en las paginas 1 y 2 respectivamente, almacenar su suma en la pagina 3.
400 011 704
402 541 174
404 321 274
406 501 374
410 131 416
412 211 004
414 370 402
416
• • • • • •
− 12 −
16.- En las condiciones anteriores formar el producto AB y almacenarlo en L300.
400 260 030 A := 0
402 500 300
404 011 704
406 541 174
410 121 274
412 320 300
414 500 300
416 131 424
420 211 004
422 370 406
424
• • • • • •
17. Hallar el máximo de los enteros almacenados en la página l, y almacenarlo en 133 Rutina abierta
400 011 702
402. 313 100
404 641 177
406 133 416
410 013 000
412 601 177
414 370 422
416 013 000
420 601 176
422 131 430
424 211 001
426 370 404
430
• • • • • •
NOTA : Puede ser cómodo escribirlo, durante la elaboración de la siguiente manera :
011 702
313 100
641 177 (3
133 v1
013 000
601 177
370 v2
013 000 (1
601 176
131 v4
211 001 (2
370 v3
• • • • • • (4
pero al final habrá que fijar posiciones y rellenar direcciones. Los números (1 , (2 , etc., se llaman marcas y las señales v1, etc., direcciones flotantes.
18. Dadas las componentes los números complejos w1 (a1, b1), y w2 (a2, b2), en los largos L 100, 104, 110 y 114, formar w3 = w1 + w2 y poner sus componentes en L 120 y 124.
540 100
300 110
500 130
540 104
300 114
500 124
19. En las condiciones del ejemplo anterior formar w1.w2,
− 13 −
540 100
120 110
500 130 forma a1a2-b1b2
540 114
120 130
160 130
500 120
540 100
120 114
500 130 forma a1b2+a2b1
540 104
120 110
320 ¿¿¿
500 124
8. TRANSFERENCIA ENTRE MEMORIAS
La información almacenada en 1a memoria auxiliar o tambor, puede ser únicamente utilizada si se la envía para ello a la memoria operativa mediante la operación que llamaremos de transferencia entre memorias. La transferencia puede ser hecha en los dos sentidos (del tambor a la memoria operativa o viceversa) y en cada caso usaremos una de las funciones siguientes :
73 S_DO :=PT
77 PT :=S_DO
En ambos casos el números del estor que interviene en la transferencia está indicado en la parte DO, y la página está indicada en el registro especial T (úsase instrucciones de selección) y, como siempre corresponde a la zona indicada en Z2 (ya que indica donde hemos de fijar el operando, en este caso un sector)
Ejemplos :
20. Supuesto Z2=0 y P=0 transferir el contenida del sector 107 a la página 3 de la zona 0.
740 003
770 107
21. Supuesto Z2 = 0 y P = 0 transferir les sectores 100 a 110 a las páginas de 0 a 10 de la zona 3.
100 011 010
102 0 003
104 741 000
106 771 100
110 121 001
112 131 104
22. Supuesto Z2 = 0 y P = 0 transferir les sectores 100 a 177 a las páginas consecutiva de las zonas Z4 a Z13.
100 012 771
102 011 771
104 Z22 013
106 741 007
110 771 107
112 131 120
114 251 001
116 370 106
120 132 136
122 252 001
124 Z20 001
/ / / / / / / / /
− 14 −
126 313 111
130 213 007
132 633 111
134 370 102
136 . . . . . .
23 Transferir el contenido las paginas de la zona 0 a los sectores indicados en los 8 primeros registros de la página 1.
200 311 671
202 001 107
204 741 007
206 737 000
210 131 216
212 211 001
214 370 204
216
. . . . . .
− 15 −
9.- OPERACIONES DE ENTRADA Y SALIDA
Todas las funciones vistas hasta ahora operaban con información contenida en el interior de la computadora. La operaciones de entrada y salida consisten en pasar información contenida por un soporte externo (en nuestro caso cinta de papel) a algún registro interno de la computadora o viceversa.
Como los caracteres perforados sobre la cinta son de cinco bits (código FERRANTI) el ingreso de toda información se hará por medio de grupos de cinco bits. Como ninguno de los registros de la computadora tiene una capacidad que se a múltiplo de cinco, se tendrá que desperdiciar parte de los bits de un carácter. Esto justifica la forma de la instrucción de entrada y análogamente para la salida.
Las instrucciones son.
65 A := t DO
06 H := l (*)
45 t := DO
41 t := A DO
(*)En este caso el soporte seria las clavijas de consola,
24.- Imprimir la expresión, BAHIA BLANCA. 1-11-63.
100 033 002
102 001 010
104 011 001
110 033 002
112 014 001
114 016 003
116 001 034
120 000 001
122 031 001
124 001 031
126 006 003
130 034 000
132 011 750
134 001 154
136 457 000
140 131 146
142 211 001
144 370 134
146 . . . . . .
25.- Supuesto A = 0 y L100 = 0 leer nueve caracteres de cinta y almacenar en los H 200, 201, 202 los tres números cortos representados por ellos.
012 012 776
014 011 002
016 650 007
020 221 000
022 300 l00
024 040 100
026 220 775
030 251 001
032 131 016
034 317 103
036 202 2 ?2
040 132 046
042 212 001
044 370 014