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

As instruções aritméticas aprensentadas nesta parte do tutorial são responáveis por realizar as operações de multiplação e divisão. Essas podem trabalhar com dados sinalizados ou não.

O 68k fornece as instruções MULS e MULU para multiplição e as instruções DIVS e DIVU para divisão. Todas as flags do CCR são sofrem alteração por essas instruções.

Na tentativa de utilizar um divisor sendo 0, a interrupção vetor #5 será invocada.

Os registradores A0-7 não podem ser utilizados como operando tanto para divisão quanto multiplicão. Apenas valores de memória apontados indiretamente.

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
* Multiplicação
/ Divisã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 as instrução DIVS e DIVU podemos realizar a operação aritmética de divisão entre um Dividendo(origem Longword) e um Divisor(destino Word). O resultado/cociente da operação e seu resto são armazenadas nas Word menos significativa e mais significativa respectivamente, do destino.

A instrução DIVS é utilizada para dividir valores sinalizados, positivos e negativos, enquanto DIVU é utilizada para dividir valores não-sinalizados.

Caso o resultado da divisão maior que 16-bits(Word), o operando de destino não será alterado e a flag oVerflow será atualiza para 1.

Operação
destino <- destino/origem
destino[Bit0-15] <- cociente 
destino[Bit16-31] <- resto
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
Tamanho do dado
Longword/word
CCR
X: -
N: a ; indefinido se ocorrer overflow
Z: a ; indefinido se ocorrer overflow
V: a
C: 0
Sintaxe
DIVU Dx,Dy ; 
DIVU.W  (Ax),Dx
DIVU.W -(Ax),Dx
DIVU.W (Ax)+,Dx
DIVU.W $absoluto,Dx
Exemplo:
; D0 = 00000009 D1 = 00000002
DIVU D0,D1;
; D1 = 00010004
    
DIVU.W  (A0),D2
DIVU.W -(A1),D3
DIVU.W (A3)+,D4
DIVU.W  $FFFF,D5

Com as instrução MULS e MULU podemos realizar a operação aritmética de multiplicação entre um dois valores Word de origem e destino. O resultado da operação é armazenado no destino como um valor Longword.

A instrução MULS é utilizada para multiplicar valores sinalizados, positivos e negativos, enquanto MULU é utilizada para multiplicar valores não-sinalizados.

Operação
destino <- destino * origem
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
Tamanho do dado
Word
CCR
X: -
N: a ; indefinido se ocorrer overflow
Z: a ; indefinido se ocorrer overflow
V: 0
C: 0
Sintaxe
MULU Dx,Dy ; 
MULU.W  (Ax),Dx
MULU.W -(Ax),Dx
MULU.W (Ax)+,Dx
MULU.W $absoluto,Dx
Exemplo:
; D0 = FFFF0004 D1 = 12340002
MULU D0,D1;
; D1 = 00000008
    
MULU.W  (A0),D2
MULU.W -(A1),D3
MULU.W (A3)+,D4
MULU.W  $FFFF,D5
  1. 05/09/2024 - Revisão 2 - Correção em erros gramaticais
  2. 30/08/2024 - revisão 1 - Correção em links de objetivos
  3. 11/03/2024 - versão inicial