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

As instruções soma e subtração são utilizadas para realizar as operações aritméticas básicas de adição e subtração sobre dois registradores de uso geral.

As instruções são executadas de acordo com a condição <cond> utilizada. As flags de status N, Z, C, e V são alteradas quando o sufixo S é utilizado em uma instrução.

A ARM não define instruções para trabalhar com BCD. Sendo assim, deve-se utilizar as instruções de soma/subtração ou coprocessador para tal trabalho.

Mais informações sobre registradores, flags e condições podem ser vistas em Registradores e CPSR e Formato: Condições.

Notação utilizada
; Comentário
Rd Registrador de destino
Rn, Rm, Rs Registrador operando
[] Conteúdo/Conteúdo de memória
[Bit x: y] Conteúdo no intervalo de bits
MEM Memória
cond Condição
+, - Soma, Subtração
Flags
a Alterada de acordo com resultado
- Não sofre alteração
? Indefinido/imprevisível
! Negação

Com a instrução ADD podemos realiza a operação aritmética de adição entre dois registradores, registrador e valor imediato ou deslocamento e rotação de registrador.

Sintaxe
ADD{<cond>}{S} Rd, Rn, <endereçamento>
Operação
Rd <- Rn + <endereçamento>
Endereçamento:
#<imediato>
Rm
Rm, LSL #<deslocamento_imediato>
Rm, LSL Rs
Rm, LSR #<deslocamento_imediato>
Rm, LSR Rs
Rm, ASR #<deslocamento_imediato>
Rm, ASR Rs
Rm, ROR #<deslocamento_imediato>
Rm, ROR Rs
Rm, RRX
CPSR
N: a
Z: a 
C: a
V: a
Ex:
MOV R1, #2
MOV R2, #4
ADD R0, R1, R2 ; R0 <- 6

A instrução ADC é semelhante à instrução ADD, porém a ADC utiliza o flag C como um terceiro operando(vai-um) ao realiza a operação aritmética de adição.

Sintaxe
ADC{<cond>}{S} Rd, Rn, <endereçamento>
Operação
Rd <- Rn + <endereçamento> + C
Endereçamento:
#<imediato>
Rm
Rm, LSL #<deslocamento_imediato>
Rm, LSL Rs
Rm, LSR #<deslocamento_imediato>
Rm, LSR Rs
Rm, ASR #<deslocamento_imediato>
Rm, ASR Rs
Rm, ROR #<deslocamento_imediato>
Rm, ROR Rs
Rm, RRX
CPSR
N: a
Z: a 
C: a
V: a
Ex:
ADDS R0, R1, R2 ; R0 <- R1 + R2
ADC R3 ,R4, R5 ; R3 <- R4 + R5 + C

Usando a instrução SUB podemos realizar a operação aritmética de subtração entre dois registradores, registrador e valor imediato ou deslocamento/rotação de registrador.

Sintaxe
SUB{<cond>}{S} Rd, Rn, <endereçamento>
Operação
Rd <- Rn - <endereçamento>
Endereçamento:
#<imediato>
Rm
Rm, LSL #<deslocamento_imediato>
Rm, LSL Rs
Rm, LSR #<deslocamento_imediato>
Rm, LSR Rs
Rm, ASR #<deslocamento_imediato>
Rm, ASR Rs
Rm, ROR #<deslocamento_imediato>
Rm, ROR Rs
Rm, RRX
CPSR
N: a
Z: a 
C: a
V: a
Ex:
MOV R1, #4
MOV R2, #2
SUB R0, R1, R2 ; R0 <- 2

A instrução SBB é semelhante à SUB, porém a SBB utiliza o flag C , borrow(vem-um), como terceiro operando ao realiza a operação de subtração. Na subtração, a flag C tem a lógica inversa a da usada na adição.

Sintaxe
SBC{<cond>}{S} Rd, Rn, <endereçamento>
Operação
Rd <- Rn - <endereçamento> - !C
Endereçamento:
#<imediato>
Rm
Rm, LSL #<deslocamento_imediato>
Rm, LSL Rs
Rm, LSR #<deslocamento_imediato>
Rm, LSR Rs
Rm, ASR #<deslocamento_imediato>
Rm, ASR Rs
Rm, ROR #<deslocamento_imediato>
Rm, ROR Rs
Rm, RRX
CPSR
N: a
Z: a 
C: a
V: a
Ex:
;C = 1
MOV R1, #4
MOV R2, #2
SBC R0, R1, R2 ; R0 <- 1
  1. 10/02/2025 - versão inicial