Tamaño del contador del programa

6

¿Podemos decir algo sobre el contador del programa mirando el tamaño de un chip de memoria?

Creo que el contador del programa es parte del microprocesador y la memoria es externa. ¿Cómo podemos comentar sobre el contador del programa mirando el tamaño de la memoria?

Por ejemplo, tuve una pregunta en una de mis pruebas:

  

Un chip de memoria de 8kB tiene un bus de datos de 4 bits. ¿Cuál será el tamaño del contador del programa?

    
pregunta Sumit Saxena

3 respuestas

16

Realmente no puede hacer suposiciones sobre el ancho del contador del programa (PC) respecto 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. A un nivel muy básico para la máquina más simple, la PC contiene la dirección de memoria durante las búsquedas de instrucciones, por lo que tiene el mismo ancho 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. La PC sería entonces más ancha que el bus de direcciones. En un procesador más moderno que funcione en modo "32 bits", la PC tendría 32 bits de ancho. Sin embargo, eso significa que la PC solo puede direccionar 4 GB de memoria. Muchas máquinas modernas pueden ocuparse de más memoria física que esa.

Hay una variedad de esquemas de segmentación. La PC es más limitada, y algún otro registro contiene los bits de dirección superiores del segmento en el que opera la PC. Los saltos dentro del mismo segmento funcionan normalmente al cargar la PC, pero moverse entre segmentos es más complicado y requiere instrucciones adicionales y similares. . La memoria física real podría ser más grande o más pequeña que la que la PC puede abordar de forma nativa.

Luego están las arquitecturas de Harvard y similares donde no solo hay un espacio de memoria, o donde la ejecución no es posible desde toda la memoria.

    
respondido por el Olin Lathrop
5

La única forma segura de responder una pregunta como esta es establecer sus suposiciones y luego indicar qué emana de ellas.

Por ejemplo -

Una memoria de 8kB necesita 13 bits para direccionarla por bytes. Si la PC se dirige a los bytes y la memoria de 8k ocupa todo el espacio de la memoria del programa direccionable, entonces la PC debe tener al menos 13 bits de ancho.

Sin embargo, tal vez el espacio direccionable sea más grande, o quizás sea direccionable por nybble, o tal vez solo en palabras de 16 bits. Todo afectaría el tamaño de la PC.

    
respondido por el Neil_UK
3

El contador del programa debe ser generalmente lo suficientemente grande para codificar todas las ubicaciones de código posibles, por ejemplo. si tiene 8kB de memoria de programa, eso es 2¹³ bytes direccionables, por lo que si no se especifica nada más, esperaría que el contador del programa tenga al menos 13 bits de ancho. 16 bits serán típicos, aunque el hardware no necesita implementar los 3 bits superiores, por lo que puede tener un registro de contador de programa de 16 bits, donde escribir '1's en los 3 bits superiores sería un no-op, esos las escrituras se perderían.

Sin embargo, en realidad la respuesta verdadera es "es complicado" . Diferentes arquitecturas han usado todo tipo de hechicería (el acceso a la memoria segmentada 8086 viene a la mente) y es difícil dar una respuesta definitiva.

También tenga en cuenta que el hecho de que tenga 8 KB de memoria no significa que deba dedicarse todo al código. La mayor parte podría ser datos. Quizás desee leer sobre von Neumann vs Harvard architectures .

    
respondido por el anrieff

Lea otras preguntas en las etiquetas