As instruções de BCD são responsáves por realizar operações aritméticas de soma e subtração com valores decimais. As instruções ABCD e SBCD serão estudadas.

A instrução de conversão, EXT, é utilizados para extender valores positivos para negativos e transformar bytes em words.

Além das instruções mencionadas acima, vamos estudar também as instruções NEG, NBCD e NEGX relacionadas a "conversão" número positivos para negativos.

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
! Complemento
ee Endereço efetivo
CCR
a Alterada de acordo com resultado
- Não sofre alteração
0 Sempre zero
1 Sempre um

Com a instrução ABCD, podemos adicionar dois registradores ou valores em memória utilizando aritmética BCD, dois dígitos entre 0-9.

Essa instrução é utilizada quando precisamos trabalhar com valores BCD sequênciais em memória com múltiplos dígitos. A adição é realizada em sequência/cascata para cada byte armazenado em memória.

Operação
destino <- destino + origem + X
Endereçamento Destino
Dx, -(Ax)
Endereçamento Origem
Dy, ‑(Ay)
Tamanho do dado
Byte
CCR
X: a
N: -
Z: a
V: -
C: a
Sintaxe
ABCD Dx, Dy
ABCD -(Ax),-(Ay)
Ex
;A0 - valor 1 byte fim
;A1 - valor 2 byte fim
MOVE.B #$3,D7 ; 4 bytes/8 digitos
adicao:
    ABCD -(A0),-(A1)
DBRA D7, adicao

Com a instrução SBCD, podemos subtrair dois registradores ou valores em memória utilizando aritmética BCD, dois dígitos entre 0-9.

Essa instrução é utilizada quando precisamos trabalhar com valores BCD sequênciais em memória com múltiplos dígitos. A subtração é realizada em sequência/cascata para cada byte armazenado em memória.

Operação
destino <- destino + origem + X
Endereçamento Destino
Dx, -(Ax)
Endereçamento Origem
Dy, ‑(Ay)
Tamanho do dado
Byte
CCR
X: a
N: -
Z: a
V: -
C: a
Sintaxe
SBCD Dx, Dy
SBCD -(Ax),-(Ay)
Ex
;A0 - valor 1 byte fim
;A1 - valor 2 byte fim
MOVE.B #$3,D7 ; 4 bytes/8 digitos
adicao:
    SBCD -(A0),-(A1)
DBRA D7, adicao

A instrução NBCD realiza a operação de complemento de 10 de um valor BCD contido em um registrador de dado ou valor em memória. A flag X é utilizada na operação como empréstimo de uma operação anterior.

As flags Z e X são resetadas no ínicio da operação e alteradas de acordo como o resultado da operação. Apenas bytes podem ser utilizado na instrução NBCD.

Para uma melhor compreensão, por exemplo, ao executarmos NBCD para o valor 02, temos seu complement 98 como resultado.

Operação
destino <- 0 - destino - X
Endereçamento Origem
-
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
CCR
X: a ; 1 se requerido, 0 caso contrário
N: -
Z: a
V: -
C: X ;
Sintaxe
NBCD (An)
NBCD -(An)
NBCD (An)+
Ex
;(A0) = 01
NBCD (A0)
;(A0) = 99

Com a instrução EXT podemos extender o sinal, bit mais significativo, de um valor Byte ou Word, contido em um registrador de dados e assim converter esse valor Byte para Word ou valor Word para Longword.

EXT copia o bit mais sigficativo e replica esse bit nos bits mais signifitivos seguintes. Para converter Byte para Word, o bit7 é replicado nos bits 8-15. Para converter Word para Longword, o bit15 é replicado nos bits 16-31.

Operação
destino.W[bit8-15] <- destino.W[bit7]
destino.L[bit16-31] <- destino.L[bit15]
Endereçamento Origem
-
Endereçamento Destino
Dx
Tamanho do dado
Word e Longword
CCR
X: -
N: a
Z: a 
V: 0
C: 0 
Sintaxe
EXT Dn
Ex
;D0 = 12345680
EXT.W D0
;D0 = 1234FF80

;D1 = 12344000
EXT.L D1
;D1 = 00004000

A instrução NEG realiza a operação de complemento de 2 de um valor contido em um registrador de dados ou valor em memória que é armazenado no operador de origem. As flags CCR são atualizadas de acordo com o resultado.

Por exemplo, aplicando o NEG ao valor 4(00000100), temos o resultado de -4(11111100).

Operação
destino <- 0 - destino
Endereçamento Origem
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: a ; 1 se resultado = 0 , 0 caso contrário
N: a
Z: a 
V: a ; 1 se houve mudança, 0 caso contrário
C: X 
Sintaxe
NEG (Ax)
NEG $FFFF
NEG (Ax)+
Ex
NEG (A0)+
NEG $FFFF00
NEG $FFFF

A instrução NEGX é semelhante a instrução NEG, porém a flag X é utilizada no cálculo do complemento como empréstimo de algum operação anterior.

Operação
destino <- 0 - destino - X
Endereçamento Origem
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: a ; 1 se resultado = 0 , 0 caso contrário
N: a
Z: a 
V: a ; 1 se houve mudança, 0 caso contrário
C: X 
Sintaxe
NEGX (Ax)
NEGX $FFFF
NEGX (Ax)+
Ex
NEGX (A0)+
NEGX $FFFF00
NEGX $FFFF
  1. 05/09/2024 - Revisão 2 - Correção em descrição de instruções, introdução e sintaxes e exemplos de NEG e NEGX
  2. 30/08/2024 - revisão 1 - Correção em link NBCD
  3. 09/04/2024 - versão inicial