Una de las partes más importantes de un procesador son sus registros. En este apartado aprenderemos como programar estos registros en lenguaje assembler. Para el caso de la raspberry PI4b, su procesador tiene 31 registros que pueden ejecutar instrucciones de 32 bits, como también instrucciones de 64 bits.

 

Toda la electronica basada en microcontroladores y procesadores comenzo na decada de 1960 y 1970 con procesadores basados en registros de 8 y 16 bits. En la decada de 1990 y 2000 la electronica comenzo a basarse en procesadores con registros de 32 bits. Ya en la decada de 2010 y 2020, comienza el aparecemiento de microcontroladores y procesadores con registros de 64 bits. Tal es el caso de la tarjeta Rasberry Pi4B, la cual tiene un conjunto de instrucciones para 64 bits. La Raspberry Pi4B puede ejecutar procesamento en 32 y 64 bits.

 


| Clique na imagem para ampliar |

 

 

En este capitulo nos centraremos en las instrucciones de 64 bit, por que son, las que se van ha usar mas en el futuro. Esto se debe, al hecho de que los sistemas electronicos, cada vez exigen de sensores con mayores capacidad de procesamiento, como por ejemplo: sensores de huellas dactilares, reconocimiento de rostros, analisis de imágenes, uso de camaras, procesamiento de bases de datos, inteligencia artificial, etc.

 

La siguiente imagen muestra la parte interna del procesador o cpu de de la Raspberry Pi4B. Observemos que dentro de sus partes mas importantes estan: la memoria de programa, la memoria de datos, los registros, la unidada arimetica y logica. Asi en este capitulo veremos los registros, como mostrado en la siguiente imagen:

 


| Clique na imagem para ampliar |

 

 

Para entender los registros de 64 bits de la tarjeta Raspberry Pi4B, es necesario entender los de 8 bits, ya que los de 64 bits, son iguales, con la diferencia de poder almacenar más información. En electrónica digital existe un circuito llamado flip-flop tipo D o data, este circuito almacena información tras recibir un pulso digital. La siguiente figura muestra un esquema de este circuito. Lo que hace este circuito es leer el nivel lógico presente en la entrada D y cuando se recibe un pulso por la entrada Clock, almacenarlo en la salida Q.

 


 

 

 

La siguiente figura muestra un ejemplo del circuito, en un determinado estado, antes de recibir un pulso en la entrada Clock . En este estado, la salida Q está a nivel lógico 1 (alto) y la entrada a nivel lógico 0 (bajo).

 


 

 

Ahora, si damos un pulso positivo (alto) en la entrada de Clock, el nivel lógico presente en la entrada D, pasa a ser almacenado en el flip-flop y su valor es presentado en la salida Q. Esto lo podemos ver en la siguiente figura:

 


 

 

Ahora, podemos formar un circuito que tenga 8 flip-flops tipo D y el circuito lo representa la siguiente figura:

 


 

 

 

 Tenemos 8 entradas D y 8 salidas Q independientes. El Clock está en paralelo para los 8 flip-flops. El funcionamiento es exactamente igual para los 8 flip-flops, como explicado anteriormente para un solo flip-flop. A este tipo de circuito se le llama Registro. La siguiente figura muestra un ejemplo en un posible estado de este circuito, antes de recibir un pulso por la entrada Clock.

 


 

 

 La siguiente figura muestra el circuito después de recibir un pulso positivo en la entrada Clock. Los valores son almacenados en las salidas Q.

 


 

 

 Así, podemos almacenar datos o información digital. Existen varios circuitos digitales que incorporan varios flip-flops y siguen el funcionamiento anteriormente explicado.

Para formar un set de registros, podemos unir varios flip-flops, organizados como muestra la siguiente figura.

 


 

 

 Los datos son colocados en las entradas D0, D1, D2, D3, D4, D5, D6, D7. Los datos son almacenados en el respectivo grupo de flip-flops y mostrados o sacados por las salidas Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7. Gracias a que todas salidas Q se encuentran en alta impedancia, es decir una alta resistencia, no hay problemas con corto circuito y solamente el registro seleccionado estará presente en las salidas Q. Así, podemos formar un set de registros. Para el caso del la Raspberry PiB4, tenemos un conjunto de 31 de registros de 64 bits.

Entonces, como fue estudiado, la base de los registros en cualquier microprocesador o microcontrolador es el circuito: “flip-flop”:

 


 

 

 

Pero en los libros y manuales electrónicos, la representación del flip-flop se resume a una caja cuadrada como mostrado en la siguiente imagen:

 


 

 

 

Esta representación permite resumir los dibujos y esquemas cuando nos referimos a registros en un procesador. La siguiente figura muestra dos “flip-flops” y sus respectivas representaciones simplificadas:

 


| Clique na imagem para ampliar |

 

 

 


 

 

 

La siguiente figura muestra un registro de 8 “flip-flops”, en su representación resumida:

 


 

 

 

La siguiente figura muestra un registro de 64 “flip-flops”, en su representación resumida:

 


| Clique na imagem para ampliar |

 

 

Podemos observar que el registro tiene 64 “flip-flops”. Normalmente, se llaman registro de 64 bits y se le da un valor o peso aritmético de izquierda para derecha, como se muestra en la siguiente figura:

 


