Objetivos
Instruções de Rotação
As instruções de rotação são utilizadas para rotacionar todos bits em uma posição à direita ou à esquerda de
uma valor contido no Acumulador(A) apenas. As flags Carry(Cy), Sign, Parity e Zero são
afetada por essas instruções com base no resultado.
Notação utilizada:
|
|
| #$NN |
Valor hexadecimal imediato |
| #$NNNN; |
Endereço hexadecimal imediato |
| $NNNN |
Endereço hexadecimal |
| $NN ou h |
Valor hexadecimal |
| ; |
Comentário |
| >> |
Deslocamento à direita |
| << |
Deslocamento à esquerda |
| <- |
Atribuição |
| Acc. |
Acumulador |
| Cy |
Carry |
| M |
Endereço 16-bits contido em HL |
| Flags |
|
| a |
Alterada de acordo com resultado |
| - |
Não sofre alteração |
| 0 |
Sempre zero |
| 1 |
Sempre um |
Mais informações sobre os registradores e flags podem ser vistas
em Registradores e Flags.
RLC - Rotacionar Acumulador à esquerda : Sem Carry
Com a instrução RLC, podemos rotacionar o registrador Acumulador em 1-bit
à esquerda. O bit mais significativo, bit 7 de A, é armazenado na Carry e também é armazenado
no bit 0.
Como a rotação é feita apenas em uma unidade de bit, várias instruções devem ser utilizadas
para rotacionar mais bits de acordo com o necessário.
| C |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
| - |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
| C |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
| 1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
1* |
Operação
Cy <- A(Bit 7)
A <- A << 1
A(Bit 0) <- Cy
Endereçamento
F(Flags)
S: A[Bit 7]
Z: A == 0 ? 1 : 0
Ac:-
P: #num bits 1 de A == par ? 1 : 0
Cy: A[Bit 7] ; antes da rotação
Ex:
MVI A, #$01
RLC
RRC - Rotacionar Acumulador à direita: Sem Carry
Com a instrução RRC podemos rotacionar o registrador Acumulador em 1-bit à direita. O bit
menos significativo, bit 0 de A, é armazenado na Carry e também é armazenado no bit
mas significativo bit 7.
Como a rotação é feita apenas em uma unidade de bit, várias instruções devem ser utilizadas para
rotacionar mais bits de acordo com o necessário.
| Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
C |
| 1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
- |
| Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
C |
| 1** |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
Operação
lead">Cy <- A(Bit 0)
A <- A >> 1
A(Bit 7) <- Cy
Endereçamento
F(Flags)
S: A[Bit 7]
Z: A == 0 ? 1 : 0
Ac:-
P: #num bits 1 de A == par ? 1 : 0
Cy: A[Bit 0] ; antes da rotação
Ex:
MVI A, #$02
RRC
RAL - Rotacionar Acumulador à esquerda pela Carry
Com a instrução RAL podemos rotacionar o registrador Acumulador em 1-bit à esquerda
utilizando a Carry. O bit mais significativo, bit 7 do registrador A, é transferido para a
flag Cy e a Cy anterior é transferida para bit menos significativo, bit 0.
Como a rotação é feita apenas em uma unidade de bit, várias instruções devem ser utilizadas
para rotacionar mais bits de acordo com o necessário.
| C |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
| 1*** |
0* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
| C |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
| 0* |
0 |
0 |
0 |
0 |
0 |
0 |
1** |
1*** |
Operação
Cy_anterior <- Cy
Cy <- A(Bit 7)
A <- A << 1
A(Bit 0) <- Cy_anterior
Endereçamento
F(Flags)
S: A[Bit 7]
Z: A == 0 ? 1 : 0
Ac:-
P: #num bits 1 de A == par ? 1 : 0
Cy: A[Bit 7] ; antes da rotação
Ex:
MVI #$EF
SFC ; Cy <- 1
RAL
RAR - Rotacionar Acumulador à direita pela Carry
Com a instrução RAR podemos rotacionar o registrador Acumulador em 1-bit à direita
utilizando a flag Carry. O bit menos significativo, bit 0, do registrador A é transferido
para flag Carry, e a Carry anterior é transferido para o bit mais significativo, bit 7
do acumulador.
Como a rotação é feita apenas em uma unidade de bit, várias instruções devem ser utilizadas
para rotacionar mais bits de acordo com o necessário.
| Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
C |
| 1* |
0 |
0 |
0 |
0 |
0 |
0 |
0** |
1*** |
| Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
C |
| 1*** |
1* |
0 |
0 |
0 |
0 |
0 |
0 |
0** |
Operação
Cy_anterior <- Cy
Cy <- A(Bit 0)
A <- A >> 1
A(Bit 7) <- Cy_anterior
Endereçamento
F(Flags)
S: A[Bit 7]
Z: A == 0 ? 1 : 0
Ac:-
P: #num bits 1 de A == par ? 1 : 0
Cy: A[Bit 0] ; antes da rotação
Ex:
MVI #$EE
SFC ; Cy <- 1
RAR
Histórico de atualizações
- 12/05/2026 - revisão 5 - Ajustes: objetivos, intro e sintaxes; Adição: como setar as flags
- 18/02/2025 - revisão 4 - adição de exemplos ilustrativos
- 13/12/2024 - revisão 3 - correção em operações/descrição de RAL e RAR; ajustes pontuais
- 30/08/2024 - revisão 2 - correção em erros gramaticais, adição de flags afetadas
- 04/10/2023 - revisão 1 - adição de links, correção em layout, navegação e erro gramaticais
- 08/08/2023 - versão inicial
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.