Articulo de referencia

Contador de programa

Panel frontal de un ordenador IBM 701, lanzado en 1952. Las luces centrales muestran el contenido de los distintos registros. El contador de instrucciones se encuentra en la par...

Panel frontal de un ordenador IBM 701, lanzado en 1952. Las luces centrales muestran el contenido de los distintos registros. El contador de instrucciones se encuentra en la parte inferior izquierda.

Un contador de programa (PC) [ 1 ] es un registro que almacena dónde se está ejecutando un programa informático por parte de un procesador . [ 2 ] También se le suele llamar puntero de instrucción (IP) en los microprocesadores Intel x86 e Itanium , y a veces se le denomina registro de dirección de instrucción (IAR), [ 3 ] [ 1 ] contador de instrucción , [ 4 ] o simplemente parte del secuenciador de instrucciones. [ 5 ]

Por lo general, un PC almacena la dirección de memoria de una instrucción . Además, suele incrementarse después de obtener una instrucción y, por lo tanto, apunta a la siguiente instrucción que se ejecutará. [ 6 ] Para un procesador que incrementa antes de la obtención, el PC apunta a la instrucción que se está ejecutando. En algunos procesadores, el PC apunta a cierta distancia más allá de la instrucción actual. Por ejemplo, en el ARM7 , el valor del PC visible para el programador refleja la preobtención de la instrucción y se lee como la dirección de la instrucción actual más 8 en el estado ARM, o más 4 en el estado Thumb. [ 7 ] Para los procesadores modernos, la ubicación de la ejecución en el programa se complica por el paralelismo a nivel de instrucción y la ejecución fuera de orden .

Por defecto, un procesador obtiene las instrucciones de la memoria de forma secuencial , pero una instrucción de transferencia de control cambia la secuencia escribiendo un valor en el contador de programa (PC). Una bifurcación permite obtener la siguiente instrucción de otra parte de la memoria. Una llamada a función no solo bifurca, sino que también guarda el valor del PC. Un retorno restaura el valor del PC para reanudar la ejecución con la instrucción que sigue a la llamada, mediante una bifurcación al valor guardado. Una transferencia condicionada a que se cumpla alguna condición permite que el ordenador siga una secuencia diferente bajo distintas condiciones.

Implementación de hardware

En una unidad central de procesamiento (CPU) simple, el PC es un contador digital (que es el origen del término "contador de programa") que puede ser uno de varios registros de hardware . El ciclo de instrucción [ 8 ] comienza con una búsqueda , en la que la CPU coloca el valor del PC en el bus de direcciones para enviarlo a la memoria. La memoria responde enviando el contenido de esa ubicación de memoria en el bus de datos . (Este es el modelo de computadora de programa almacenado , en el que un único espacio de memoria contiene tanto instrucciones ejecutables como datos ordinarios. [ 9 ] ) Después de la búsqueda, la CPU procede a la ejecución , tomando alguna acción basada en el contenido de la memoria que obtuvo. En algún punto de este ciclo, el PC se modificará de manera que la siguiente instrucción ejecutada sea diferente (normalmente, se incrementa de manera que la siguiente instrucción sea la que comienza en la dirección de memoria inmediatamente posterior a la última ubicación de memoria de la instrucción actual).

Al igual que otros registros del procesador, el PC puede ser un banco de biestables binarios, cada uno de los cuales representa un bit del valor del PC. [ 10 ] El número de bits (el ancho del PC) está relacionado con la arquitectura del procesador. Por ejemplo, una CPU de “32 bits” puede usar 32 bits para poder direccionar 2 32 unidades de memoria. En algunos procesadores, el ancho del contador de programa depende de la memoria direccionable; por ejemplo, algunos microcontroladores AVR tienen un PC que se reinicia después de 12 bits. [ 11 ]

Si el PC es un contador binario, puede incrementarse cuando se aplica un pulso a su entrada COUNT UP, o la CPU puede calcular algún otro valor y cargarlo en el PC mediante un pulso a su entrada LOAD. [ 12 ]

Para identificar la instrucción actual, el contador de programa (PC) puede combinarse con otros registros que identifican un segmento o página . Este enfoque permite un PC con menos bits, ya que se asume que la mayoría de las unidades de memoria de interés se encuentran dentro de la proximidad actual.

Consecuencias en la arquitectura de máquinas

El uso de un PC que normalmente incrementa supone que lo que hace un ordenador es ejecutar una secuencia de instrucciones generalmente lineal. Dicho PC es fundamental para la arquitectura de von Neumann . Por lo tanto, los programadores escriben un flujo de control secuencial incluso para algoritmos que no tienen por qué ser secuenciales. El consiguiente “ cuello de botella de von Neumann ” llevó a la investigación en computación paralela , [ 13 ] incluyendo modelos no von Neumann o de flujo de datos que no utilizaban un PC; por ejemplo, en lugar de especificar pasos secuenciales, el programador de alto nivel podría especificar la función deseada y el programador de bajo nivel podría especificarla utilizando lógica combinatoria .

