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

4

En la escuela, estaba acostumbrado a programar varios registros cuando trabajaba con microcontroladores para manipular su comportamiento. En mi trabajo, los registros ahora se denominan puramente como campos de bits. La palabra "registro" solo se usa para referirse a un valor hexadecimal, que supongo es la ubicación de la dirección. Las palabras "campos de bits" se utilizan para indicar la parte del registro que corresponde a una cierta funcionalidad de nuestro producto. Mirando la documentación de Atmel aquí (página 3), indican que 2 registros más pequeños conforman un registro más grande. Este documento de wiki indica que los bits se refieren a las marcas. Supongo que estoy confundido en la nomenclatura. ¿Existe un estándar de la industria para definir cuáles son las diferencias entre los términos o cuándo deben usarse?

    
pregunta thomas.cloud

3 respuestas

6

registros
Creo que te refieres a este dibujo:

Elarchivoderegistroesunamatrizde32registrosdepropósitogeneralqueresidenenlaCPUdelAVR.LosregistrosestánacopladosestrechamenteconlaALU(unidadaritméticaylógica)paraquelasoperacionesenlosdatosderegistrosepuedanrealizarmuchomásrápidoquelosdatosquesedebenrecuperardelaRAM(externa).Unmicrocontroladortendrámodosdedireccionamientoespecialesparatrabajarconlosregistros.Sideseaagregar5aunavariableenlaRAM,lainstruccióndeberáincluirladireccióndelaRAM,paralacualpuedenecesitar16bits.Dadoqueelarchivoderegistrosolotiene32bytes,solonecesita5bitsparadireccionarunregistro,yelconjuntodeinstruccionesestádiseñadodetalmaneraqueestos5bitsseajustenalcódigodeoperacióndelainstrucciónenunainstrucciónde16bits.Asíquenoserequiereunasegundabúsquedadeladirección.

Esoesloquemuestraeldibujo:lainstrucciónesde16bitsdeancho,y5bitsdeesoeseldesignadorderegistro.Inclusofueronunpasomásallá.Hayinstruccionesqueoperanendosregistros,ynuevamenteconstruyeronlasinstruccionesdetalmaneraquelosdosdesignadoresderegistroencajenenlainstrucciónde16bits,porloquedenuevosoloserequiereunabúsqueda.

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

marcas
Los indicadores son datos de un solo bit que indican algún estado: activado o desactivado, verdadero o falso.

EsteeselmodelodeprogramacióndelbuenviejoMC6809(unhermosomicroprocesador,quehacemásde30añosestabamuyadelantadoasutiempo).Elregistrodecódigosdecondiciónconstade8indicadores,connombrescomo"cero", "llevar", "desbordamiento", "máscara IRQ", etc. No accedería a estos bits directamente como a otro registro, sino que los usaría para obtener instrucciones de ramificación condicionales , como BEQ , para "rama si es igual", que se ramificará si se establece el indicador "cero".

Pero los programadores necesitaban muchas más banderas en sus programas. Así que asignaron bytes para la tarea, y direccionarían bits individuales al enmascarar a los otros mediante el ANDteo del byte con una máscara de bits.

campos de bits
Esto fue un poco torpe, y especialmente con un lenguaje de nivel superior, se necesitaba algo más de avances. C le permite definir campos de bits que puede 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 no solo puede definir campos de un solo bit, sino también grupos de varios bits, como 4 bits y 9 bits en el ejemplo.

bandas de bits
Internamente, el código C todavía se compilará en un código que utiliza las máscaras para obtener 1 bit en particular, por lo que aún no es muy eficiente. El ARM Cortex-M3 tiene una solución para esto. Tiene un espacio de direccionamiento de 4 GB, la mayoría de los cuales no se utiliza. Así que usan parte de eso para lo que se llama bandas de bits .

SignificaquepartesdelamemoriayE/Stienencopiasa1bitpordirecciónenotrapartedelamemoria.LaregióndelabandadebitsSRAMde1MBcontiene32Mb,ycadaunadeellasseasignaaunadirecciónde32MBenelbloquedebandadebits.Asíqueyanoesnecesarioenmascarar.

Lecturasadicionales
LPC17xx User Manual en NXP.

    
respondido por el stevenvh
4

Un registro suele tener una palabra (es decir, podría tener una longitud de 8, 16, 32, 64 bits) y se utiliza como una ubicación de datos útil para la CPU. Por lo general, es la ubicación de datos a la que la CPU puede acceder más rápido. Algunas arquitecturas declaran que todos los registros son iguales y otros (por ejemplo, Intel) tienen registros diferentes que se supone que son para ciertas operaciones (por ejemplo, el registro AX es para acumular valores después de una operación matemática). Algunas arquitecturas no usan registros en absoluto (solo usan la pila ... los ejemplos notables son el RS600 y la JVM).

Una bandera es una ubicación de datos similar a un registro pero se usa de manera diferente. En lugar de que la CPU utilice todo (o, a veces, la mitad) del registro, solo se utiliza un bit a la vez cuando se produce un evento determinado (por ejemplo, desbordamiento de adición).

Un campo de bits es una construcción de programación y (según mi conocimiento) no es parte de la arquitectura de la CPU. Es una forma útil de construir valores de una palabra que puede insertar en un registro. Piense en ello como una matriz que le permite acceder a cada parte de la palabra.

    
respondido por el Jato
2

Un registro puede significar un registro de CPU o un registro para E / S y control de hardware.

Los registros de CPU son para almacenar valores que forman parte del cálculo actual. Se puede acceder a ellos muy rápidamente, pero solo hay unos pocos.

Los registros de hardware suelen estar asignados a la memoria (aunque para x86 hay un espacio de direcciones de E / S separado para ellos), por lo que se accede a ellos como RAM en una dirección determinada (la dirección puede ser el valor hexadecimal que menciona). Al contrario de la RAM, no solo almacenan datos, sino que debe pensar en un acceso de lectura o escritura como una acción en el hardware, según el registro (léalo en la hoja de datos).

A menudo, estos registros de hardware contienen más de un elemento. Un elemento de este tipo puede ser un solo bit, en este caso, a menudo se llama un flag . Un campo de bits es una unidad que consta 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 empaquetar varios números pequeños en una palabra de máquina. Pero tenga cuidado, el orden depende de la implementación, por lo que la mayoría de las veces no es una buena idea usar los campos de bits C para acceder a los campos de bits en los registros. Mejor uso de cambio y enmascaramiento. (Está bien usar los campos de bit C si la combinación compilador / hardware los admite explícitamente, aunque aún puede causar problemas de portabilidad a otros compiladores).

    
respondido por el starblue

Lea otras preguntas en las etiquetas