MAR vs Stack Pointer, ¿Cuál es la diferencia?

1

Así que estaba viendo algunos videos en un chico "Construyendo su propia computadora de 8 bits", y el Registro de Direcciones de Memoria (MAR) se adjuntó a la SRAM. El MAR tomó el siguiente valor del Contador de programas y luego buscó en la SRAM la siguiente instrucción y la puso en el registro de instrucciones. (Nota: ¿Por qué el contador de programa no va directamente a un decodificador en lugar del MAR, que es básicamente otro registro?)

De todos modos, estaba mirando la hoja de datos del ATTiny85 y noté que el "Apuntador de pila" estaba vinculado a la SRAM en el diagrama de bloques (solo entiendo algunos de los conceptos básicos aquí, así que disculpas si esta es una pregunta realmente estúpida). El contador del Programa en este caso estaba vinculado directamente a la SRAM y el puntero de pila apuntaba a la SRAM también.

Estoy curioso, exactamente cómo funciona esto? Solo estoy aprendiendo Arquitectura de Computadoras, así que algunas de estas cosas están fuera de los límites de lo que he aprendido ... pero estoy muy interesado en entender cómo funciona una CPU en el nivel básico.

Tal vez estoy confundiendo SRAM y programa flash en este caso sin embargo. En ese caso, ¿dónde está el MAR?

    
pregunta msmith1114

2 respuestas

2

El Registro de direcciones de memoria y el Registro de datos de memoria son cosas que se pueden encontrar en la mayoría de las implementaciones de CPU . Pero no son (generalmente) parte de la vista de los programadores de la CPU: no son necesarios para describir lo que hace la CPU en el nivel de instrucción (externo). (Pero a menudo son visibles en el nivel de micro-instrucción).

Por lo tanto, es posible que encuentre un MAR en una imagen que describe la implementación de la CPU, pero generalmente no verá un MAR en una imagen que pretende describir la CPU para un programador . Desafortunadamente, no siempre está claro cuál es el propósito de tal imagen.

En la mayoría de los casos (simples) hay varias fuentes (PC, SP, otros registros, dirección inmediata de la instrucción, resultado de una caculación) para una dirección de memoria que debe leerse, y solo hay un bus de dirección de la CPU a la memoria. Por lo tanto, debe haber alguna forma de seleccionar una de estas fuentes. En la mayoría de los casos, esto lo hace la fuente que coloca la dirección en un bus interno y el MAR retiene (recuerda) esta dirección. A continuación, se accede a la memoria, lo que lleva un tiempo considerable en comparación con las operaciones internas de la CPU. Debido a que la dirección está bloqueada, el bus interno es libre de hacer otras cosas útiles (como incrementar la PC).

    
respondido por el Wouter van Ooijen
1

El diagrama que incluye es una vista muy simplificada de la arquitectura. Solo muestra los bloques principales que son visibles para el programador. Las funciones que el programador no necesita conocer, como si hay un MAR por separado o no, están ocultas.

Habiendo dicho eso, tenga en cuenta que el puntero de pila solo se utiliza para acceder a una pila. Por lo general, el puntero de pila solo se cambiará mediante las instrucciones PUSH o POP. Un registro de direcciones de memoria es más genérico y puede contener la dirección para cualquier acceso a la memoria. El hecho de que SRAM o Flash tengan o no un MAR depende de si son síncronos o asíncronos y qué tan rápidos son. Si un acceso a la memoria se puede completar en un solo ciclo de reloj, es posible que no necesite un MAR por separado.

    
respondido por el Elliot Alderson

Lea otras preguntas en las etiquetas