Contador de programa

Ajustar Compartir Imprimir Citar
Registro de procesadores que indica dónde está un ordenador en su secuencia de programa
Panel frontal de un ordenador IBM 701 introducido en 1952. Luces en el centro muestran el contenido de varios registros. El instrucción está en la izquierda inferior.

El contador de programa (PC), comúnmente llamado puntero de instrucciones (IP) en Intel x86 y Los microprocesadores Itanium, a veces denominados registro de direcciones de instrucciones (IAR), contador de instrucciones, o simplemente parte del secuenciador de instrucciones, son un procesador registro que indica dónde se encuentra una computadora en su secuencia de programa.

Por lo general, la PC se incrementa después de obtener una instrucción y mantiene la dirección de memoria de ("apunta a") la siguiente instrucción que se ejecutaría.

Los procesadores suelen obtener instrucciones secuencialmente de la memoria, pero las instrucciones de transferencia de control cambian la secuencia colocando un nuevo valor en la PC. Estos incluyen bifurcaciones (a veces llamadas saltos), llamadas a subrutinas y retornos. Una transferencia que está condicionada a la verdad de alguna afirmación permite que la computadora siga una secuencia diferente bajo diferentes condiciones.

Una bifurcación proporciona que la siguiente instrucción se busque en otra parte de la memoria. Una llamada de subrutina no solo bifurca sino que guarda el contenido anterior de la PC en alguna parte. Un retorno recupera el contenido guardado de la PC y lo coloca de nuevo en la PC, reanudando la ejecución secuencial con la instrucción que sigue a la llamada a la subrutina.

Implementación de hardware

En una unidad central de procesamiento (CPU) simple, la 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 comienza con un fetch, en el que la CPU coloca el valor de la 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 solo espacio de memoria contiene instrucciones ejecutables y datos ordinarios). Después de la recuperación, 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, la PC se modificará para que la próxima instrucción ejecutada sea diferente (típicamente, incrementada para que la siguiente instrucción sea la que comienza en la dirección de memoria que sigue inmediatamente a la última ubicación de memoria de la instrucción actual).

Al igual que otros registros del procesador, la PC puede ser un banco de pestillos binarios, cada uno de los cuales representa un bit del valor de la PC. El número de bits (el ancho de la PC) se relaciona con la arquitectura del procesador. Por ejemplo, una CPU de "32 bits" puede usar 32 bits para poder direccionar 232 unidades de memoria. En algunos procesadores, el ancho del contador del programa depende de la memoria direccionable; por ejemplo, algunos controladores AVR tienen una PC que se ajusta después de 12 bits.

Si la 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 la PC mediante un pulso a su entrada LOAD.

Para identificar la instrucción actual, la PC puede combinarse con otros registros que identifiquen un segmento o una página. Este enfoque permite una PC con menos bits al suponer que la mayoría de las unidades de memoria de interés están dentro de la vecindad actual.

Consecuencias en la arquitectura de la máquina

El uso de una PC que normalmente incrementa asume que lo que hace una computadora es ejecutar una secuencia lineal de instrucciones. Tal 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 que ser secuenciales. El "cuello de botella de von Neumann" resultante condujo a la investigación de la computación paralela, incluidos los modelos de flujo de datos o que no eran de von Neumann que no usaban una 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 especificar esto usando 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, que incluyen:

Consecuencias en la programación de alto nivel

Los lenguajes de programación modernos de alto nivel todavía siguen el modelo de ejecución secuencial y, de hecho, una forma común de identificar errores de programación es con una "ejecución de procedimiento" en la que el dedo del programador identifica el punto de ejecución como un PC lo haría. El lenguaje de alto nivel es esencialmente el lenguaje de máquina de una máquina virtual, demasiado complejo para ser construido como hardware pero en su lugar emulado o interpretado por software.

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

Símbolo

Los proveedores usan diferentes caracteres para simbolizar el contador del programa en los programas en lenguaje ensamblador. Mientras que el uso de un "$" el carácter prevalece en la documentación de los procesadores Intel, Zilog, Texas Instruments, Toshiba, NEC, Siemens y AMD, Motorola, Rockwell Semiconductor, Microchip Technology e Hitachi en su lugar utilizan un "*" carácter, mientras que SGS-Thomson Microelectronics utiliza "PC".