representarse representar que pueden podemos para numeros numero necesitan necesarios hasta estados cuantos contar con arm decoding armv7 cortex-m3 opcodes

arm - que - cuantos numeros se pueden representar con 4 bits



¿Cómo determinar si una palabra(4 bytes) es una instrucción de 16 bits o de 32 bits? (1)

En Thumb, las instrucciones de "32 bits" todavía se componen de dos halfwords separadas, por lo que la "primera media palabra" es la primera media palabra de la codificación , que no dice nada sobre el diseño en la memoria. Las instrucciones de pulgar están alineadas a media palabra, por lo que cualquier palabra de memoria podría contener dos instrucciones de 16 bits, una instrucción de 16 bits y la mitad de una instrucción de 32 bits, dos mitades de dos instrucciones diferentes de 32 bits o una 32 instrucción de bit.

Conceptualmente, el procesador decodifica una media palabra a la vez, por lo tanto, si ve uno de los patrones de bits anteriores, sabe que necesita decodificar la siguiente media palabra antes de que pueda ejecutar realmente esta instrucción. La realidad lo complica un poco, ya que Cortex-M3 / M4 solo obtiene palabras completas de 32 bits de la memoria , por lo que la correlación entre el número de " recuperaciones de instrucción" y el número de instrucciones realmente decodificadas y ejecutadas depende del código en sí. Imagínense que esas adquisiciones son rellenar un búfer de 4 bytes del que el pipeline sorbe cada media palabra (lo que puede que no esté tan lejos de la verdad, por lo que sé).

Entonces, si tiene una palabra semántica que contiene uno de esos valores en sus bits superiores, entonces sabe que es la primera mitad de una codificación de 32 bits, y necesita interpretarla junto con la siguiente media palabra. Por el contrario, si tiene una semi-palabra con cualquier otro valor en sus bits superiores, entonces es una codificación de 16 bits, o la segunda mitad de una codificación de 32 bits, dependiendo de lo que fue la media palabra previa.

Tenga en cuenta que las instrucciones son siempre little-endian, por lo que el diseño en memoria real de una codificación de 32 bits se ve así, donde la dirección A es un número par:

-------------------------------- address A | bits 7:0 of first halfword | -------------------------------- A+1 | bits 15:8 of first halfword | -------------------------------- A+2 | bits 7:0 of second halfword | -------------------------------- A+3 | bits 15:8 of second halfword | --------------------------------

¿Cómo puedo saber si los bytes en la palabra representan una instrucción de 16 bits o una instrucción de 32 bits?
Remití el ARMv7M ARM y no tengo claro cómo distinguir si es una instrucción de 16 bits o una instrucción de 32 bits.
Dice
If bits [15:11] of the halfword being decoded take any of the following values, the halfword is the first halfword of a 32-bit instruction:
• 0b11101 • 0b11110 • 0b11111. Otherwise, the halfword is a 16-bit instruction

¿Significa que el procesador siempre busca media palabras, las examina y decide si son 16 o 32 bits?
¿Qué significa la primera media palabra? Bit [31-16] o Bit [15-0] en una palabra?

Si tengo 32 bits, ¿puedo saber si se trata de una instrucción de 32 bits o una instrucción de 16 bits?

Gracias.