No se pueden hacer suposiciones sobre el ancho del contador de programa (PC) a partir del ancho de la dirección de memoria.
Históricamente ha habido muchas arquitecturas de memoria diferentes, y sin duda se inventarán otras nuevas. En un nivel muy básico para la máquina más sencilla, el PC contiene la dirección de memoria durante la obtención de instrucciones, por lo que tiene la misma anchura que esa dirección. Sin embargo, hay muchos trucos, incluso en las primeras máquinas, que hacen esto más complicado.
Por ejemplo, las máquinas con memoria virtual pueden direccionar lógicamente más memoria de la que existe físicamente. El PC sería entonces más amplio que el bus de direcciones. En un procesador más moderno que funcione en modo "32 bits", el PC tendría 32 bits de ancho. Sin embargo, eso significa que el PC sólo puede direccionar 4 GB de memoria. Muchas máquinas modernas pueden direccionar más memoria física que eso.
Hay una variedad de esquemas de segmentación. El PC es más limitado, y algún otro registro mantiene los bits de dirección superiores del segmento en el que el PC está operando. Los saltos dentro del mismo segmento funcionan normalmente cargando el PC, pero moverse entre segmentos es más complicado y requiere instrucciones adicionales y similares. La memoria física real puede ser más grande o más pequeña que lo que el PC puede direccionar nativamente.
También hay arquitecturas Harvard y similares en las que no hay un solo espacio de memoria, o en las que no es posible la ejecución desde toda la memoria.
19 votos
La respuesta correcta es "esta pregunta está mal escrita". En realidad, tu profesor tiene en su mente algunos supuestos no escritos. Se espera que tú hayas asimilado sus suposiciones y llegues a la respuesta que él espera. Es una forma deficiente de hacer las cosas, pero a menudo es así. La pregunta debería ser más del tipo "¿Qué tamaño (número mínimo de bits) necesita el contador de programa para direccionar el código del programa en una memoria de 8kB si el bus de datos de la memoria tiene 4 bits de ancho?". Estoy bastante seguro de que no es sólo que el bus de datos sea de 4 bits, sino que la memoria está organizada en nibbles en lugar de bytes.
0 votos
En las arquitecturas Harvard, el PC sólo necesita preocuparse por el tamaño de la memoria de programa, no por el tamaño del bus de direcciones o de datos. Además, las CPUs con una MMU pueden utilizar configuraciones de memoria virtual que permiten restringir el PC a un determinado tamaño, no necesariamente relacionado con el tamaño de la memoria física. Así que no creo que puedas hacer esta pregunta sobre un "ordenador general".
4 votos
Incluso si reinterpretamos "contador de programa" como "bus de direcciones", es una mala pregunta. Dado que el bus de datos es de 4 bits, uno se pregunta qué significa "8kB". ¿Son 8192 bytes, direccionados en 16384 palabras de 4 bits? O es 8192 bits (en cuyo caso debería haber sido "8 kb" en lugar de "8 kB")? ¿O 8192 palabras de 4 bits cada una?
0 votos
Asumiendo que kB significa kilobytes, no kilobits (kb), para una memoria de 8kB, se necesita un bus de direcciones de al menos 13 bits para direccionar cada posición de la memoria, independientemente del tamaño del bus de datos. Así que se puede decir que el contador de programa tiene al menos 13 bits de ancho.