Por que foi criado o conjunto de instruções do ARM Thumb?
O conjunto de instruções do ARM Thumb foi criado para aumentar o desempenho, e reduzir o tamanho dos programas compilados, para tornar os processadores ARM mais competitivos com outras arquiteturas, particularmente para aplicações de microcontroladores onde o espaço do programa é crítico.
Porque os processadores ARM originais eram todos de 32 bits, as instruções originais do ARM também eram todas de 32 bits (quatro bytes) - em comparação com o conjunto de instruções x86, que tem instruções de comprimento variável variando de um byte a 15 bytes.
O conjunto inicial de instruções Thumb era apenas uma versão comprimida de um subconjunto do conjunto de instruções original. Se um processador suporta ambos, apenas um pode estar ativo. Embora sejam conjuntos de instruções diferentes, as instruções de 32 bits e o conjunto de instruções Polegar podem ser representados usando a mesma linguagem de montagem. For example, the instruction
- ADDS R0, R1, R2
can be compiled to ARM (E0910002 / 11100000 10010001 00000000 00000010) or Thumb (1888 / 00011000 10001000). Claro, eles executam a mesma função (adicione r1 e r2 e armazene o resultado em r0), mesmo que tenham codificações diferentes.
Na execução, as instruções do Thumb de 16 bits são descomprimidas de forma transparente até instruções ARM completas de 32 bits em tempo real, sem perda de performance.
O código Thumb é tipicamente 65% do tamanho do código ARM, e fornece até 160% do desempenho do código ARM de 32 bits.
No entanto o conjunto de instruções Thumb original não cobria todo o conjunto de instruções ARM de 32 bits - era um subconjunto. Thumb 2 introduziu instruções mistas de 16/32 bits, o que permite que um processador fique no modo Thumb o tempo todo (ou mesmo eliminar o conjunto original de instruções ARM de 32 bits, como é feito nos processadores ARM Cortex-M usados em sistemas embarcados).
Artigos semelhantes
- Quais são as vantagens e desvantagens das instruções do polegar em relação às instruções de 32 bits do ARM?
- Qual é a diferença entre uma instrução LDM e uma instrução VLDM na arquitetura do conjunto de instruções ARM?
- Porque é que você precisa de uma licença do ARM para projetar uma CPU ARM? Como são protegidos os conjuntos de instruções?
- Se AMD e Intel compartilham o mesmo conjunto de instruções, por que o desempenho de uma CPU Intel em jogos 1080p ainda é melhor que o do Ryzen?