As instruções de deslocamento são utilizadas para deslocar todos bits de um registrador de dados ou valor em memória para a esquerda ou direta, em uma ou mais posições, com auxílio das flags Carry(C) e Extend(X) suportando quase todos os modos de endereçamento.

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
<< Deslocamento à esquerda
>> Deslocamento à direita
CCR
a Alterada de acordo com resultado
- Não sofre alteração
0 Sempre zero

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

A instrução ASL desloca todos bits em uma ou mais posição à esquerda de um registrador de dados ou valor em memória. O bit mais significativo é transferido para as flags Carry(C) e Extend(X) e os espaços à direita são preenchidos com bits iguas a 0 no destino.

As 3 possibilidades de uso estão abaixo:

  1. - Deslocar de 1 a 8 bits informados em outro registrador de dado
  2. - Deslocar uma quantidade de bits informada em um valor imediato
  3. - Deslocar 1 bit de um dado Word em memória

Abaixo um exemplo básico do deslocamento de 1 bit em um valor de 8-bits.

Tab.2: Flags X/C e valor 8-bits
X C Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
- - 1* 0 0 0 0 0 0 1**
Tab.3: valor 8-bits deslocado 1 bit a esquerda
X C Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1* 1* 0 0 0 0 0 0 1** 0
Operação
destino <- destino << numero_bits
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, Word e Longword
CCR
X: a - Bit mais significativo se numero_bits maior que 0, inalterada caso contrário.
N: a
Z: a 
V: a - 1 se bit mais significativo mudar, 0 caso contrário.
C: X
Sintaxe
ASL Dx,Dy
ASL #imediato,Dx
ASL absoluto.W
ASL absoluto.L
Ex
ASL D0,D1
ASL #02,D2
ASL $8000
ASL $FFFF0000

A instrução ASL desloca todos bits em uma ou mais posição à direita de um registrador de dados ou valor Word em memória. O bit menos significativo é copiado para as flags Carry(C) e Extend(X) e os espaços à esquerda são preenchidos com bits mais significativo anterior no destino.

As 3 possibilidades de uso estão abaixo:

  1. - Deslocar de 1 a 8 bits informados em outro registrador de dado
  2. - Deslocar uma quantidade de bits informada em um valor imediato
  3. - Deslocar 1 bit de um dado Word em memória

Abaixo um exemplo básico do deslocamento de 1 bit em um valor de 8-bits.

Tab.4: Flags X/C e valor 8-bits
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 C X
1* 0 0 0 0 0 0 1** - -
Tab.5: valor 8-bits deslocado 1 bit a esquerda
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 C X
1* 1* 0 0 0 0 0 0 1** 1**
Operação
destino <- destino >> numero_bits
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, Word e Longword
CCR
X: a , a - Bit menos significativo se numero_bits maior que 0, inalterada caso contrário.
N: a
Z: a 
V: a , 1 se bit mais significativo mudar, 0 caso contrário.
C: X
Sintaxe
ASR Dx,Dy
ASR #imediato,Dx
ASR absoluto.W
ASR absoluto.L
Ex
ASR.B D0,D1
ASL.W #02,D2
ASL $8000
ASL $FFFF0000

A instrução LSL desloca todos bits em uma ou mais posição à esquerda de um registrador de dados ou valor em memória. O bit mais significativo é copiado para as flags Carry(C) e Extend(X) e os espaços à direita são preenchidos com bits iguas a 0 no destino.

As 3 possibilidades de uso estão abaixo:

  1. - Deslocar de 1 a 8 bits informados em outro registrador de dado
  2. - Deslocar uma quantidade de bits informada em um valor imediato
  3. - Deslocar 1 bit de um dado Word em memória

Abaixo um exemplo básico do deslocamento de 1 bit em um valor de 8-bits.

Tab.6: Flags X/C e valor 8-bits
X C Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
- - 1* 0 0 0 0 0 0 1**
Tab.7: valor 8-bits deslocado 1 bit a esquerda
X C Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
1* 1* 0 0 0 0 0 0 1** 0
Operação
destino <- destino << numero_bits
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, Word e Longword
CCR
X: a , a - Bit mais significativo se numero_bits maior que 0, inalterada caso contrário.
N: a
Z: a 
V: 0
C: X
Sintaxe
LSL Dx,Dy
LSL #imediato,Dx
LSL absoluto.W
LSL absoluto.L
Ex
LSL.W #$02,D0
LSL.L D1,D3
LSL.W $FFFFFF00

A instrução LSR desloca todos bits, em uma ou mais posições, à direita de um registrador de dados ou valor Word em memória. O bit menos significativo é copiado para as flags Carry(C) e Extend(X) e os espaços à esquerda são preenchidos com bits iguas a 0 no destino.

As 3 possibilidades de uso estão abaixo:

  1. - Deslocar de 1 a 8 bits informados em outro registrador de dado
  2. - Deslocar uma quantidade de bits informada em um valor imediato
  3. - Deslocar 1 bit de um dado Word em memória

Abaixo um exemplo básico do deslocamento de 1 bit em um valor de 8-bits.

Tab.8: Flags X/C e valor 8-bits
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 C X
1* 0 0 0 0 0 0 1** - -
Tab.9: valor 8-bits deslocado 1 bit a esquerda
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 C X
0 1* 0 0 0 0 0 0 1** 1**
Operação
destino <- destino >> numero_bits
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, Word e Longword
CCR
X: a , a - Bit menos significativo se numero_bits maior que 0, inalterada caso contrário.
N: a
Z: a 
V: 0
C: X
Sintaxe
LSL Dx,Dy
LSL #imediato,Dx
LSL absoluto.W
LSL absoluto.L
Ex
LSL.W #$02,D0
LSL.L D1,D3
LSL.W $FFFFFF00
  1. 05/09/2024 - Revisão 1 - Correção em descrição LSR
  2. 03/04/2024 - versão inicial