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?