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.