| Clique na imagem para ampliar |

 

 

Para un mejor manejo a la hora de leer o escribir valore binarios en un registro de 64 bits, estos se dividen en “nibbles”. Un “nibble” equivale a 4 bits, como mostrado en la siguiente figura:

 


| Clique na imagem para ampliar |

 

 

El procesador BCM2711 tiene 31 registros de 64 bits. La siguiente figura muestra todos estos registros con sus respectivos “flip-flops” resumidos:

 


 

 

 

Es importante notar que el primer “flip-flop” o bit, el cual se encuentra del lado derecho de la imagen, ocupa el lugar “0” y el ultimo bit el lugar 63. Observa la siguiente imagen donde se han dividido los registros en nibbles:

 


 

 

 

En la práctica, es incómodo trabajar con números binarios de 64 bits, pues es difícil saber exactamente, un bit, en que posición se encuentra al ser escritos en un editor, por este motivo, los nibbles de un registro de 64 bits, se escriben en notación: “hexadecimal”. Los valores hexadecimales son: “0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F”. La siguiente figura muestra los valores binarios y sus respectivos valores en hexadecimal:

 


| Clique na imagem para ampliar |

 

 

Es necesario acostumbrarnos a esta tabla, pues, aunque es muy sencilla de entender es usada ampliamente en electrónica y sistemas de cómputo.

 

 

SIMULANDO LAS INSTRUCCIONES PARA REGISTROS EN EL SIMULADOR GRAFICO

 

Como visto en el capítulo anteriormente, vaya hasta la carpeta o pasta donde se encuentra el simulador y ejecútelo en un navegador como mostrado en la siguiente imagen:

 


| Clique na imagem para ampliar |

 

 

En el editor vamos a escribir las instrucciones. La primera instrucción que es necesario aprender es:

 

Mover un valor a un determinado registro.

 

Esto se hace con la instrucción:

 

MOVZ

 

Seguida del Registro. Los registros van desde:

 

X0 hasta X27

 

Seguida del valor que se desea almacenar en el registro. Para valores en hexadecimal es necesario anteponer: “0x”. Por ejemplo:

 

0x3F

 

Una instrucción completa para mover o almacenar un valor en un registro seria:

 

MOVZ X1,0x3F

 

Observa: es necesario separar el nombre del registro y el valor que se desea almacenar, por una coma “,”.

Con esta información, ya podemos comenzar a escribir instrucciones en assembler, en el editor del simulador. Para comenzar vamos a escribir la instrucción antes mencionada y ejecutarla. Escribe la instrucción en el editor como mostrado en la siguiente figura:

 


| Clique na imagem para ampliar |

 

 

Después de escrita la instrucción, es necesario ensamblar la instrucción. Para esto presione el botón: “Assemble”, como mostrado en la siguiente imagen:

 


| Clique na imagem para ampliar |

 

 

Por último, presione el botón: “Execute Instruction”, como mostrado en la siguiente imagen:

 


| Clique na imagem para ampliar |

 

 

Ahora ya podemos observar los cambios en los registros. Observa la siguiente imagen:

 


 

 

 

Como podemos observar el registro X1 esta cargado con el valor: 0x3f.

Vamos a realizar otro ejemplo:

Almacenar en el registro: X1 el valor: 0X3F y almacenar en el registro: X5 el valor: 0X21.

Para esto escribe las instrucciones como mostrado en la siguiente imagen:

 


| Clique na imagem para ampliar |

 

 

Ensambla y observa los resultados en el conjunto de registros como mostrado en la siguiente imagen:

 


| Clique na imagem para ampliar |

 

 

Ahora, en el editor vamos a escribir la instrucción para:

 

Mover un registro para otro registro.

 

Esto se hace con la instrucción:

 

MOV

 

Seguida del registro que recibirá el valor. Los registros van desde:

 

X0 hasta X27

 

Seguida del registro que dará el valor. Los registros van desde:

 

X0 hasta X27

 

Una instrucción completa para mover un registro para otro, seria:

 

MOVZ X1, X3

 

 

Esta instrucción dice: copiar el contenido del registro X3 para el registro X1. Observa: es necesario separar los nombres de los registros, por una coma “,”.

Vamos a hacer un ejemplo con esta instrucción. Vamos a mover al registro X6 el valor: 0XC7. Después, vamos a mover al registro X3 el valor: 0X72. Luego vamos a mover el valor del registro X3 para el registro X1. El programa en assemble sería el siguiente:

 


| Clique na imagem para ampliar |

 

 

Observa los resultados en el simulador:

 


| Clique na imagem para ampliar |

 

 

 

Conclusión

Podemos notar que escribir instrucciones en los registros del procesador de la Raspberry Pi4B es relativamente sencillo. Se puede experimentar en el simulador muchas posibilidades con relación a sus registros. La instrucción de mover valores a los registros y mover registros para registros, son muy usadas en programación y electrónica, pues como veremos mas adelante, los puertos de entrada/salida de la Raspberry Pi4B, son muy similares a los registros.

 

 

 

Buscador de Datasheets



N° de Componente