UCLV 1 Mapas conceptuales para la enseñanza de Arquitectura de Computadoras REGISTROS VISIBLES AL USUARIO Se dice que un registro es visible al usuario para significar el hecho de que puede ser referenciado por medio del lenguaje máquina que ejecuta la CPU. Se pueden clasificar en las siguientes categorías: Uso general Datos Direcciones Códigos de condición Los registros de uso general pueden se asignados por el programador a diversas funciones. A veces, su uso dentro del repertorio de instrucciones es ortogonal a la operación. Es decir, cualquier registro de uso general puede contener el operando para cualquier código de operación. Esto proporciona una utilización de registros de auténtico uso general. Con frecuencia, sin embargo, existen restricciones, por ejemplo puede haber registros específicos para operaciones con coma flotante y operaciones de pila. En algunos casos, los registros de uso general pueden utilizarse para funciones de direccionamiento. En otros casos hay una separación parcial o total entre registros de datos y registros de direcciones, los primeros pueden usarse únicamente para contener datos, y no pueden emplearse en cálculo de una dirección de un operando. Los registros de dirección pueden ser de uso más o menos general, o pueden estar dedicados a un modo de direccionamiento particular. Se pueden citar los siguientes ejemplos: Punteros de segmento: En una máquina con direccionamiento segmentado un registro de segmento contiene la dirección de la base del segmento. Puede haber múltiples registros, por ejemplo uno para el SO y otro para el proceso actual. Registros índices: Se usan para el direccionamiento indexado, y pueden ser auto indexado. Puntero de pila: Si existe direccionamiento a pila visible al usuario, la pila está normalmente en memoria, y hay registro dedicado que apunta a la cabecera de esta. Esto permite el direccionamiento implícito, es decir, apilar, desapilar y otras instrucciones de la pila que no necesitan contener un operando explícito referente a ella. Aquí hay varias cuestiones de diseño a estudiar, una importante es si se usan registros de uso completamente general o si especificar su uso. Con el uso de registros especializados, generalmente puede quedar implícito en el código de la operación a qué tipo de registro se refiere un determinado campo de operando. El campo de operando solo debe identificar uno de entre un conjunto de registros especializados, en lugar de uno de entre todos los registros, lo cual ahorra bits. UCLV 2 Mapas conceptuales para la enseñanza de Arquitectura de Computadoras Por otra parte, esta especialización limita la flexibilidad del programador. No hay una óptima y definitiva solución a este problema de diseño. Otro problema de diseño es la cantidad de registros de uso general o de datos más direcciones que tienen que incluirse. Por último está la cuestión de la longitud de los registros, los registros que han de contener direcciones deben ser lo suficientemente grandes como para albergar la dirección más grande. Los registros de datos deben ser capaces de contener valores de la mayoría de los tipos de datos, algunas máquinas permiten que dos registros contiguos sean usados como uno solo para contener valores de doble longitud. Una última categoría de registros, que es al menos parcialmente visible al usuario, contiene códigos de condición, los códigos son bits fijados por el hardware de la CPU como resultado de alguna operación. Los bits de código de condición se reúnen en uno o más registros, normalmente forman parte de un registro de control. Por lo general las instrucciones de máquina permiten que estos bits sean leídos por referencia implícita, pero no pueden ser alterados por el programador. En algunas máquinas, una llamada a una subrutina dará lugar a la salvaguarda automática de todos los registros visibles por el usuario, que serán restablecidos en el retorno de la subrutina. La CPU lleva a cabo la salvaguarda y restablecimiento como parte de la ejecución de las instrucciones de llamada y retorno, respectivamente. Esto permite a cada subrutina usar independientemente los registros visibles por el usuario. En otras máquinas, es responsabilidad del programador guardar los contenidos de los registros visibles relevantes para él, antes de la llamada a la subrutina, teniendo que incluir, en el programa, instrucciones para este fin.