Microprocesadores / microcontroladores - ¿Los registros tienen direcciones?

6

El profesor de mi sistema integrado sigue refiriéndose a las ubicaciones de memoria de los registros como sus "direcciones" respectivas. Estoy confundido por esto; Siempre tuve la impresión de que en cualquier microprocesador, los registros de la CPU no tienen direcciones, ya que no residen en la memoria principal (residen en el propio microprocesador). También estoy confundido acerca de a qué nos referimos cuando decimos la "ubicación de memoria del registro"; de nuevo, no está en la memoria principal.

Dicho esto, ¿por qué nos referimos a las ubicaciones de los registros de CPU por "direcciones"? ¿Todos / algunos registros tienen direcciones?

Pensé en esto y razoné que tal vez están "conectadas" a ciertas ubicaciones de la memoria principal, permitiendo el acceso a los valores almacenados en los registros. Para extender este pensamiento, ¿es esto lo que la asignación de memoria es?

También debo agregar que estamos trabajando específicamente con el microcontrolador LPC1768 de NXP, que utiliza el microprocesador ARM Cortex-M3.

    
pregunta chevestong

9 respuestas

6

Depende del procesador en particular si los "registros" están en el mismo espacio de direcciones que la memoria de datos regular o separados. En cualquier caso, si hay varios de ellos, cada uno necesita una dirección.

Digamos que el procesador tiene 16 registros que están estrechamente acoplados a la CPU e implementados por separado de la memoria de datos. Esos registros todavía tienen que ser identificados de alguna manera. En este caso, se necesitaría una dirección de 4 bits para distinguir los registros individuales. En una arquitectura RISC, la dirección de 4 bits de cualquier registro (s) en el que se haya trabajado una instrucción se incluiría en el código de instrucción. Por ejemplo, la instrucción ADD puede agregar el valor de un registro de origen en un registro de destino. Esa instrucción incluiría 4 bits para identificar el registro de origen y otros 4 bits para identificar el registro de destino. La documentación puede referirse a estos registros con el "número 0 al 15, pero esa es realmente la dirección donde se encuentran los registros en una pequeña memoria especial de la CPU.

Además de lo anterior, incluso cuando un procesador tiene registros dedicados especiales, esos registros podrían asignarse al espacio de direcciones de datos de propósito general. Las referencias a esas direcciones están atrapadas y se refieren a los registros internos.

Hay muchos esquemas por ahí, pero si tiene más de un registro, esos registros deben distinguirse entre sí de alguna manera, y dentro del hardware que estará con una "dirección", ya sea que se llame así La documentación o no.

    
respondido por el Olin Lathrop
7

La fuente de la confusión es que hay (en general) dos tipos de cosas que pueden llamarse "registros".

El primero es probablemente con lo que estás familiarizado: en ARM, registra R0, R1, R2, ... R12, SP, LR, PC y en x86 es eax, ebx, ecx, edx, ebp , y así sucesivamente. Estos también pueden denominarse " registros principales " o " registros del procesador ". No tienen direcciones en el espacio de la memoria del sistema y solo se puede acceder a ellas mediante instrucciones específicas.

El otro son los registros que pueden controlar varios bloques de hardware (periféricos), en la propia CPU o externos a ella. En LPC1768 y en muchos otros procesadores integrados, normalmente están asignados a la memoria, y es por eso que tienen direcciones. Por ejemplo, el bloque UART0 está en la dirección 0x4000C000 y ahí es donde necesita leer o escribir para comunicarse con él. Para distinguirlos de los registros principales, pueden llamarse " registros periféricos " o " registros de hardware ".

En algunos microcontroladores de 8 bits de gama baja como 8051 o PIC, es posible que no haya registros centrales, además de un acumulador, y todos los demás registros se asignan a varias áreas de memoria como "RAM interna" (para almacenamiento temporal / Cálculo) o memoria de "Registros de funciones especiales" (SFR) para los registros de control y periféricos. En ellos, los "registros" casi siempre tienen una dirección.

Las ARM más grandes también tienen registros de coprocesador , que se pueden usar para controlar varias funciones básicas (por ejemplo, MMU o caché) con instrucciones como MRC o MCR . Estos registros son similares a los registros principales en el sentido de que no tienen una dirección de memoria sino solo un número.

También, en x86 puede tener ports de E / S, a los que se accede mediante las instrucciones in y out , que se pueden usar para controlar algunos bloques de hardware. Estas funciones son similares a las de los registros periféricos, pero generalmente no se denominan así.

    
respondido por el Igor Skochinsky
3

