Arquitectura de memoria y almacenamiento de instrucciones - Naimi: AVR Microcontroller

1
  

LDI R16, 0x25 - > E 2 0 5 - > 1110 0010 0000 0101

Aparentemente, en AVR, el código y los datos se almacenan por separado y cada uno Se accede al área (código, área de datos) mediante un bus único.

Ahora, ya que el contador del programa contiene la dirección al siguiente instrucción que en este caso es LDI: PC --> E (PC points to 'E')

Mi pregunta es, cuando se cargan las partes de datos (instrucciones) dentro de 1 reloj ciclo, bueno .. el código de operación 'E' se refiere directamente a la PC. Cómo hace el ¿La CPU encuentra la parte de datos (0010 0000 0101)?

O lo tengo totalmente equivocado y son los 2 bytes (E + 0010 0000 0101) de la instrucción el 'código' y se mantiene como una sola unidad en el área de código. En ese caso ¿Cuál es el área de datos? Es para instrucciones que usan memoria. direcciones: por ejemplo,

  

LDS R10, $ FFFF   Aquí el código son los bytes para toda la instrucción y los datos son   probablemente rellenado por el ensamblador de alguna asignación de variable?

¿Por qué entonces dice:

  

En las Secciones 2-2 y 2-3, aprendiste sobre el espacio de la memoria de datos y cómo   Utilice las instrucciones STS y LDS. ? Entonces la CPU quiere ejecutar el   LDS   Rn, k? instrucción, pone k en el bus de direcciones del bus de datos, y   recibe datos a través del bus de datos. Por ejemplo, para ejecutar? LDS R20,   ¿0x90 ?, la CPU pone 0x90 en el bus de direcciones. La ubicación $ 90 está en el   SRAM (ver Figura 2-4). Así, la SRAM pone los contenidos de ubicación $ 90.   en el bus de datos. La CPU obtiene el contenido de la ubicación $ 90 a través del   Bus de datos y lo pone en R20.

WTH? ¿Podría alguien explicar claramente la arquitectura del bus de datos / código AVR y cómo? Las instrucciones son recuperadas y ejecutadas?

    
pregunta

1 respuesta

1

Está bien, entonces: LDS R10, $ FFFF es la instrucción y se resuelve en bytes (2 o lo que sea) y todo se almacena en el 'código'.

AVR 'código' y 'datos' son como C, segmento de código y segmento de datos. El compilador asigna almacenamiento para variables / cadenas literales en 'datos' (no constantes).

La CPU absorbe toda la instrucción (2 bytes) usando el registro del contador de programas. Lo descodifica (extrae la información del registro / dirección / código de operación) y ejecuta la instrucción enclavando la dirección en el bus de direcciones, y tomando el valor del bus de datos en el registro R10.

    
respondido por el user41067

Lea otras preguntas en las etiquetas