5 votos

¿Cuál es la principal diferencia entre registros, campos de bits y marcas?

En la escuela yo estaba acostumbrado a la programación de los diferentes registros cuando se trabaja con microcontroladores para manipular su comportamiento. En mi trabajo los registros son que ahora se conoce simplemente como campos de bits. La palabra "register" sólo se usa para referirse a un valor hexadecimal, que supongo que es la ubicación de la dirección. Las palabras "campos de bits" se utiliza para indicar la parte del registro que pertenece a una cierta funcionalidad de nuestro producto. Mirando el Atmel documentación aquí (página 3) indican que 2 más pequeños registros constituyen uno de los más grandes de registro. Este wiki documento indica que los bits se refiere a las banderas. Supongo que estoy confundido sobre la nomenclatura. Hay un estándar de la industria para definir cuáles son las diferencias entre los términos o cuando deben ser utilizados?

6voto

lillq Puntos 4161

registros
Creo que te refieres a este dibujo:

enter image description here

El archivo de registro es una matriz de 32 de registros de propósito general que reside en el regulador de la CPU. Los registros están estrechamente vinculadas con la ALU (Unidad de Aritmética y Lógica) de modo que las operaciones en el registro de datos se puede realizar mucho más rápido que los datos que se obtienen de (externo) de RAM. Un microcontrolador tendrá especial de modos de direccionamiento para trabajar con los registros. Si desea agregar 5 a una variable en la memoria RAM de la instrucción deberá incluir la dirección de memoria RAM, por lo que se puede necesitar de 16 bits. Desde el archivo de registro es de sólo 32 bytes de largo usted sólo necesita 5 bits para la dirección de un registro, y el conjunto de instrucciones está diseñado de tal manera que estos 5 bits encajan con la instrucción de código de operación de 16 bits de la instrucción. Así que no hay segunda captura de la dirección es necesario.

Eso es lo que el dibujo muestra: la instrucción es de 16 bits de ancho, y 5 bits de que es el registro de designación. Incluso fue un paso más allá. Hay instrucciones que operan sobre dos registros, y de nuevo se construyen las instrucciones de tal manera que las dos registro de designadores de ajuste en la 16 bits de la instrucción, así que de nuevo sólo 1 fetch es necesario.

enter image description here

Por lo que no muestra dos registros combinados en uno de doble longitud, aunque hay microcontroladores que permiten esto.

banderas
Las banderas son solo bit de datos que indican algunas de estado: encendido o apagado, verdadero / falso.

enter image description here

Este es el modelo de programación de la buena vieja MC6809 (un hermoso microprocesador, que hace más de 30 años estaba muy por delante de su tiempo). La condición de código de registro consta de 8 banderas, con nombres como "cero", "llevar", "desbordamiento", "IRQ máscara", etc. No tener acceso a estos bits directamente como otro registro, pero el uso de ellos para instrucciones de bifurcación condicional, como BEQ, para la rama "si la igualdad", que la rama de si el "cero" de bandera.

Pero los programadores que necesitan mucho más banderas en sus programas. Así que le asigna bytes para la tarea, y que la dirección de cada uno de los bits mediante el enmascaramiento de los demás Y por-ción de los bytes con una máscara de bits.

los campos de bits
Esto era un poco torpe, y especialmente con el lenguaje de alto nivel, algo más de los avances que se necesitaba. C permite definir los campos de bits que se pueden abordar directamente en su código:

struct packed_struct {
     unsigned int f1:1;
     unsigned int f2:1;
     unsigned int f3:1;
     unsigned int f4:1;
     unsigned int type:4;
     unsigned int funny_int:9;
} pack;

Tenga en cuenta que usted no puede simplemente definir los bits de los campos, sino también a grupos de varios bits, 4 bits y 9 bits en el ejemplo.

bits de bandas
Internamente el código de C todavía será compilado en código que utiliza máscaras para llegar a 1 bit en particular, por lo que todavía no es muy eficiente. El ARM Cortex-M3 tiene una solución para esto. Tiene 4 GB de espacio de direccionamiento, la mayoría de los cuales no se utiliza. Por lo tanto, utilizan parte de ella, para lo que se denomina bit de bandas.

enter image description here

Esto significa que partes de la memoria y de e/S tienen copias a 1 bit por cada dirección, en otros lugares de la memoria. De 1 mb de SRAM poco región de la banda tiene 32 Mb, y cada uno de estos se asignan a una de 32 MB de dirección en el bit de bandas de bloque. Así que el enmascaramiento no es necesario.

Leer más
LPC17xx Manual de Usuario en NXP.

2voto

Frans Puntos 1972

Un registro es normalmente una palabra (es decir, podría ser de 8, 16, 32, 64 bits) de longitud y se utiliza como una práctica ubicación de los datos de la CPU. Normalmente los datos de ubicación a la que pueda acceder el más rápido por la CPU. Algunas arquitecturas declarar todos los registros de la misma y de los demás (por ejemplo, Intel) tienen diferentes registros que se supone que son para ciertas operaciones (por ejemplo, el registro AX es para la acumulación de valores después de una operación matemática). Algunas arquitecturas no registros de uso (sólo usan la pila... ejemplos notables son la RS600 y la JVM).

Una Bandera es la ubicación de los datos de similar a un registro, pero se utiliza de manera diferente. En lugar de la CPU utilizando todos (o a veces la mitad) en el registro, sólo un bit a la vez se utiliza cuando se produzca un determinado evento (por ejemplo, adición de desbordamiento).

Un campo de bits es una construcción de programación y (al mejor de mi conocimiento) no es parte de la arquitectura de la CPU. Es una manera útil para construir una palabra valores que puede empujar a un registro. Piense en ello como una matriz, que permite acceder a cada uno de los bits de la palabra.

2voto

reconbot Puntos 1670

Un registro puede significar un registro de CPU, o registro de e/S y control de hardware.

Los registros de la CPU para guardar los valores que son parte de la corriente de la computación. Se puede acceder muy rápidamente, pero hay sólo unos pocos de ellos.

Registros de Hardware son normalmente asignada a la memoria (aunque para x86 hay una dirección de e/S espacio para ellos), de modo que se accede a ellos como RAM en una cierta dirección (la dirección podría ser el valor hexadecimal que mencionas). Contrariamente a la memoria RAM que no sólo almacenar datos, sino que se debe pensar en un acceso de lectura o escritura como una acción en el hardware, dependiendo del registro (leer en la hoja de datos).

A menudo este tipo de hardware registros contienen más de un elemento. Un artículo puede ser de un solo bit, en este caso se llama a menudo una bandera. Un campo de bits que es una unidad se compone de varios bits, ya sea para almacenar un número pequeño o para elegir entre más de dos alternativas.

Los campos de bits en C permiten pack de varios pequeños números en la palabra de máquina. Pero cuidado, el orden depende de la implementación, por lo que la mayoría de las veces no es una buena idea usar C campos de bits para acceder a los campos de bits en los registros. Mejor usar el cambio de marchas y el enmascaramiento. (Es aceptable el uso de la C, los campos de bits si el compilador/hardware combinación explícitamente apoya, a pesar de que todavía puede causar problemas de portabilidad a otros compiladores.)

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