Esta investigación también condujo a formas de hacer que las CPU convencionales basadas en PC funcionen más rápido, incluyendo:

  • La segmentación (pipelining ) es un proceso en el que diferentes componentes de hardware de la CPU ejecutan simultáneamente distintas fases de múltiples instrucciones.
  • La arquitectura de palabra de instrucción muy larga (VLIW, por sus siglas en inglés), donde una sola instrucción puede lograr múltiples efectos.
  • Técnicas para predecir la ejecución fuera de orden y preparar las instrucciones subsiguientes para su ejecución fuera de la secuencia regular.

Consecuencias en la programación de alto nivel

Los lenguajes de programación modernos de alto nivel siguen el modelo de ejecución secuencial y, de hecho, una forma común de identificar errores de programación es mediante la "ejecución de procedimientos", en la que el programador señala con el dedo el punto de ejecución, como lo haría un PC. El lenguaje de alto nivel es esencialmente el lenguaje máquina de una máquina virtual, [ 14 ] demasiado complejo para ser construido como hardware, sino que se emula o interpreta mediante software.

Sin embargo, los nuevos modelos de programación trascienden la programación de ejecución secuencial:

  • Al escribir un programa multihilo , el programador puede escribir cada hilo como una secuencia de instrucciones sin especificar la temporización de ninguna instrucción en relación con las instrucciones de otros hilos.
  • En la programación orientada a eventos , el programador puede escribir secuencias de instrucciones para responder a eventos sin especificar una secuencia general para el programa.
  • En la programación de flujo de datos , el programador puede escribir cada sección de una canalización de computación sin especificar la temporización en relación con otras secciones.

Véase también

Referencias

  1. 1 2 Hayes, John P. (1978). Arquitectura y organización de computadoras . McGraw-Hill. pág.  245. ISBN 0-07-027363-4.
  2. Bates, Martin (2011). "Funcionamiento de microcontroladores". Microcontroladores PIC . Elsevier. págs. 27–44 . doi : 10.1016/b978-0-08-096911-4.10002-3 . ISBN  978-0-08-096911-4El contador de programa (PC) es un registro que lleva el control de la secuencia del programa, almacenando la dirección de la instrucción que se está ejecutando. Se carga automáticamente a cero cuando se enciende o se reinicia el chip. A medida que se ejecuta cada instrucción, el PC se incrementa (en uno) para indicar la siguiente instrucción.
  3. Mead, Carver ; Conway, Lynn (1980). Introducción a los sistemas VLSI . Reading, EE. UU.: Addison-Wesley . ISBN 0-201-04358-0.
  4. Principios de funcionamiento, tipo 701 y equipo asociado (PDF) . IBM . 1953.
  5. Harry Katzan (1971), Computer Organization and the System/370 , Van Nostrand Reinhold Company , Nueva York, EE. UU., LCCCN 72-153191
  6. Silberschatz, Abraham ; Gagne, Greg; Galvin, Peter B. (abril de 2018). Conceptos de sistemas operativos . Estados Unidos: Wiley . págs. 27, G-29. ISBN  978-1-119-32091-3.
  7. "Manual de referencia ARM7TDMI (Rev3)" . ARM Limited . 2001. Consultado el 5 de enero de 2026 .
  8. John L. Hennessy y David A. Patterson (1990), Arquitectura de computadoras: un enfoque cuantitativo , Morgan Kaufmann Publishers , Palo Alto, EE. UU., ISBN 1-55860-069-8
  9. B. Randall (1982), Los orígenes de las computadoras digitales , Springer-Verlag , Berlín, D
  10. C. Gordon Bell y Allen Newell (1971), Estructuras informáticas: lecturas y ejemplos , McGraw-Hill Book Company , Nueva York, EE. UU.
  11. Arnold, Alfred (2020) [1996, 1989]. "E. Símbolos predefinidos" . Macro Assembler AS – Manual del usuario . V1.42. Traducido por Arnold, Alfred; Hilse, Stefan; Kanthak, Stephan; Sellke, Oliver; De Tomasi, Vittorio. p. Tabla E.3: Símbolos predefinidos – Parte 3. Archivado del original el 28-02-2020 . Recuperado el 28-02-2020 . 3.2.12. WRAPMODE […] AS asumirá que el contador de programa del procesador no tiene la longitud completa de 16 bits dada por la arquitectura, sino una longitud que es exactamente suficiente para direccionar la ROM interna. Por ejemplo, en el caso del AT90S8515 , esto significa 12 bits, correspondientes a 4 Kwords u 8 Kbytes. Esta suposición permite bifurcaciones relativas desde el inicio hasta el final de la ROM y viceversa, lo que resultaría en un error de bifurcación al usar aritmética estricta. Aquí, funcionan porque los bits de acarreo resultantes del cálculo de la dirección de destino se descartan. […] En el caso del AT90S8515 mencionado anteriormente, esta opción es incluso necesaria porque es la única manera de realizar un salto directo a través de todo el espacio de direcciones […] 
  12. Walker, BS (1967). Introducción a la ingeniería informática . Londres, Reino Unido: University of London Press . ISBN 0-340-06831-0.
  13. FB Chambers, DA Duce y GP Jones (1984), Computación distribuida , Academic Press , Orlando, EE. UU., ISBN 0-12-167350-2
  14. Douglas Hofstadter (1980), Gödel, Escher, Bach: una eterna trenza dorada , Penguin Books , Harmondsworth, Reino Unido, ISBN 0-14-005579-7