Clase Número 2 - Registros
(Se recomienda encarecidamente haber leído con anterioridad las otras clases Número 0 y Número 1 )
¡Seguimos añadiendo conceptos y conocimiento necesario!
Como todos sabrán, (o no) quien se encarga de procesar cada línea de código ASM, es el procesador. Éste se encarga de mover información y/o datos de un lado a otro. Lo hace a través de sus Registros.
Registros:
Son memorias de alta velocidad y poca capacidad. Se usan para almacenar punteros y datos, ya sea para hacer operaciones aritméticas o lógicas.
En el procesador de la GBA, contamos con 16 registros de 32 Bytes cada uno (Hasta 0xFFFFFFFF).
Si bien en GBATEK nos hablan de varias cosas sobre ellos, destacaré las más importantes (y que usaremos)(excepto casos muy especial). Para refererime a un registro usar una R mayúscula seguida de su número (Los registros van de 0 a 15 y algunos de ellos tienen nombres especiales).
(Nosotros usaremos el Procesador siempre en Thumb Mode)
Uso general:
Se dice que un registro es de uso general cuando no es más rápido que otro en nada, no tiene un uso específico designado. (Como podría ser uno dedicado a sumar o restar, por decir un ejemplo burdo).
En otras palabras, todos los registros "de uso general" son iguales entre sí.
- Registros bajos (Lo-Registers):
Son los comprendidos entre el R0 y el R7, todas las instrucciones (Que veremos más adelante) pueden acceder a ellos y modificarlos a antojo del programador. Son de uso general
- Registros altos (Hi-Registers):
Son los comprendidos entre R8 y R12, a los que solo algunas instrucciones pueden acceder. Aún así se puede decir que también son de uso general.
Stack Pointer: (R13)
Registro 13 o SP: es el conocido como Stack Pointer, es un registro especial, ya que es el "Puntero del Stack" o "Puntero de la Pila"
¿DE UNA PILA? Si, una "pila de punteros", es decir un puntero apilado uno sobre el otro.
Ilustremos, primero, qué es una "Pila" (Elemento muy usado en programación, (antiguamente) y que se desarrolla en carreras afines)
Pila:
Una pila es una cantidad de elementos puestos unos sobre otros, es una estructura de datos.
Podemos considerar a una pila vacía así:
Parece una estantería donde luego apilaremos Libros. La estantería sería nuestra memoria y los libros nuestros punteros.
Ésta estructura tiene una forma muy peculiar de tratamiento de informacion, lo que la hace especial, y se conoce como: LIFO
Last
In
First
Out
Es decir, "El último en entrar, es el primero en salir".
Una vez más, ilustremos:
Supongamos que queremos hacer una pila de libros de distintos colores, meteremos primero el libro de color amarillo.
Como nuestra pila está vacía, irá al fondo de la misma:
Ahora bien, si agregamos otro elemento a la pila, digamos un libro Azul, éste tambien irá por encima de todo:
Ahora, como son elementos apilados, no podemos sacar el de más abajo sin antes extraer el de arriba. Es decir, para sacar el amarillo, antes debemos sacar el Azul:
Bueno, en términos generales y simples así funciona una Pila (Stack).
Nuestro Stack Pointer (SP) nos marcará donde está el punto más alto de la pila que usaremos para guardar distintos valores de nuestros registros hablaremos de ésto mejor más adelante, cuando empecemos con las instrucciones.
Les recomiendo que si no han entendido como funciona una pila, vuelvan a leerlo o pregunten en un comentario es muy importante que lo entiendan.
Link Register:(LR) (R14)
Registro 14 o "Registro de Enlace" (Lo llamaremos LR): Aunque su nombre puede que les indique de que vá, no es tan obvio y se merece una explicación que yo no voy a dar éste registro almacena la dirección de regreso de un "Branch with Link" o "Salto con enlace", es decir, al saltar de líneas éste registro guarda la dirección siguiente al BL para luego poder hacer un regreso. (O lo que es lo mismo, guarda el valor del R15 - PC, que ahora veremos)
Luego de definir el R15 veréis un ejemplo de ésto combinado con el R15 para que os quede bien definidos ambos.
Luego de definir el R15 veréis un ejemplo de ésto combinado con el R15 para que os quede bien definidos ambos.
Program Counter: (PC) (R15)
Registro 15 o "Contador de Programa": Éste registro lo que hace es almacenar la dirección de la próxima rutina (Es decir, lugar actual + 2 )
Ejemplo del LR y PC combinados:
La instrucción en ejecución será la que esté marcada con Verde
Acá viene lo interesante:
Al pasar de la instrucción 102 a la 104 pasa ésto:
Bueno, éstos son todos los registros de la CPU. Si me olvido de algo sobre ellos lo pondré por aquí y a los que hallan comentado les avisaré por perfil
La próxima clase será de Instrucciones Básicas y esenciales, el uso del Stack (que no volveré a explicar, que ya estoy harto de que mi profesor me pida que lo haga xD ) y algún que otro detalle. Dejad sus comentarios y apreciaciones. Si hay algo que no entiendan ¡Pregunten! Quizá su duda sea la de alguien más también y entre todos iremos mejor :awesome:
------
Referencia a Clases anteriores:
Clase 0 - Comprendiendo lo muy muy básico
Clase 1 - Comprendiendo lo Básico
Clase 2 - Registros, conociendo al procesador.
Clase Número 3: Instrucciones Básicas
Última edición: