¿Cómo un procesador ARM en estado pulgar ejecuta valores de 32 bits?

5

Lo que entiendo es que el modo ARM puede ejecutar instrucciones de 32 bits y el modo Thumb puede ejecutar instrucciones de 16 bits.

Por ejemplo,

AquíestáelconjuntodeinstruccionesARM:

Yconjuntodeinstruccionesdepulgar:

En estas dos tablas de conjuntos de instrucciones, vea el mnemotécnico de ADC que describe agregue dos valores de 32 bits y lleve . Por lo tanto, 32 bits es común en ambos modos.

Lo que no entendí es cómo un modo de pulgar que puede ejecutar 16 bits puede ejecutar un valor de 32 bits.

Me referí a los otros libros (que podría) y en esos libros también se da la misma descripción. Por favor, explíqueme este concepto / corríjame, lo cual entendí mal.

    
pregunta Krishna Shweta

5 respuestas

9

El ancho del bus de datos del procesador no tiene nada que ver con la longitud de las instrucciones.

El procesador ARM puede manipular valores de 32 bits porque es un procesador de 32 bits, sea cual sea el modo en el que se esté ejecutando (pulgar o ARM). Solo significa que sus registros tienen 32 bits de ancho. Y los registros no cambian cuando cambias de modo.

Ahora, no tiene ninguna implicación en la longitud de las instrucciones . Las instrucciones podrían estar codificadas en cualquier longitud. El x86, por ejemplo, usa instrucciones de 8 bits pero también puede trabajar con valores de 32 bits. Para ARM, esto es lo que cambia cuando se cambia a / desde los modos ARM y pulgar.

Por ejemplo, la instrucción MOV R0, R1 (copie el contenido del registro R1 de 32 bits en el registro R0) se codifica de la siguiente manera:

  • E1A00001 para BRAZO (32 bits)
  • 4608 para el pulgar (16 bits)

Pero el procesador, al final, realizará exactamente la misma operación, y lo hará en datos de 32 bits de ancho, sea cual sea el modo.

Esta capacidad de cambiar de modo simplemente le permite decidir el compromiso entre la densidad del código y la flexibilidad. Puede incluir más instrucciones en un kB de código con instrucciones de 16 bits, pero las instrucciones de 32 bits son más flexibles (ofrecen más funciones y puede hacer más con una sola instrucción).

    
respondido por el dim
4

El modo pulgar no convierte el ARM en una CPU de 16 bits.

En el modo Pulgar, la CPU usa códigos de operación de instrucciones de 16 bits en lugar de códigos de 32 bits, para reducir el uso de la memoria del programa.

Los registros, las ALU y los buses de memoria siguen siendo de 32 bits.

    
respondido por el TonyM
4

La referencia canónica para esta información es el Manual de referencia de arquitectura ARM. La situación se complica porque existen muchas versiones de este documento y muchas arquitecturas. En general, las versiones más recientes serán más completas en su formalización (ya que ahora pueden existir 16, 32 y 64 'sabores' que podrían combinarse).

Por ejemplo, DDI de ARM 0487C.a ARMv8, para ARMv8-A (editado)

  

Los estados de ejecución son:

     

AArch64 El estado de ejecución de 64 bits. Este estado de ejecución:

     
    

• Proporciona 31 registros de propósito general de 64 bits, de los cuales se usa X30     como el registro de enlace de procedimiento.

         

• Proporciona un contador de programa de 64 bits (PC), punteros de pila (SP) y     Registros de enlace de excepción (ELR).

         

• Proporciona un único conjunto de instrucciones, A64.

  
     

AArch32 El estado de ejecución de 32 bits. Este estado de ejecución:

     
    

• Proporciona 13 registros de propósito general de 32 bits y una PC de 32 bits, SP,     y enlace de registro (LR). El LR se utiliza tanto como un ELR como un procedimiento     enlace de registro.

         

Algunos de estos registros tienen varias instancias bancarias para su uso en     diferentes modos de PE.

         

• Proporciona dos conjuntos de instrucciones, A32 y T32.

  
     

En ARMv8, los conjuntos de instrucciones posibles dependen del estado de ejecución:

     

AArch64 El estado AArch64 admite solo un único conjunto de instrucciones, denominado A64. Este es un conjunto de instrucciones de longitud fija que utiliza 32 bits.   codificaciones de instrucciones.

     

AArch32 El estado AArch32 admite los siguientes conjuntos de instrucciones:

     
    

A32 Este es un conjunto de instrucciones de longitud fija que utiliza codificaciones de instrucciones de 32 bits.

         

T32 Este es un conjunto de instrucciones de longitud variable que utiliza codificaciones de instrucciones de 16 y 32 bits.

         

En la documentación anterior, estos conjuntos de instrucciones se llamaron ARM     y conjuntos de instrucciones de pulgar.

  

Críticamente, los conjuntos de instrucciones A32 y T32 se utilizan dentro de AArch32, donde los registros de propósito general son 32 bits . El bit T solo afecta la decodificación de la instrucción, seleccionando entre el conjunto de instrucciones de 32 bits o el conjunto de instrucciones de 16/32 bits mezclados.

También vale la pena señalar que cualquier documentación que haga referencia a que Thumb es un conjunto de instrucciones de 16 bits es muy antigua. Suponiendo que está estudiando ahora, en lugar de trabajar con un diseño antiguo, el subconjunto más restringido que es relevante es la arquitectura ARMv6-M y el conjunto de instrucciones implementado por el procesador Cortex-M0.

    
respondido por el Sean Houlihane
2

En términos generales, una instrucción de CPU es una secuencia particular de bits que, cuando se presenta a la CPU, significa "Agregar dos valores de 32 bits y llevar". El valor exacto de los bits en esta secuencia no tiene nada que ver con la adición de valores.

En el conjunto de instrucciones de 32 bits, esta secuencia está compuesta de 32 bits. En resumen, solo tiene 16. Obviamente, el pulgar tiene menos instrucciones (porque hay menos bits para codificarlas), pero las instrucciones que se implementan hacen exactamente lo mismo en ambos conjuntos de instrucciones.

    
respondido por el Dmitry Grigoryev
-3

Thumb-1 solo da instrucciones de 16 bits, mientras que los procesadores Thumb-2 pueden hacer ambas cosas de 16 & 32 bits ambos comparten la misma arquitectura para datos de 32 bits. Por lo tanto, uno esperaría que ambos compartan el mismo bus de datos, ya que solo están cambiando los registros de instrucciones.

Moviéndose hasta procesadores de 64 bits, Thumb puede admitir tanto 32 & Instrucciones de 64 bits con algunas diferentes en cada conjunto para ahorrar espacio de código para algunas aplicaciones, pero a expensas de bibliotecas duplicadas.

    
respondido por el Tony EE rocketscientist

Lea otras preguntas en las etiquetas