Está en lo cierto al afirmar que algunos registros no se encuentran dentro de la memoria principal, sino en el propio microprocesador, y que esos registros están asignados en memoria a ciertas ubicaciones.

El microcontrolador LPC1768 tiene solo 64kB de RAM (lo que creo que quiere decir con memoria principal), sin embargo, un bus de direcciones de 32 bits y 4GB de espacio de direcciones total. El resto de este espacio de direcciones contiene la memoria flash que almacena su programa y los registros de todos los periféricos (por ejemplo, los estados del pin de salida o el ADC).

Por lo general, cuando intenta acceder a una ubicación asignada en memoria, la lógica dentro del microcontrolador identificará dónde se encuentra físicamente la dirección de la memoria y operará las líneas de control para que los datos lleguen a donde estaban destinados, sin importar si están en RAM, un puerto GPIO o un registro de control periférico.

Esto simplifica el software de escritura, ya que no necesita preocuparse demasiado por la ubicación física de los registros, y facilita mucho la compilación de idiomas de nivel superior (como C).

En el caso específico del LPC1768, mirando la hoja de datos ( enlace ) podemos ver el mapa de direcciones en la página 20 (Figura 4), que muestra dónde se asignan todos los periféricos en la memoria.

Por supuesto, el procesador también contiene un puñado de registros internos que no están asignados a la memoria, a los que se puede acceder mucho más rápidamente que en el espacio de direcciones, ya que la lógica de administración de la memoria es lenta en comparación con el núcleo y se usa Como almacenamiento temporal durante las operaciones. Parte del trabajo de un compilador es manejar el almacenamiento de datos en registros y moverlos de la memoria para usted.

    
respondido por el Sam M-G
2

Como han dicho otros, depende de la familia de microcontroladores. Y depende de lo que quieras decir con registro.

El msp430, por ejemplo, tiene dos conjuntos de "registros". El primero es el archivo de registro RISC, con 16 registros de 16 bits. Estos incluyen los registros de contador de programa, puntero de pila, estado y generador constante, y 12 de uso general. Estos son registros en el uso de arquitectura tradicional de la palabra.

Elsegundoconjuntoderegistrossontodolodemás.Puertos,periféricos,interrupciones,etc.SonpartedelarchivodememoriaúnicaycompartenespacioconlaRAMdeusogeneralyFlash(espaciodecódigo)

Por ejemplo, el msp430g2231 tiene un registro de salida del puerto 1 en la dirección de memoria 0x21.

Puedeaccederalregistroconelnombrederegistrop1out,peroesoessolounpunteroaladireccióndememoriade8bits0x21.Lomásimportanteesqueasíloveelcompilador.Elarchivodeencabezado,enestecasomsp430g2231.h,define"p1out" como 0x0021. Aparte del archivo de registro RISC, el uso común de Registro solo significa una dirección de memoria para x opción específica. Lo que ve como Registro p1out es la forma en que un idioma superior le facilita la programación , en lugar de memorizar mapas de memoria.

Si usa un puntero a la dirección de memoria 0x27f, estaría leyendo desde la memoria RAM. Puntero a la dirección de memoria 0xffdf, y estaría leyendo su código compilado en su lugar. Todo un registro es, es una dirección de memoria para una función especial.

    
respondido por el Passerby
2

Como un término genérico "registro" solo significa un lugar donde puede almacenar ("registrar") información, nada más.

La mayoría de las arquitecturas reservan el término registro para las ubicaciones dentro de la CPU que se identifican mediante bits en una instrucción y que a menudo son accesibles mucho más rápido que la memoria general ("RAM"). (Y a menudo se puede acceder a 2 o 3 registros en paralelo en un ciclo de ejecución).

Sin embargo, la documentación del PIC de Microchip, por ejemplo, se refiere a todas las ubicaciones direccionables como registros, incluso a la RAM. Cuando su profesor copia este uso del término, debe informarle a la OMI que no es así como el término "registro" se usa comúnmente en la actualidad. (Como espero haberlo hecho en mis clases de ensamblador PIC).

    
respondido por el Wouter van Ooijen
1

Los registros tienen direcciones, aunque generalmente no residen en la memoria.

Piénselo un minuto: una dirección denota una ubicación en algún espacio, donde la memoria es solo una instancia de un espacio. I / O a menudo tiene su propio espacio de direcciones; En algunas arquitecturas de microcontroladores, la memoria de código y la memoria de datos son espacios separados.

Y, por lo tanto, los registros también pueden tener su propio espacio: a veces los registros de PF y enteros (y creo que en los 68000 registros de direcciones) tienen cada uno su propio espacio separado.

Una pregunta es: ¿cómo podemos saber si la dirección 1 se refiere al byte 1 en la memoria, al puerto de E / S 1 o al registro 1? Generalmente desde el contexto: en una instrucción IN o OUT, obviamente un puerto. En una instrucción de registro a registro, es una dirección de registro. En una instrucción de carga, habrá una (gran) dirección de memoria y una (pequeña) dirección de registro, y así sucesivamente.

En un núcleo ARM, una dirección de memoria generalmente será un número de 32 bits; una dirección de registro será un número de 5 bits.

    
respondido por el Brian Drummond
1

Si uno define una dirección como un conjunto de bits k que pueden usarse para seleccionar un elemento de un conjunto de elementos hasta 2^k , entonces es común que muchos registros en muchos procesadores y controladores tengan direcciones, pero también para que los controladores tengan algunos registros que están marcados por circuitos que detectan condiciones particulares y no son identificables a través de ninguna forma de dirección. Sin embargo, es importante tener en cuenta que, en muchos casos, los cables de dirección que controlan los registros de la CPU no tendrán relación con los cables de dirección que están conectados a sistemas de memoria más grandes. Como tal, las "direcciones" de registro a menudo existirán en un "universo" completamente separado de las direcciones de memoria.

En la mayoría de los procesadores, las "direcciones" de registro siempre se generan internamente por la lógica del procesador, fuera del control del programador, o se obtienen de ciertos bits en cada instrucción. La única forma en que el código de cambio podría afectar el software a qué registro se debe buscar una instrucción en particular sería parchear los bits apropiados dentro de esa instrucción. En el PIC de General Instruments, cuyo diseño vive en la forma del PIC de Microchip, si un código de operación especificara todos los ceros para una dirección, el hardware sustituiría el contenido de un registro diferente ubicado en la dirección 3. Esto permite que el código use los cálculos para seleccionar una dirección.

Quizás lo más importante que se debe entender acerca de las direcciones es que es posible que un sistema tenga diferentes espacios de direcciones que existan efectivamente en diferentes universos. En el 8051, por ejemplo, hay, dependiendo de cómo se cuenta, al menos cuatro espacios de direcciones diferentes y posiblemente hasta seis; Cuatro de ellos son totalmente independientes (las instrucciones:

mov a,80h  ; Direct address space
mov a,@r0  ; Assume R0 = 80h
movc a,@a+dptr ; Assume A = 0 and DPTR = 80h
movx a,@dptr ; Assume DPTR = 80h

todos recuperan datos de la "dirección 80h" pero leen cuatro cosas no relacionadas: una dirección en el espacio de E / S (el registro de datos del puerto 0 creo), el registro de datos interno 80h, la memoria de códigos en la dirección 0x0080 y la memoria de datos externa en la dirección 0x0080. En muchos sistemas, estas cosas de hecho no tendrían relación alguna entre sí. El hecho de que un registro responda a una dirección particular en un universo dice poco o nada acerca de si responderá a esa o cualquier otra dirección en un universo diferente.

    
respondido por el supercat
0

RISC significa "Equipo de conjunto de instrucciones reducido". Parte de la forma de reducir el tamaño del conjunto de instrucciones es tener solo un tipo de ubicación de datos, que incluye registros, RAM o E / S.

Cuando las personas tomaron estas ideas en serio, las dos ventajas esperadas de los diseños RISC eran que el procesador podría ser mucho más rápido si lo hiciera mucho más simple y que podría optimizar su código de programa si pudiera usar cualquier dirección de memoria para cualquier cosa, en lugar de forzar que todo se cargue y descargue, pase por el registro ALU para aritmética, el registro de dirección de memoria para direccionamiento de memoria, etc.

Dos remanentes de esa forma de pensar son: (1) Tenemos procesadores que PRETENDEN que todos los registros son iguales, al asignar registros en el espacio de la memoria, y (2) Tenemos profesores que PRETENDEN que todos los registros son iguales, llamando a los registros ubicaciones de memoria.

Sé tolerante. Fue un área importante de investigación para los estudiantes de doctorado, que tuvo un impacto significativo y duradero en la forma en que se diseñaron algunos procesadores.

    
respondido por el david
0

El 8051, si recuerdo bien, podría acceder a los registros utilizando direcciones de memoria, pero este no es el caso general de todos los procesadores. Los procesadores ARM no tienen manera de hacer esto, no se puede acceder a los registros de propósito general r0-r15 en el bus de memoria.     

respondido por el old_timer

Lea otras preguntas en las etiquetas