As instruções lógicas são responsáveis por realizar as operações E, OU, Ou exclusivo e Não sobre os bits de um registrador ou valor de memória. Essas instruções têm como resultado 0 ou 1.

É necessário ter conhecimento sobre tabela de verdade para melhor compreender o funcionamento das instruções lógicas. Visite Tutorial C: Operadores Bit-a-bit em caso de dúvida.

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
& E bit-a-bit
| E bit-a-bit
^ OU Exclusivo
~ Não bit-a-bit
ee Endereço efetivo
CCR
a Alterada de acordo com resultado
- Não sofre alteração
0 Sempre zero
1 Sempre um

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

Com a instruções AND, aplicamos sobre os bits de um registrador de dados ou valor em memória a operação E bit-a-bit. Os bits diferentes resultam em 0 e iguais resultam em 0 ou 1. Todas as flags, exceto X, são alteradas.

A operação AND é utilizada para resetar bits utilizando valores conhecidos como máscara e possuem as 2 possibilidades de uso abaixo:

  1. 1. Origem sendo endereço efetivo(ee) e registrador de dados sendo destino
  2. 2. Origem sendo registrador de dados e endereço efetivo sendo destino
Operação
destino <- destino & origem
Endereçamento 1
Dx, (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]), #imediato
Endereçamento 2
(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: -
N: a
Z: a 
V: 0
C: 0
Sintaxe
AND ee, Dx
AND Dx,ee

Abaixo, uma demostração da aplicação da operação E bit-a-bit sobre 2 valores de 8-bits:

Tab. 1: Valor 1 - 0xCC
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 1 0 0 1 1 0 0
Tab.2: Valor 2 - 0xAA
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 0 1 0 1 0 1 0
Tab. 3: Resultado - 0x88
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 0 0 0 1 0 0 0
Ex
AND.W D7,$00008000
AND.L $00008000,D6

A instruções ANDI é semelhante a instruções AND em relação a operação E bit-a-bit, porém o operando de origem é um valor imediato.

Operação
destino <- destino & imediato
Endereçamento Origem
$imediato.B
$imediato.W
$imediato.L
Endereçamento Destino
Dx, (Ax), (Ax)+, -(Ax), n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), absoluto.W, absoluto.L, SR e CCR
Tamanho do dado
Byte, Word e Longword
CCR
X: -
N: a
Z: a 
V: 0
C: 0
Sintaxe
ANDI #$imediato, Dx
AND #$imediato,(An)
Ex
ANDI.W #$02,D5
ANDI.L $00008000,D6

Com a instruções OR, aplicamos sobre os bits de um registrador de dados ou valor em memória a operação bit-a-bit OU lógico. Os bits diferentes resultam em 1 e iguais resultam em 0 ou 1. Todas as flags, exceto X, são alteradas.

A operação OR é utilizada para setar bits utilizando valores conhecidos como máscara e possuem as 2 possibilidades de uso abaixo:

  1. 1. Origem sendo endereço efetivo(ee) e registrador de dados sendo destino
  2. 2. Origem sendo registrador de dados e endereço efetivo sendo destino
Operação
destino <- destino | origem
Endereçamento 1
Dx, (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]), #imediato
Endereçamento 2
(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: -
N: a
Z: a 
V: 0
C: 0
Sintaxe
OR ee, Dx
ORI Dx, ee

Abaixo, uma demostração da aplicação da operação OU bit-a-bit sobre 2 valores de 8-bits:

Tab. 4: Valor 1 - 0xCC
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 1 0 0 1 1 0 0
Tab.5: Valor 2 - 0xAA
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 0 1 0 1 0 1 0
Tab. 6: Resultado - 0xEE
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 1 1 0 1 1 1 0
Ex
ORI.W D4,$00008000
ORI.W $00002700,D3

A instruções ORI é semelhante a instruções ORI, em relação a operação OU bit-a-bit, porém o operando de origem é um valor imediato.

Operação
destino <- destino | imediato
Endereçamento Origem
$imediato.B
$imediato.W
$imediato.L
Endereçamento Destino
Dx, (Ax), (Ax)+, -(Ax), n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), absoluto.W, absoluto.L, SR e CCR
Tamanho do dado
Byte, Word e Longword
CCR
X: -
N: a
Z: a 
V: 0
C: 0
Sintaxe
ORI.L #$imediato, Dx
ORI.W #$imediato,(An)
Ex
ORI.W #$02,D5
ORI.L $00008000,D6

Com a instruções EOR, aplicamos sobre os bits de um registrador de dados ou valor em memória a operação bit-a-bit OU Exclusivo. Os bits igual resultam em 0 e diferentes resultam em 1. Todas as flags, exceto X, são alteradas.

A operação EOR pode ser utilizada para zerar registradores e possue as possibilidades de uso abaixo:

  1. 1. Origem sendo registrador de dados e endereço efetivo(ee) sendo destino
Operação
destino <- destino ^ origem
Endereçamento Origem
Dx
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: -
N: a
Z: a 
V: 0
C: 0
Sintaxe
EOR Dx,ee

Abaixo, uma demostração da aplicação da operação OU bit-a-bit sobre 2 valores de 8-bits:

Tab. 7: Valor 1 - 0xCC
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 1 0 0 1 1 0 0
Tab.8: Valor 2 - 0xAA
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 0 1 0 1 0 1 0
Tab. 9: Resultado - 0x66
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
0 1 1 0 0 1 1 0
Ex
EOR.W D4,$00008000
EOR.W $00002700,D3

A instruções EORI é semelhante a instruções EOR, em relação a operação OU Excluviso bit-a-bit, porém o operando de origem é um valor imediato.

Operação
destino <- destino ^ #imediato
Endereçamento Origem
$imediato.B|.W|.L
Endereçamento Destino
Dx, (Ax), (Ax)+, -(Ax), n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), absoluto.W, absoluto.L, SR e CCR
Tamanho do dado
Byte, Word e Longword
CCR
X: -
N: a
Z: a 
V: 0
C: 0
Sintaxe
EORI.L $imediato, Dx
EORI.L $imediato,(An)
Ex
EORI.W $FFFFFF00,D5
EORI.L $8000,D6

A instruções NOT, ao ser aplicada sobre os bits de um registrador de dados ou valor em memória, inverte dos os seus bits. Os bits igual a 0 ser tornam 1 e os bits iguais a 1 se tornam 0. Todas as flags, exceto X, são alteradas.

A inversão de bits é conhecida como complemento de 1. O complemento de 2 é feito utilizando a instrução NEG.

Operação
destino <- ~destino
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: -
N: a
Z: a 
V: 0
C: 0
Sintaxe
NOT ee

Abaixo, uma demostração da aplicação da operação OU bit-a-bit sobre 2 valores de 8-bits:

Tab. 10: Valor 1 - 0xCC
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1 1 0 0 1 1 0 0
Tab.11: NOT Aplicado - 0x22
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
0 0 1 1 0 0 1 1
Ex
NOT.B $00008000
NOT.L (A6)+
NOT.L (A6)+
NOT.L (A6)
  1. 04/04/2024 - versão inicial