As instruções aqui apresentadas têm por característica o fato de que um dos operandos envolvidos deve ser sempre um registrador de dados acessado no modo direto, enquanto que o outro operando apresenta flexibilidade de endereçamento.
O primeiro grupo de instruções deste tipo que serão aqui aprsentadas inclui ADD, AND, OR e SUB. Estas instruções podem ser utilizadas como em
ADD <ea>, Dnonde o registrador de dados é também o destino do resultado, ou como em
ADD Dn, <ea>onde o outro operando será o destino do resultado da operação.
A forma genérica destas instruções de máquina é
cccc.ddd.ooo.mmm.rrronde
Instrução | Código |
---|---|
ADD | 1101 |
AND | 1100 |
OR | 1000 |
SUB | 1001 |
byte | word | long | operação |
---|---|---|---|
000 | 001 | 010 | Dn
![]() (Dn) op (<ea>) |
100 | 101 | 110 | <ea>
![]() (Dn) op (<ea>) |
Considere por exemplo a instrução ADD.L D0,D1. A codificação começa com a seqüência do código de operação 1101, seguida de 001 (registrador D1), 010 (long com destino sendo o registrador especificado, D1), 000 (outro operando está em registrador) e 000 (o outro registrador é o D0). Portanto, o código binário para esta instrução é
1101001010000000ou $D280.
A instrução ADD.L #1,D1 terá a primeira palavra da instrução codificada pela seqüência de bits 1101 (instrução ADD), 001 (D1), 010 (resultado em D1), 111100 (operando imediato). A primeira palavra da instrução terá portanto o valor $D2BC. Seguirão então mais duas palavras de extensão (uma vez que a operação é sobre operandos do tipo long) contendo o valor imediato a ser adicionado, sendo que a primeira palavra será $0000 e a segunda palavra será $0001. A instrução ocupa portanto três palavras de memória, com conteúdo $D2BC00000001.
Outro grupo de instruções com esta mesma estrutura básica incluem DIVS (divisão com sinal), DIVU (divisão sem sinal), MULS (multiplicação com sinal) e MULU (multiplicação sem sinal). Estas instruções tem apenas uma forma de uso, onde o destino deve ser o registrador de dados, e apenas um tamanho de operando (word), sendo o resultado armazenado em 32 bits. No caso da divisão, este resultado de 32 bits é dividido em dois resultados de 16 bits cada, sendo a parte menos significativa o quociente da operação e a parte mais significativa o resto da divisão. As formas de uso destas instruções são:
DIVS <ea>,Dn DIVU <ea>,Dn MULS <ea>,Dn MULU <ea>,Dn
O formato da instrução de máquina é similar ao das instruções do grupo acima, sendo:
Instrução | Código |
---|---|
DIVS | 1000.ddd.111.mmm.rrr |
DIVU | 1000.ddd.011.mmm.rrr |
MULS | 1100.ddd.111.mmm.rrr |
MULU | 1100.ddd.011.mmm.rrr |
Há ainda mais duas instruções adicionais com formato similar, CMP (comparação) e EOR (ou exclusivo). A forma de uso destas instruções é
CMP <ea>,Dne
EOR Dn,<ea>
O código de máquina para estas duas instruções tem o mesmo campo de operação,
1011.ddd.ooo.mmm.rrrsendo que as duas instruções são diferenciadas pelo campo ooo:
Instrução | byte | word | long | Operação |
---|---|---|---|---|
CMP | 000 | 001 | 010 | (Dn) - (<ea>) |
EOR | 100 | 101 | 110 | <ea>
![]() (<ea>)
![]() |
Para a instrução CMP todos os modos de endereçamento são válidos, embora o modo An apenas para operandos do tipo word ou long. A instrução EOR é restrita aos modos de endereçamento de dados alteráveis.