Arquitectura ARM: Ejecución Condicional, Barrel Shifter, Registros y Palabra de Estado

Clasificado en Informática

Escrito el en español con un tamaño de 4,38 KB

Ejecución Condicional en la Arquitectura ARM

¿En qué consiste la ejecución condicional en ARM? Ventajas y desventajas.

La ejecución condicional en ARM consiste en reutilizar el hardware de evaluación de condición con muchas instrucciones. Esto aumenta el número de instrucciones de la arquitectura. La mayor parte de las arquitecturas solo permiten la ejecución condicional de las instrucciones de salto. En ARM, todas las instrucciones tienen un código condicional que hace que la instrucción se ejecute o no, en función de la condición.

El tiempo de penalización de una instrucción NO ejecutada es menor que el de una instrucción de salto o de una de llamada a subrutina. Las instrucciones no ejecutadas computan un solo ciclo. No obstante, se deben cargar y decodificar en cualquier caso.

Objetivo de la Ejecución Condicional

  • Eliminar el uso de las instrucciones de salto: cuando se usa un salto, se produce una penalización de 3 ciclos.
  • Al reducir el número de saltos, se mejora la densidad de código.
  • Para ejecutar de forma condicional es necesario añadir el código de condición deseado.
  • Mejora la densidad de código y el rendimiento, se reduce el número de instrucciones ejecutadas y también las NO ejecutadas después de los saltos.

Desventajas de la Ejecución Condicional

La lógica de control es más difícil de implementar y es más difícil de entender para alguien externo al programa.

Ejemplo de Ejecución Condicional

Uso de una sentencia de varias instrucciones condicionales:

if (a==b) func (1);

Sin ejecución condicional:

  
    CMP R0, R1
    BNE fin_if
    MOV R0, #1
    BL func
  fin_if:
  

Con ejecución condicional:

  
    CMP R0, R1
    MOVEQ R0, #1
    BLEQ func
  

Barrel Shifter en la Arquitectura ARM

¿En qué consiste el barrel shifter? ¿Por qué ya no se usa?

Es un circuito digital que puede cambiar una palabra de datos por un determinado número de bits en un ciclo de reloj. No se usa en otras arquitecturas porque los demás procesadores tienen instrucciones de desplazamiento, mientras que ARM no las tiene de forma independiente. El barrel shifter es un registro de desplazamiento para ARM. Realiza desplazamientos como parte de la ejecución de una instrucción. Hay hasta 11 operaciones distintas: LSL, LSR, ROR, etc.

Palabra de Estado del Procesador en ARM

En arquitectura, ¿qué entiendes por palabra de estado de un procesador? ¿Qué registro se utiliza en ARM para guardar la palabra de estado del procesador durante una ejecución en modo usuario?

El registro CPSR (Current Program Status Register) almacena información sobre la ejecución de las instrucciones. Por ejemplo, en una resta, el bit N (Negative) se activa si el resultado de la operación es negativo.

Registros R13, R14 y R15 en ARM

Comenta qué registros son y para qué se usan los registros R13, R14 y R15.

  • R13 (SP): Stack Pointer (Puntero de pila). Se utiliza para gestionar la pila.
  • R14 (LR): Link Register (Registro de enlace). Almacena la dirección de retorno después de una llamada a subrutina.
  • R15 (PC): Program Counter (Contador de programa). Contiene la dirección de la siguiente instrucción a ejecutar.

Ejemplo de uso de R14 (LR):

  
    BL subrutina  ; Llama a la subrutina y guarda la dirección de retorno en R14
    ...
  subrutina:
    ...
    MOV PC, LR    ; Retorna de la subrutina usando la dirección en R14
  

Acceso a Instrucciones de Programa en ARM

Todos los registros de ARM tienen 32 bits, el PC también. Pero, ¿por qué solo se pueden utilizar los 30 bits de mayor peso para acceder a las instrucciones de programa?

Porque los dos bits de menor peso del PC en ARM están indefinidos en el modo usuario, y se utilizan para otros propósitos en modos privilegiados. Las instrucciones en ARM son de 32 bits y están alineadas a 4 bytes, por lo que los dos bits menos significativos de la dirección siempre serán 00.

Entradas relacionadas: