Arquitectura Del Computador
Arquitectura Del Computador
Arquitectura Del Computador
Registros de la CPU
Para poder hacer estas cosas, es obvio que la CPU necesita almacenar
algunos datos temporalmente. Debe recordar la posición de la última instrucción de
forma que sepa dónde ir a buscar la siguiente. Necesita almacenar instrucciones y datos
temporalmente mientras una instrucción está siendo ejecutada. En otras palabras, la
CPU necesita una pequeña memoria interna. En la estructura interna de la CPU se
indican los caminos de transferencia de datos y de control lógico, que incluyen un
elemento con el rótulo bus interno de la CPU. Este elemento es necesario para transferir
datos entre los diversos registros y la ALU, ya que ésta en realidad sólo opera con datos
de la memoria interna de la CPU. La figura muestra también los elementos básicos
típicos de la ALU.
En arquitectura de ordenadores, un registro es una memoria de alta velocidad y poca
capacidad, integrada en el microprocesador, que permite guardar transitoriamente y
acceder a valores muy usados, generalmente en operaciones matemáticas.
Dentro de la CPU hay una memoria interna compuesta por un conjunto de registros. Los
registros de la CPU son:
- Registros visibles al usuario: Permiten al programador de lenguaje de máquina o
ensamblador minimizar las referencias a memoria principal optimizando el uso de los
registros.
- Registros de control: Son utilizados por la unidad de control para controlar el
funcionamiento de la CPU y por programas privilegiados del sistema para controlar la
ejecución de programas.
- Registro de estado: Se utiliza para tomar decisiones en función de operaciones
realizadas.
- Registro puntero a pila.
Registros visibles al usuario
Un registro visible al usuario es aquél que puede ser referenciado por medio del
lenguaje máquina que ejecuta la CPU. Prácticamente todos los diseños contemporáneos
de CPUs están provistos de varios registros visibles al usuario, en oposición a disponer
de un único acumulador.
Podemos clasificarlos en:
- Uso General
- Datos
- Direcciones
- Códigos de Condición
Los registros de uso general pueden ser asignados por el programador a diversas
funciones. A veces, su uso dentro del repertorio de instrucciones es para 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 en coma flotante. En
algunos casos los registros de uso general pueden ser utilizados para funciones
de direccionamiento. En otros casos hay una separación clara o parcial entre registros de
datos y registros de direcciones.
Los registros de datos pueden ser usados únicamente para contener datos y no se pueden
emplear en el cálculo de una dirección de operando. Los registros de dirección pueden
ser en sí registros de uso más o menos general, o pueden estar dedicados a un modo de
direccionamiento particular. El caso más conocido es el puntero a pila. La cantidad de
registros generales o especializados es una cuestión de diseño. No hay solución óptima,
pero la tendencia parece ir hacia el uso de registros especializados. Otro problema de
diseño es el numero de registros, de uso general o de datos más direcciones, que tienen
que incluirse.
A mayor cantidad de registros se requieren mayor cantidad de bits en el campo de
operando. Parece óptimo entre 8 y 32 registros. Menos registros se traducen en más
referencias a memoria; más registros no reducen notablemente las referencias a
memoria. Por último, está la cuestión de la longitud de los registros. Los registros que
han de contener direcciones han de 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 tipos de datos. Algunas máquinas permiten que los registros contiguos sean
usados como uno para contener valores de doble longitud. Una categoría final de
registros, que es al menos parcialmente visible al usuario, contiene códigos de condición
(también llamados indicadores o flags).
Los códigos de condición son bits fijados por el hardware de la CPU como resultado de
alguna operación. Por ejemplo, una operación aritmética puede producir un resultado
positivo, negativo o nulo, o con desbordamiento. Además de almacenarse el propio
resultado en un registro o en la memoria, se obtiene también un código de condición. El
código puede ser examinado con posterioridad como parte de una condición
de bifurcación condicional. Los bits de códigos de condición se reúnen en uno o más
registros. Por lo general, forman parte de un registro de control. Comúnmente, 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 subrutina dará lugar a la salvaguarda automática de todos los registros visibles al
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 al usuario. En otras máquinas, es
responsabilidad del programador guardar los contenidos de los registros visibles al
programador relevantes antes de la llamada a subrutina, teniendo que incluir en el
programa instrucciones para este fin.
Registros de control
Hay diversos registros de la CPU que se pueden emplear para controlar su
funcionamiento. La mayoría de éstos, en la mayor parte de las máquinas, no son visibles
al usuario. Algunos de ellos pueden ser visibles a instrucciones de máquina ejecutadas
en un modo de control o de sistema operativo. Naturalmente, máquinas diferentes
tendrán diferentes organizaciones de registros y usará distinta terminología. Se enumera
aquí una lista razonablemente completa de tipos de registros, con una breve descripción.
Son esenciales cuatro registros para la ejecución de una instrucción: el contador de
programa , el registro de dirección, el registro de instrucción y el registro de datos. El
contador de programa contiene una dirección de instrucción. Típicamente, la CPU
actualiza el PC después de cada captación de instrucción de manera que siempre apunta
a la siguiente instrucción a ejecutar. Una instrucción de bifurcación o salto también
modificará el contenido de PC. La instrucción captada se carga en el registro de
instrucción, donde son analizados el código de operación y los campos de operando. Se
intercambian datos con la memoria por medio de registro de direcciones y el de datos.
En un sistema con organización de bus, el de direcciones se conecta directamente al bus
de direcciones, y el de datos directamente al bus de datos. Los registros visibles al
usuario, sucesivamente, intercambian datos con el de datos. Los cuatro registros que
acaban de mencionar se usan para la transferencia de datos entre la CPU y la memoria.
Dentro de la CPU, los datos tienen que ofrecerse a la ALU para su procesamiento. La
ALU puede tener acceso directo al de datos y a los registros visibles al usuario. Como
alternativa, puede haber registros intermedios adicionales en el límite de la ALU; estos
registros sirven como registros de entrada y salida de la ALU e intercambian datos con
el de datos y los registros visibles al usuario.
Registro de estado
Todos los diseños de CPUs incluyen un registro o un conjunto de registros, conocidos a
menudo como palabra de estado de programa "programa status word", PSW), que
contiene información de estado. La PSW contiene típicamente códigos de condición
además de otra información de estado. Entre los campos comunes o indicadores se
incluyen los expresados en la tabla.
Bit de
Nombre Descripción
estado
Puesto a uno si una operación da lugar a un
C Acarreo acarreo (suma) o adeudo (resta) de un bit de
orden superior.
Paridad del resultado de una operación
P Paridad aritmética o lógica. Un 1 indica paridad par y
el 0 paridad impar.
Puesto a uno cuando el resultado de una
Z Cero
operación aritmética o lógica es cero.
Contiene el bit de signo del resultado de la
S Signo
última operación aritmética.
Usado para indicar un desbordamiento
O Desbordamiento
aritmético.
Usado para habilitar o inhabilitar
I Interrupción
interrupciones
GPU CHINA
SABER ENCENDIDOS PC1 • 17:00
¿Alguna vez te has preguntado cuál es el motivo que lleva a que un programa
compilado para funcionar en las CPU x86 para PC, no funcione en una CPU ARM por
ejemplo? ¿Qué es lo que hace que un programa sea compatible con una familia de
procesadores concreta y con otras no? ¿Qué son los registros y cual es su función? En
este artículo os explicamos lo que son los registros y las instrucciones de una CPU para
que podáis comprenderlo.
Muchas veces hemos hablado de que los procesadores cuentan con un conjunto de
instrucciones concreto, o de que en una nueva CPU se han añadido nuevos registros e
instrucciones. Vamos a ver qué es lo que esto quiere decir.
¿Qué es una instrucción?
Una instrucción no es más que una acción que mandamos a hacer en un procesador. Las
instrucciones pueden ser operaciones aritméticas con diferentes tipos de datos como
coma flotante, enteros, vectorial, escalar, operaciones lógicas, operaciones de
movimientos de datos, operaciones de movimiento de bits (donde un bit es cambiado de
posición), operaciones de salto, etc.
Esas mismas instrucciones se dividen en otros sub-tipos según donde se encuentren los
datos. Por ejemplo, algunas instrucciones permiten operar con los datos que se
encuentran en los registros en ese momento, mientras que en otros casos hemos de
marcar la dirección de memoria en la que se encuentra el dato (modo directo) o la
dirección de la dirección de memoria (modo indirecto).
A los conjuntos de registros e instrucciones de las CPU se les llama ISA (Instruction Set
Architecture) y todos bajo la misma ISA utilizan la misma codificación de las
instrucciones y por tanto el mismo código binario para ellas.
Independientemente de cuál sea la CPU que esté utilizando nuestro sistema, todas ellas
leen el código binario de una manera particular correspondiente a su familia. Lo que
hacen es tomar una cantidad de determinada de bits del código binario que están
ejecutando e interpretan su significado según la disposición de éste. Toda instrucción
está codificada de la siguiente manera: los primeros dígitos corresponden al código de la
instrucción y cómo se ha de ejecutar ésta, y los últimos bits son el dato mismo o dónde
se encuentra el dato sobre el que queremos realizar la instrucción.
El ISA (Instruction Set Architecture) es la parte del procesador que es visible al
programador o al escritor del compilador. El ISA sirve como el limite entre el software
y el hardware. Consiste en modos de direccionamiento, instrucciones, tipos de datos
nativos,arquitectura de memoria, registros, y gestión de excepciones.
Los tres tipos de ISAs mas comunes son:
(Stack) Pila: Los operandos estan implícitamente encima de la pila.
(Accumulator) Acumulador: Un operando es implícitamente el acumulador.
(GPR) Registro de propósito general: Todos los operandos están explicitamente
mencionados y son registros o ubicaciones de memoria.
Ejemplo de los tipos de ISA en las tres arquitecturas:
A = B + C;
No todos los procesadores pueden ser clasificados en estas categorias. El intel 8086
tiene muchas
instrucciones que usan operadores implícitos aunque tiene un set de registro general.
Los tipos de lenguaje que existen.
El lenguaje de una computadora es una sintáxis codificada usada por los programadores
para comunicarse con ella. Es el único lenguaje que entienden las computadoras, los
programas de software y el hardware. Establece un flujo de comunicación entre los
programas de software. El lenguaje le permite al usuario dictar los comandos que la
computadora debe entender para procesar los datos. El lenguaje viene en varios tipos
que emplean conjuntos de sintáxis diferente.
Lenguaje de máquina
El lenguaje de máquina, o el código de máquina, es el lenguaje nativo directamente
entendido por la unidad central del procesador de la computadora o CPU. Este tipo de
lenguaje no es fácil de entender, porque usa solamente un sistema binario, un elemento
de notas que contiene una serie de números que consisten de 1 y 0, para producir
comandos. El procesador de la computadora necesita convertir los lenguajes de alto
nivel en este lenguaje antes de que pueda correr el programa o ejecutar un comando
definido. Para convertir un lenguaje al código de máquina, el procesador de la
computadora necesita un recopilador, un programa que convierte una fuente de código
escrita en un lenguaje en una sintáxis de lenguaje diferente. El recopilador genera un
archivo binario, o un archivo ejecutable, que el CPU puede ejecutar. El procesador de
toda computadora tiene su propio conjunto de códigos de máquina. Este código
determina lo que el procesador puede hacer y cómo.
Lenguaje a nivel ensamblador
Un estudio de los ´50 llevó al desarrollo de lenguajes de bajo nivel o lenguaje de nivel
ensamblador. También considerado como un lenguaje de segunda generación, este
lenguaje es un conjunto de códigos que pueden correr directamente en el procesador de
la computadora. Es el lenguaje más apropiado en la escritura de los sistemas operativos
y para mantener las aplicaciones del escritorio. Le permite al programador hacer varias
tareas en el registro, el gerenciador de la memoria y el ciclo del reloj de la
correspondencia. Con este lenguaje es fácil para el programador definir los comandos
porque tiene la prerrogativa cuando se trata de nombrar las variables. Sin embargo, este
lenguaje no es flexible porque el usuario no puede re-usar los conjuntos de códigos
escritos. No es tan explicativo comparado con sus contrapartes. El usuario no tiene un
lenguaje encriptado en el lenguaje de la máquina para que procese los comandos que
escribió el programador.
Lenguaje de alto nivel
El desarrollo de lenguajes de alto nivel llegó cuando los programadores comenzaron a
tener problemas con la cada vez más difícil falta de portabilidad de las computadoras.
Los lenguajes de alto nivel ignoran los detalles poco importantes encontrados en los de
bajo nivel. Muchos programadores consideran que los lenguajes de alto nivel son la
solución a los problemas que traen los otros lenguajes porque es fácil de usar y tiene una
baja tendencia a producir errores. Los programadores se refieren a este lenguaje como
los lenguajes medios que sólo usan los conceptos de abstracción y construcción de los
extremos.
Lenguaje ensamblador.
¿Qué es?