AVR [Por qué los registros IO tienen direcciones IO y direcciones SRAM]

3

Estaba revisando la hoja de datos de ATMEGA16, y en pg17 encontré que hay registros IO que tienen "direcciones IO y SRAM",

No sé qué usamos y por qué hay dos tipos de direccionamiento para las IO?

Necesito saber si es parte de la SRAM o no. Por favor, ilumíname ^^

    
pregunta Omar Saeed

4 respuestas

2

Sin la accesibilidad desde el espacio de datos ( no "a través de SRAM") no habría manera de realizar direccionamiento indexado / indirecto de registros, agregando complejidad a una gran cantidad de algoritmos y métodos de programación. Por otro lado, tener espacio de E / S permite que IN y OUT sean instrucciones de una sola palabra, lo que reduce el tamaño y el tiempo de ejecución del código simple.

El espacio de registro es independiente del espacio de la SRAM, y la SRAM se mueve hacia arriba el número apropiado de ubicaciones en el espacio de datos para compensar.

    
respondido por el Ignacio Vazquez-Abrams
4

Esto es solo una opción de diseño del procesador.

Probablemente esté sorprendido porque, digamos, en un procesador Intel x86, un registro como EAX no tiene una dirección de memoria; vive solo dentro del procesador.

tiene ser así en una computadora de alto rendimiento, porque acceder a la memoria es costoso. Los registros se utilizan precisamente porque no son memoria: son ubicaciones de almacenamiento de muy alta velocidad que se encuentran en el propio procesador.

Una ventaja de tener registros asignados a la memoria es que el estado de la máquina es un objeto en la memoria. Si tiene una instantánea de algún rango de memoria, entonces tiene una instantánea del estado de la máquina. Y si tiene una herramienta de depuración que puede acceder a la memoria, conoce el estado de la máquina.

Entonces, la segunda pregunta podría ser: si un procesador tiene registros que en realidad son solo ubicaciones de memoria, ¿por qué molestar con los registros si son "falsos" y denotan ubicaciones de memoria? El conjunto de instrucciones solo puede ocuparse estrictamente de los operandos de memoria y no de los registros.

Parte de la respuesta a esta pregunta es que los registros pueden generar una codificación de instrucciones más pequeña. Si tiene, digamos, ocho registros, entonces solo se necesitan tres bits en una instrucción para designar ese registro. Entonces tiene más bits disponibles para más instrucciones, o más modos de direccionamiento.

Posiblemente, la "máquina con registros falsos" puede tener registros en el procesador, que solo están sincronizados con los de la memoria. Es decir, no es necesario que un acceso de lectura al registro R0 acceda realmente a la memoria $0000 ; Todavía puede haber un R0 interno. Para mantener el R0 interno sincronizado, el procesador puede detectar el bus y cuando detecta que algo (posiblemente él mismo) escribe en la palabra en la ubicación $0000 , actualiza el R0 interno con los mismos datos. (Nota: ¡no estoy diciendo que su AVR haga esto!) De manera similar, si un valor se carga en R0, puede ir inmediatamente al R0 interno, pero la actualización externa de $0000 puede retrasarse un poco; La ejecución de la máquina no tiene que detenerse hasta que se complete la actualización. Si la siguiente instrucción requiere el valor de R0, no necesariamente tiene que esperar hasta que un ciclo de memoria finalice la actualización de $ 0000.

Hay son conjuntos de instrucciones sin registros. Las máquinas de pila son un ejemplo de conjuntos de instrucciones que logran un buen tamaño de instrucción, sin registros. En lugar de registros, hay una pila, y la mayoría de las operaciones funcionan con uno o dos operandos en la parte superior de la pila. Las operaciones no tienen que indicar el origen o el destino en absoluto; la pila es implícitamente utilizada.

    
respondido por el Kaz
2

Es una cosa del tamaño del código. Hay instrucciones de una sola palabra que acceden a la memoria de E / S que contienen la dirección completa de E / S como un valor inmediato (codificado dentro de la instrucción). Una dirección SRAM completa es demasiado larga para que quepa en una sola palabra, por lo que las instrucciones equivalentes que acceden al espacio de direcciones SRAM requieren dos palabras. Además, no hay manera de hacer direccionamiento indirecto al espacio de E / S directamente, por lo que también debe asignarse al espacio SRAM para que se puedan usar todos los modos de evaluación. Básicamente, el espacio de E / S es solo un 'atajo' para ubicaciones de memoria a las que se accede a menudo con direcciones constantes (es decir, acceso a puertos de E / S) y el espacio de E / S proporciona un beneficio de velocidad y tamaño de código (instrucciones de dos palabras dos ciclos de reloj para procesar). Además, la parte baja del espacio SRAM es 'direccionable a bits', por lo que las instrucciones que operan en bits individuales pueden acceder a los registros del procesador de propósito general, así como a los registros de E / S.

    
respondido por el alex.forencich
0

1- acceso limitado a 2 bytes

2-dircet y direccionamiento indirecto

    
respondido por el Mohammed Mustafa Kamel

Lea otras preguntas en las etiquetas