# Arquitetura do Conjunto de Instruções (ISA)

Possui conjunto de instruções simples com 56 instruções. De modo geral, é um subconjunto Thumb (do inglês, *Thumb Instruction Set Architecture*) que inclui a tecnologia [Thumb-2](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0338g/ch01s02s01.html) \[3]. A maioria das instruções são de 16 bits, as demais possuem 32 bits. Embora possua instruções com tamanhos diferentes, ainda é classificado como RISC (do inglês, *Reduced Instruction Set Computing*) \[2].

De fato, a operações *load-store* podem aumentar a quantidade de instruções utilizadas para realizar um determinado procedimento. No entanto, o tamanho das instruções e as operações realizadas ainda garantem alta densidade de código \[2,3].

Embora simples, o conjunto de instruções aumenta aproximadamente 30% a densidade de código. Isso, é claro, afeta o desempenho, sendo 20% menor que um código composto somente por instruções ARM \[2].

## Conjunto de Instruções

A seguir são destacadas as instruções de 16 bits do subconjunto Thumb. É importante destacar que o conjunto de instruções Thumb é subconjunto de instruções ARM (32 bits). Para conferir todas operações realizadas na execução das instruções, consulte esta referência: [The Cortex-M0+ Instruction Set](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0419c/index.html).

* Load-Store: LDM LDR LDRH LDRSH LDRB LDRSB STR STRH STRB STM;
* Movimentação de dados entre registradores: MOV;
* Adição, Subtração e Multiplicação: ADC ADD ADR SUB RSB SBC MUL;
* Lógica: AND, EOR, ORR, BIC, TST, MVN;
* Deslocamento e Rotação: ASR LSL LSR ROR;
* Operações de pilha: POP PUSH;
* Desvio: B BX BLX;
* Comparação: CMN CMP;
* Extensão de bits: SXTB SXTH UXTB UXTH;
* Swap: REV REV16 REVSH;
* Hint: SEV WFE WFI YIELD NOP BKPT;
* Alteração de estado: CPS SVC.

**Instruções de 32 bits**

* Barriers: DSB DMB ISB;
* Desvio: BL;
* Alteração de estado: MRS;
* Hint: MSR.

{% hint style="info" %}
***Barriers:** Instruções que ordenam a CPU a executar as operações iniciadas antes de prosseguir com as instruções subsequentes.*
{% endhint %}

{% hint style="info" %}
***Hint:** Instruções que notificam o processador sobre determinado estado.Por exemplo, a instrução YELD sinaliza que o contexto atual está pode ser trocado. Assim o processador pode tomar a ação de alterar o contexto. Já a instrução WFI faz com que o processador entre em modo sleep até que ocorra um evento.*
{% endhint %}

## Ciclo de Instrução

O ciclo de instrução é executado por um pipeline de dois estágios. Tal característica implica na redução de elementos de memória e consequentemente no consumo de energia \[1].

{% hint style="info" %}
***Pipeline:** O pipeline é caracterizado por permitir que o ciclo de instrução seja realizado em série para mais de uma instrução. Para tal, o ciclo de instrução é dividido em estágio. No caso de dois estágios, uma instrução é buscada na memória ao mesmo tempo que a atual está sendo executada.*
{% endhint %}

![](https://www.embarcados.com.br/wp-content/uploads/2018/07/Pipeline.png)

O pipeline contribui para o desempenho do sistema, pois reduz em um ciclo de clock a penalidade de instruções de desvio. Isto é, se uma instrução de desvio é executada, somente a instrução subsequente é ignorada (2 estágios).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bit-by-bit.gitbook.io/embedded-systems/processadores-cortex-m0+/arquitetura-do-conjunto-de-instrucoes-isa.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
