====== Examen Final - 75.03. Organización del Computador ======
**Cátedra:** Saubidet\\
**Fecha:** Segunda Oportunidad - Segundo Cuatrimestre 2005\\
**Día:** 29/12/2005
Esta página está incompleta; podés ayudar completando el material.
===== Enunciado =====
==== Teórica ====
- Haga un diagrama de las computadoras tipo Ábacus y Super Ábacus. Describa las diferencias entre ambas.
- ¿Qué es el ensamblador? ¿Qué ventajas tiene este lenguaje sobre el de máquina? ¿Qué hacen los ensambladores de dos pasadas?
- ¿Puede interrumpirse la CPU cuando se encuentra en estado supervisor?
- Describa los pasos que se realizan cuando se requiere leer un archivo de un disco sectorizado bajo DOS.
Estas preguntas fueron elaboradas en base a las respuestas (no tengo el enunciado, sólo la resolución. Puede ser que alguna no concuerde exactamente con el enunciado dado.
==== Práctica ====
Codificar una rutina en Assembler para IBM 370 que realice lo siguiente:
* Dado un Byte (parámetro de entrada para la rutina), considerar los últimos siete bits del mismo y, mediante códigos de Hamming, determinar si la información ha sufrido alguna alteración. De ser así, debe corregirse el error, antes de retornar.
===== Resolución =====
==== Teórica ====
- Entre las diferencias que hay entre las máquinas Ábacus y Super Ábacus pueden nombrarse:
* La máquina Ábacus cuenta con un solo registro utilizable, al que se denomina "acumulador", y las operaciones que se pueden llevar a cabo actúan sobre él (o toman los datos desde el mismo). En cambio, la máquina Super Ábacus cuenta con una cantidad variable de registros sobre los cuales efectuar operaciones.
* El direccionamiento en Ábacus puede ser inmediata (para instrucciones del tipo "carga inmediata") o Directo y Absoluto (donde el operando es la dirección del dato). En Super Ábacus se pueden utilizar dos operandos, ya que su Registro de Instrucción es mayor. Esto permite agregar el tipo de direccionamiento por Base y Desplazamiento (donde se usa un operando para indicar el registro base y el otro para definir el offset).
* La máquina Super Ábacus no cuenta con RPI. Su papel lo desempeña, en general, el registro 0.
- El ensamblador es un programa que recibe el código fuente de un programa y lo traduce a un lenguaje que el computador pueda entender (binario), quitándole los comentarios que pudo haber hecho el programador y todas aquellas pseudo instrucciones que se hayan introducido para comandar al propio ensamblador (por ejemplo START, END, etc.). Además, se encarga de reemplazar las Macros utilizadas por sus instrucciones correspondientes.\\ La ventaja del lenguaje ensamblador sobre el de "máquina" es, principalmente, que permite renombrar las instrucciones de manera mnemotécnica, facilitando así la escritura y posterior lectura de códigos fuente. Además, permite la utilización de macros, lo que ahora al programador reescribir partes del código. Por otro lado, gracias al ensamblador se pueden utilizar rótulos para definir áreas en memoria, o marcar instrucciones (en lugar de tener que escribir la dirección del dato o instrucción a la que se quiere saltar).\\ Los ensambladores de dos pasadas utilizan una de ellas para resolver las direcciones de los rótulos. Además, son capaces de determinar los símbolos externos que son direcciones que no se refieren a una parte del código a ensamblar, sino de otro que luego se le unirá (mediante la linkedición).
- La CPU puede ser interrumpida encontrándose tanto en estado supervisor como en estado "problema". El impedimento de que la CPU sea interrumpida depende no del estado en que se encuentre (supervisor-problema) sino del enmascaramiento de interrupciones o la inhibición de las mismas por prioridades. Debido a que no todas las interrupciones son enmascarables (pueden ser enmascaradas, por ejemplo, algunas de las interrupciones del programa, pero no todas), y a que las interrupciones por error de Máquina son prioritarias (esto significa que ninguna otra puede inhibirla), es posible que, por ejemplo, mientras la CPU esté procesando una interrupción de E/S (o ejecutando cualquier programa, utilizo este ejemplo ya que de esa forma se encuentra en estado supervisor), puede ser interrumpida por un error de Máquina.
- **COMPLETAR**. Si alguien tiene la pregunta correcta sería mejor, ya que yo tenía la respuesta incompleta y no sé bien que poner
==== Práctica ====
HAMMING PPIO 3
L 7,0(1) //R7 = Dir(Byte)
ICM 5,8,0(7) //R5 = Byte
SLL 5,1 //Pierdo el 0 extra
LA 6,1
LA 8,BITS
LA 9,7 //Cantidad de bits a analizar
COMPARA C 5,=F'0'
BL UNO
B PROX
UNO ST 6,0(8) //Proxima palabra
SLL 5,1
PROX BCT 9,COMPARA
LA 11,0 //Sumatoria de bits de paridad erronea
BIT1 LA 8,0 //Sumatoria de bits para c/ bit de paridad
LA 6,BITS
A 8,0(6) //Bits analizados por bit de paridad 1
A 8,8(6)
A 8,16(6)
A 8,24(6)
SRDL 8,1 //El último bit determina par/impar
C 9,=F’0’
BNL BIT2
A 11,=F’1’
BIT2 LA 8,0
A 8,4(6) //Bits analizados por bit de paridad 2
A 8,8(6)
A 8,20(6)
A 8,24(6)
SRDL 8,1
C 9,=F’0’
BNL BIT4
A 11,=F’2’
BIT4 LA 8,0
A 8,12(6) //Bits analizados por bit de paridad 4
A 8,16(6)
A 8,20(6)
A 8,24(6)
SRDL 8,1
C 9,=F’0’
BNL FINCOMP
A 11,=F’4’
FINCOMP C 11,=F’0’ //R11 = Posición bit erroneo
BE FIN
L 7,0(1)
ICM 5,8,0(7)
SLDL 4,0(11) //Dejo el bit erroneo al comienzo de R5
SLL 4,1 //Hago espacio para el bit a corregir
C 5,=F’0’
BL ESCERO //El bit era 1 y pasa a 0
A 4,=F’1’ //El bit era 0 y pasa a 1
ESCERO SLL 5,1 //Pierdo el bit erroneo, y lleno con 0
LA 8,7 //¿Cuántos bits faltan desplazar?
SR 8,11
SLDL 4,0(8)
STCM 4,1,0(7) //Devuelvo el byte corregido
FIN CHAU
BITS DC 7F’0’
END
**Notas**
* Para resolver este ejercicio debe recordarse que la sumatoria de los números de bit de comprobación erroneos, es igual a la posición del bit erroneo.
* En este caso, decidí definir una palabra para cada uno de los bits, y así sumar su contenido tantas veces como sea necesario, sin necesidad de usar Shifts. Si bien es mucho más rápido el sistema de Shifts de registros a la hora de ejecutarse, para escribir en un exámen es más simple esta soluión.
===== Discusión =====
Si ves algo que te parece incorrecto en la resolución y no te animás a cambiarlo, dejá tu comentario acá.