Bitácora-C1-24/04/2015 (Pila y Q3)

Comenzamos la clase con consultas de la practica anterior, y luego se les pidió a los alumnos que en un «post-it» escribieran como creían que funcionaba el CALL y el RET.

Luego se pasó a explicar los siguientes temas:
  • Q3
  • Nueva estructura de datos: Pila
    • La pila esta guardada en una parte especial de la memoria.
    • Nos sirve para apilar y desapilar cosas
    • La operación PUSH nos permite apilar, es decir, agregar un elemento a la pila
    • La operación POP nos permite desapilar, es decir, sacar el ultimo elemento agregado a la pila.
    • El Stack Pointer (SP) nos «dice» cual es el tope de la pila.
  • Implementación del CALL y el RET: El CALL y el RET funcionan utilizando la Pila para guardar la dirección del PC, o bien, para darle una dirección guardada al PC, por lo tanto, en su implementación se usan las operaciones que permiten manejar la Pila
    • El CALL utiliza la operación PUSH, escribiendo un valor en la Pila
    • El RET utiliza la operación POP, leyendo el ultimo valor de la Pila
Para resolver los ejercicios en los que se tiene que realizar un cuadro que muestra como varía el PC, el SP, y la Pila, les recomendamos utilizar la siguiente notación:

Nótese que el PC puede tener dos estados diferentes, uno después de la búsqueda de instrucción y uno después de la ejecución de la instrucción, pero el SP y la Pila no, solo van a cambiar cuando se ejecute la instrucción y solo si la instrucción modifica la Pila, es decir, si la instrucción es CALL o RET.

Este es un ejemplo del cuadro utilizando la notación mencionada anteriormente: main empieza en 1000, rut1 en A0A0, el PC inicial es 1000, la Pila esta vacía.

rut1 : MOV R3, R2
       RET
main: CALL rut1

Para la próxima clase:

¿La arquitectura Q3 permite representar/operar con números negativos?
Si tu respuesta es Si: hacer un programa que inicialice R0 con el valor -1
Si tu respuesta es No: Proponer un mecanismo para extender Q3 y poder hacerlo