1 votos

¿Por qué el Stack Poniter(SP) del MSP430 siempre está alineado a una dirección par?

Mientras leía la guía del usuario del MSP430, me enteré de que su puntero de pila está alineado a una dirección par. (Leer Pg.189 de http://www.ti.com/lit/ug/slau208m/slau208m.pdf )

¿Por qué? ¿Por qué el puntero de la pila se asigna a una dirección par?

Según tengo entendido, cada dirección de la RAM puede almacenar 16 bits de datos, independientemente de si la dirección es par o no.

En la imagen de abajo se ve claramente cómo esos datos pueden ser empujados o saltados en la RAM.

Ahora es como cada dirección(par o impar) puede almacenar 8 bits de datos. Pero yo esperaba que cada dirección puede almacenar 16 bits de datos.

MSP430 stack operation

4voto

Passerby Puntos 28913

El msp430 es nativamente de 16 bits. Tiene un bus de 16 bits y 2 bytes. Las direcciones de memoria todavía se numeran en 8 bits, incrementos de 1 byte, ya que este es el estándar para el direccionamiento de memoria.

Por eso la pila está alineada uniformemente.

3voto

markpasc Puntos 775

Según tengo entendido, cada dirección de la RAM puede almacenar 16 bits de datos.

No, cada dirección RAM almacena 8 Bits de datos, o un Byte.

3voto

Kimball Robinson Puntos 161

Cada dirección de memoria hace referencia a un único byte, pero el bus de datos interno (y la memoria flash) del procesador tiene 16 bits de ancho. Cuando se accede a valores en memoria que se utilizarán para datos, esto es irrelevante desde el punto de vista del hardware; es algo de lo que se ocupará el compilador. Cuando se accede a valores de la memoria que se van a ejecutar, es decir, instrucciones de código máquina, el procesador tiene que asegurarse de que las instrucciones estén siempre alineadas con una dirección de byte par. Para ello, impone una restricción en el registro PC (Contador de Programa) que obliga a que siempre sea par (el bit 0 del PC probablemente no esté implementado como un DFF, sino como un 0 lógico). Las instrucciones tienen que estar en direcciones de bytes pares porque el procesador tiene que ser capaz de leer la instrucción completa en una sola operación desde una única posición de memoria de 16 bits de ancho. Si la instrucción estuviera en una dirección de byte impar, estaría la mitad en una posición de memoria y la otra mitad en otra. El procesador tendría que ser considerablemente más complejo para hacer frente a esa posibilidad; es más sencillo (y, en última instancia, más barato) que el diseñador/fabricante del procesador acepte el compromiso de una menor complejidad a cambio de que el procesador sólo pueda manejar direcciones pares para las instrucciones.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X