Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.

  1. Formato e Tamanho de instruções
  2. Tabela de Condições

As informações apresentadas nesta parte do tutorial, em relação ao formato das instruções, não são necessárias para o estudo da linguagem assembly ARM, exceto a tabela de condições, sendo apresentadas apenas como complemento e introdução às instruções que serão estudadas.

A arquitetura arm v4 possui ao todo 21 formatos de instruções que compreendem os grupos: processamento de dados, multiplicação, movimentação de dados, branch, load e store, swap, coprocessador e interrupção de software.

As instruções ARM tem um tamanho de 32-bits e são divididos em partes como mostrado no exemplo abaixo. Essas partes mudam de acordo com o grupo de instrução, modo de endereçamento e outros.

Tab. 1: Exemplo de instrução
31..28 27 26 25 24..21 20 19..16 15..12 11..0
cond 0 0 I opcode S Rn Rd shift_op
Onde
  1. cond: condição para execução
  2. I: modo de endereçamento
  3. opcode: código da instrução
  4. S: atualização de flags
  5. Rn: Primeiro operando
  6. Rd: Registrador de destino
  7. shift_op: segundo operando

Essas partes mudam de acordo com o grupo de instrução, modo de endereçamento e outros. Em modos de endereçamento e quando as instruções forem abordadas, mais formatos serão vistos.

Em todos os 21 formatos mencionados, o campo cond está presente. Esse campo informa as condições que são previamente verificadas para que a instrução seja executada respeitando a tabela abaixo:

Tab. 2: Valores cond
cond Sigla Significado Flags
0000 EQ Igual Z = 1
0001 NE Não Igual Z = 0
0010 CS/HS Carry Set / Maior ou Mesmo: unsigned C = 1
0011 CS/LO Carry Clear/ Menor - unsigned C = 0
0100 MI Menos/ Negativo N = 1
0101 PL Positivo/Positivo ou Zero N = 0
0110 VS Overflow set V = 1
0111 VC Overflow clear V = 0
1000 HI Maior - não sinalizado C = 1 e Z = 0
1001 LS Menor ou Mesmo - unsigned C = 0 e Z = 1
1010 GE Maior ou Igual (N = 1 e V=1) ou (N=0 e V=0)
1011 LT Menor (N = 1 e V=0) ou (N=0 e V=1)
1100 GT Maior Z=0 e ((N=1 e V1) ou N=0 e V=0))
1101 LE Menor ou Igual Z=1 ou ((N=1 e V=0) ou (N=0 e V=1))
1110 AL Sempre/Always -
1111 NV Nunca/Never -

O termo unsigned, em algumas condições acima, faz referência a valores não-sinalizados. As outras condições são para valores sinalizados ou não levem em consideração apenas as flags.

Como exemplo do uso do campo cond uma instrução em assembly pode seguir o formato apresentado abaixo:

Exemplo

<mnemonic>{cond} Rd, Rn
MOVEQ R0,R1 ;R0 <- R1

  1. 27/01/2025 - versão inicial