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

As instruções aritméticas apresentadas nesta parte do tutorial são responáveis por realizar as operações de adição: ADD, ADDA, ADDI, ADDQ e ADDX.

Todas as flags do CCR sofrem alteração por essas instruções acima, exceções algumas.

Abaixo, a notação utilizada ao longo dos tópicos abordados nesta parte do tutorial:

Tab. 1: Notação utilizada
Símbolo Descrição
<-,->,= Atribuição
+ Adição
- Subtração
; Comentário
CCR
a Alterada de acordo com resultado
- Não sofre alteração
0 Sempre zero
1 Sempre um

Mais informações sobre registradores, visite Registradores e para mais informações sobre modos de endereçamento, visite Modos de Endereçamento.

Com a instrução ADD podemos realizar a operação aritmética de adição ou soma com os registradores de dados e endereço. Quando trabalhamos com registradores de endereço, a operação com byte não é aceita.

Operação
destino <- origem + destino
Endereçamento Origem
Dx, Ax, (Ax), (Ax)+, ‑(Ax), n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), absoluto.W, absoluto.L, n(PC), n(PC,Dx[.W|.L]|Ax[.W|.L]) e #imediato
Endereçamento Destino
Dx, (Ax), (Ax)+, ‑(Ax), n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), absoluto.W, absoluto.L 
Tamanho do dado
Byte(Dx apenas), Word e Longword
CCR
X: C
N: a
Z: a 
V: a
C: a; 1 se houver "vai um", 0 caso contrário
Sintaxe
ADD.B Dx,Dy ; 
ADD.L  (Ax),Dx
ADD.W -(Ax),Dx
ADD.B (Ax)+,Dx
ADD  $absoluto.L,Dx
Exemplo:
; D0 = 00000001 D1 = 00000001
ADD.B D0,D1;
; D0 = 00000001 D1 = 00000002
    
ADD.L  (A0),D2
ADD.W -(A1),D3
ADD.B (A3)+,D4
ADD.W  $FFFF,D5

A instrução ADDA funciona de forma semelhante à instrução ADD, porém trabalha apenas com registradores de endereço e não altera as flags contidas no CCR.

Operação
destino <- origem + destino
Endereçamento origem
Dx, Ax, (Ax), (Ax)+, ‑(Ax), n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), absoluto.W, absoluto.L, n(PC), n(PC,Dx|Ax) e #imediato
Tamanho dos dados
Word e Longword
CCR
X: -
N: -
Z: -
V: -
C: -
Sintaxe
ADDA Ax, Ay ; 
ADDA.L  (Ax), Ay
ADDA.W -(Ax), Ay
ADDA $absoluto.L, Ay
Exemplo:
; A0 = 00000001 A1 = 00000001
ADDA A0,A1;
; A0 = 00000001 A1 = 00000002
    
ADDA.L  (A0),A2
ADDA.W -(A3),A4
ADDA.W  $FFFF,A5

A instrução ADDI é semelhante a instrução ADD, mas utiliza um valor imediato como operando de origem.

Operação
destino <- imediato + destino
Endereçamento Origem
#imediato
Endereçamento Destino
Dx, (Ax), (Ax)+, ‑(Ax), n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), absoluto.W, absoluto.L 
Tamanho do dado
Byte, Word e Longword
CCR
X: C
N: a
Z: a 
V: a
C: a; 1 se houver "vai um", 0 caso contrário
Sintaxe
ADDI.B #imediato,Dy ; 
ADDI.W #imediato,Dx
ADDI.L #imediato,(An)
ADDI.W #imediato,$FFFF00
Exemplo:
; D0 = 00000001 D1 = 00000001
ADDI.W #FFFE,D1;
; D0 = 00000001 D1 = 0000FFFF
    
ADDI.L #$00001234,D2
ADDI.W #$1234,D3
ADDI.B #12,D4
ADDI.W #$FFFF,D5

Com instrução ADDQ também é semelhante a instrução ADD, mas um valor imediato de 8-bits entre 1 e 7 é utilizado como valor imediato.

Se um registrador de endereço é utilizado, as flags do CCR não sofrem alteração. O tamanho de dado Byte não é aceito nesse caso.

Operação
destino <- #imediato(1~7)
Endereçamento Origem
#imediato
Endereçamento Destino
Dx, Ax, (Ax), (Ax)+, ‑(Ax), n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), absoluto.W, absoluto.L
Tamanho do dado
Byte, Word, Longword
CCR
X: C
N: a
Z: a
V: a
C: a ; 1 se "vai um" , 0 caso contrário
Sintaxe:
ADDQ.B #imediato,Dx
ADDQ.W #imediato,Ax
ADDQ.L #imediato,(Ax)
ADDQ.L #imediato,-(Ax)
ADDQ.L #imediato,(Ax)+
Exemplo:
; D0 = FFFFFFF0
ADDQ #$7,D0
; D0 = FFFFFFF7

; D1 = 000000FF
ADDQ.W #$1,D1
; D1 = 00000100

A instrução ADDX é semelhante a instrução ADD, mas inclui a flag Extend(X) na operação de adição como operando. Todas as flags são alteradas e suporta apenas 2 modos de endereçamento como origem e destino.

Operação
destino <- origem + destino + X
Endereçamento Origem
Dx, ‑(Ax)
Endereçamento Destino
Dx, ‑(Ax) 
Tamanho do dado
Byte, Word e Longword
CCR
X: C
N: a
Z: a 
V: a
C: a; 1 se houver "vai um", 0 caso contrário
Sintaxe
ADDX.B Dx,Dy
ADDX.W Dx,Dy
ADDX.W -(Ax),-(Ax)
Exemplo:
;...
MOVE #3,D0 ; 4 bytes
;A1 = byte fim valor 1
;A2 = byte fim valor 2
loop:
    ADDX -(A1),-(A2)
DB D0, loop
;...
  1. 05/09/2024 - Revisão 1 - Correção em erros gramaticais e na descrição de ADDQ.
  2. 11/03/2024 - versão inicial