organização básica de computadores e …edson/disciplinas/mc404/2011-2s/...• qual é o...
TRANSCRIPT
Instruções Lógicas
• Efetuam operações lógicas (ou, e ou-exclusivo), bit a bit, nos operandos
46 CAPÍTULO 3. O PROCESSADOR FAÍSKA
3.4 Instruções Lógicas
No grupo das instruções lógicas, como o nome indica, estão as instruções que efe-
tuam operações lógicas como e, ou e ou-exclusivo. No Faíska, as instruções lógicas
operam somente sobre registradores; ou seja, os dois operandos das instruções são
registradores. Outros processadores, como os da família Intel x86, admitem que um
dos operandos esteja na memória.
As operações lógicas para operandos de apenas um bit são descritas na Figura
3.4. As instruções lógicas que implementam as operações E, OU e OU-EXCLUSIVO
operam bit a bit, isto é, bit 0 do primeiro operando com bit 0 do segundo operando,
bit 1 com bit 1, e assim por diante.
op1 op2 E
0 0 0
0 1 0
1 0 0
1 1 1
op1 op2 OU
0 0 0
0 1 1
1 0 1
1 1 1
op1 op2 OU-EXCLUSIVO
0 0 0
0 1 1
1 0 1
1 1 0
Figura 3.4: Operações lógicas com operandos de 1 bit
AND
E-Lógico
Sintaxe Operação Flags Codificação
and rdest, rfonte rdest ← rdest ∧ rfonte SZ
31 0
30 rdest rfonte
Exemplo 22
1 org 100h2 and r2, r3 ; instrução e-lógico3 ; a codificação utiliza uma palavra:4 ; 300002035
AND
46 CAPÍTULO 3. O PROCESSADOR FAÍSKA
3.4 Instruções Lógicas
No grupo das instruções lógicas, como o nome indica, estão as instruções que efe-
tuam operações lógicas como e, ou e ou-exclusivo. No Faíska, as instruções lógicas
operam somente sobre registradores; ou seja, os dois operandos das instruções são
registradores. Outros processadores, como os da família Intel x86, admitem que um
dos operandos esteja na memória.
As operações lógicas para operandos de apenas um bit são descritas na Figura
3.4. As instruções lógicas que implementam as operações E, OU e OU-EXCLUSIVO
operam bit a bit, isto é, bit 0 do primeiro operando com bit 0 do segundo operando,
bit 1 com bit 1, e assim por diante.
op1 op2 E
0 0 0
0 1 0
1 0 0
1 1 1
op1 op2 OU
0 0 0
0 1 1
1 0 1
1 1 1
op1 op2 OU-EXCLUSIVO
0 0 0
0 1 1
1 0 1
1 1 0
Figura 3.4: Operações lógicas com operandos de 1 bit
AND
E-Lógico
Sintaxe Operação Flags Codificação
and rdest, rfonte rdest ← rdest ∧ rfonte SZ
31 0
30 rdest rfonte
Exemplo 22
1 org 100h2 and r2, r3 ; instrução e-lógico3 ; a codificação utiliza uma palavra:4 ; 300002035
OR
3.4. INSTRUÇÕES LÓGICAS 47
Antes
30 00 02 03 00100h
000fch
00104h
88 00 e8 f2r2Memória
f7 ea 12 66r3
00 00 01 00ip
Processador
... 0 0 flags
S Z
00 00 01 04ip
Depois
30 00 02 03 00100h
000fch
00104h
80 00 00 62r2Memória
f7 ea 12 66r3
Processador
... 1 0 flags
S Z
OR
OU-Lógico
Sintaxe Operação Flags Codificação
or rdest, rfonte rdest ← rdest ∨ rfonte SZ31 0
31 rdest rfonte
Exemplo 23
1 org 100h2 or r2, r3 ; instrução ou-lógico3 ; a codificação utiliza uma palavra:4 ; 310002035
XOR
48 CAPÍTULO 3. O PROCESSADOR FAÍSKA
Antes
31 00 02 03 00100h
000fch
00104h
88 00 e8 f2r2Memória
f7 ea 12 66r3
00 00 01 00ip
Processador
... 0 0 flags
S Z
Depois
31 00 02 03 00100h
000fch
00104h
ff ea fa f6r2Memória
f7 ea 12 66r3
00 00 01 04ip
Processador
... 0 1 0 0flags
C S Z O
XOR
OU-Exclusivo
Sintaxe Operação Flags Codificação
xor rdest, rfonte rdest ← rdest ⊕ rfonte SZ31 0
32 rdest rfonte
Exemplo 24
1 org 100h2 xor r2, r3 ; instrução ou-exclusivo3 ; a codificação utiliza uma palavra:4 ; 320002035
TEST
3.4. INSTRUÇÕES LÓGICAS 49
Antes
32 00 02 03 00100h
000fch
00104h
88 00 e8 f2r2Memória
f7 ea 12 66r3
00 00 01 00ip
Processador
... 0 0 flags
S Z
Depois
32 00 02 03 00100h
000fch
00104h
7f ea fa 94r2Memória
f7 ea 12 66r3
00 00 01 04ip
Processador
... 0 0flags
S Z
TEST
OU-Exclusivo
Sintaxe Operação Flags Codificação
test rdest, rfonte rdest ∧ rfonte SZ31 0
33 rdest rfonte
Exemplo 25
1 org 100h2 test r2, r3 ; instrução test3 ; como and, mas não armazena resultado4 ; a codificação utiliza uma palavra:5 ; 330002036
AND sem modificar o destino
Exemplo - Conjuntos
• Operações lógicas podem ser usadas para implementar operações em conjuntos.
• Vamos assumir que temos um conjunto de 32 elementos. Podemos usar uma variável de 32 bits. Um bit para representar a presença de cada elemento (0, 1, ..., 31):–valor do bit = 1: elemento está presente–valor do bit = 0: elemento não está presente
• Exemplo: Quais elementos estão presentes em conj?
short conj = 0x8013; // 1000 0000 0001 0011
Exemplo - Conjuntos
• Dado os conjuntos conjA e conjB:short conjA = 0xA117;!//1010 0001 0001 0111short conjB = 0x8013;!//1000 0000 0001 0011
• Qual é o resultado a união dos conjuntos?
Exemplo - Conjuntos
• Dado os conjuntos conjA e conjB:short conjA = 0xA117;!//1010 0001 0001 0111short conjB = 0x8013;!//1000 0000 0001 0011
• Qual é o resultado a união dos conjuntos?–1010 0001 0001 0111
• Qual é o resultado da interseção dos conjuntos?
Exemplo - Conjuntos
• Dado os conjuntos conjA e conjB:short conjA = 0xA117;!//1010 0001 0001 0111short conjB = 0x8013;!//1000 0000 0001 0011
• Qual é o resultado a união dos conjuntos?–1010 0001 0001 0111
• Qual é o resultado da interseção dos conjuntos?–1000 0000 0001 0011
• Qual é a diferença conjA \ conjB?
Exemplo - Conjuntos
• Dado os conjuntos conjA e conjB:short conjA = 0xA117;!//1010 0001 0001 0111short conjB = 0x8013;!//1000 0000 0001 0011
• Qual é o resultado a união dos conjuntos?–1010 0001 0001 0111
• Qual é o resultado da interseção dos conjuntos?–1000 0000 0001 0011
• Qual é a diferença conjA \ conjB?–0010 0001 0000 0100
Exemplo - Conjuntos
• Como declarar conjuntos de bits na ling. de mont. do Faíska?
conjA: db 0, 0, 0, 0
conjB: ds 4
• Como remover todos os elementos do conjunto?
Exemplo - Conjuntos
• Como declarar conjuntos de bits na ling. de mont. do Faíska?
conjA: db 0, 0, 0, 0
conjB: ds 4
• Como remover todos os elementos do conjunto?–set r0, 0–st conjA, r0
• Como adicionar todos os elementos ao conjunto?
Exemplo - Conjuntos
• Como declarar conjuntos de bits na ling. de mont. do Faíska?
conjA: db 0, 0, 0, 0
conjB: ds 4
• Como remover todos os elementos do conjunto?–set r0, 0–st conjA, r0
• Como adicionar todos os elementos ao conjunto?–set r0, -1 ; 0xFFFF ou 1111 1111 1111 1111–st conjA, r0
Exemplo - Conjuntos
• Como adicionar o elemento 2 ao conjunto?–set r0, 0004h ; 0000 0000 0000 0100–ld r1, conjA–or r1, r0–st conjA, r1
Exemplo - Conjuntos
• Como adicionar o elemento 2 ao conjunto?–set r0, 0004h ; 0000 0000 0000 0100–ld r1, conjA–or r1, r0–st conjA, r1
• Como adicionar remover o elemento 4 do conjunto?–set r0, -1 ; FFFFh ou 1111 1111 1111 1111–set r1, 0010h ; 0010h ou 0000 0000 0001 0000–xor r0, r1 ; 1111 1111 1110 1111–ld r1, conjA–and r1, conjA –st conjA, r1
Exemplo - Conjuntos
• Como verificar se o elemento 5 ao conjunto?set r0, 0002h ; 0000 0000 0010 0000ld r1, conjAtest r1, r0jnz presente...presente:
–
Exemplo - Conjuntos
• Dado os conjuntos
conjA: db 8, 3, 1, 0
conjB: db 1, 2, 0, b
• Como computar a união dos conjuntos?
Exemplo - Conjuntos
• Dado os conjuntos
conjA: db 8, 3, 1, 0
conjB: db 1, 2, 0, b
• Como computar a união dos conjuntos?
ld r0, conjA
ld r1, conjB
or r0, r1
Exemplo - Conjuntos
• Dado os conjuntos
conjA: db 8, 3, 1, 0
conjB: db 1, 2, 0, b
• Como computar a interseção dos conjuntos?
Exemplo - Conjuntos
• Dado os conjuntos
conjA: db 8, 3, 1, 0
conjB: db 1, 2, 0, b
• Como computar a interseção dos conjuntos?
ld r0, conjA
ld r1, conjB
and r0, r1
Exemplo - Conjuntos
• Dado os conjuntos
conjA: db 8, 3, 1, 0
conjB: db 1, 2, 0, b
• Como computar a diferença dos conjuntos (conjA/conjB)?
Exemplo - Conjuntos
• Dado os conjuntos
conjA: db 8, 3, 1, 0
conjB: db 1, 2, 0, b
• Como computar a diferença dos conjuntos (conjA/conjB)?
ld r0, conjA
ld r1, conjB
set r2, -1
xor r1, r2
and r0, r1
Exemplo - Conjuntos
• Dado os conjuntos
conjA: db 8, 3, 1, 0
conjB: db 1, 2, 0, b
• Como computar a diferença dos conjuntos (conjA/conjB)?
ld r0, conjA
ld r1, conjB
set r2, -1
xor r1, r2
and r0, r1
ld r0, conjA
ld r1, conjB
xor r1, r0
and r0, r1
Ou
Instruções de Deslocamento
3.5. INSTRUÇÕES DE DESLOCAMENTO 53
3.5 Instruções de deslocamento
As instruções de deslocamento do Faíska operam sempre sobre um registrador, e
deslocam os bits do registrador operando para a direita ou para a esquerda. Todos
os bits são deslocados ao mesmo tempo. Por exemplo, no deslocamento simples para
a esquerda, o bit b0 (menos significativo) do registrador é deslocado para a posição
do bit b1, que por sua vez é deslocado para a posição do bit b2, e assim por diante. A
Figura 3.5 ilustra as operações de deslocamento para a esquerda e para a direita.
x b31 b1b2b3b30...
(b)
b31 b30 b0b1b2b29...
Antes
Depois
sentido do deslocamento
b0
x
b29 xb0b1b28...
(a)
b31 b30 b0b1b2b29...
Antes
Depois
sentido do deslocamento
b31
x
b30
Figura 3.5: Operações de deslocamento (a) para a esquerda e (b) para a direita
As variações existentes das instruções de deslocamento derivam das diferentes
possibilidades sobre o que acontece com o bit que ‘sai’ do registrador (b0 no deslo-
camento para a direita e b31 no deslocamento para a esquerda) e sobre o bit que
‘entra’ no registrador (representado por x na Figura 3.5, que ‘entra’ no lugar de b31
no deslocamento para a direita e no lugar de b0 no deslocamento para a esquerda).
Em todas as instruções de deslocamento o número de bits que o registrador deve
ser deslocado é dado no segundo operando, que pode ser uma constante codificada
com endereçamento imediato, ou pode ser um outro registrador. Quando a instrução
indica que o registrador deve ser deslocado de mais do que um bit (ou seja, o valor
do segundo operando é maior do que um) a operação de deslocamento ilustrada na
Figura 3.5 é repetida o número de vezes indicado pelo valor do segundo operando.
3.5.1 Deslocamento simples
Nas instruções de deslocamento simples o bit que é ‘ejetado’ do registrador é copiado
no bit de estado C. Se a instrução de deslocamento indica que o registrador deve ser
deslocado de mais de um bit, o valor copiado no bit de estado é o último a ser ‘ejetado’
do registrador. O valor do bit que ‘é injetado’ a cada deslocamento é sempre igual a
zero.
Instruções de Deslocamento
64 CAPÍTULO 3. O PROCESSADOR FAÍSKA
Depois
00 00 00 07r3
Memória
aa aa aa abr10
80 00 00 ffr11
00 00 02 08ip
00200h
00204h
4a 01 0a 00
4b 00 0b 03
Processador
00208h
... 1 1 0 flags
C S Z
A Figura 3.5.2 mostra um resumo das operações de deslocamento de formaesquemática.
031Creg
shldeslocamento para a esquerda
031Creg
shrdeslocamento para a direita
0 0
031Creg
sardeslocamento aritmético para a direita
031Creg
rolrotação para a esquerda
031Creg
rorrotação para a direita
031Creg
rolrotação com vai-umpara a esquerda
rcrrotação com vai-um para a direita
031Creg
Figura 3.6: Resumo das instruções de deslocamento e rotação
SHL
3.5. INSTRUÇÕES DE DESLOCAMENTO 55
Depois
00 00 00 07r3
Memória
2a aa aa aar10
01 fe 00 00r11
00 00 02 08ip
00200h
00204h
40 01 0a 00
41 00 0b 03
Processador
00208h
... 0 0 0 flags
C S Z
Deslocamento para a esquerda
SHL
Deslocamento para a esquerda
Sintaxe Operação Flags Codificação
shl rdest, expr5
repita imd5 vezes {rdest[i + 1]← rdest[i]C← rdest[31]rdest[0]← 0
}
CSZ31 0
42 imd8 rdest
shl rdest, rfonte
repita rfonte vezes {rdest[i + 1]← rdest[i]C← rdest[31]rdest[0]← 0
}
CSZ31 0
43 rdest rfonte
Exemplo 28
1 org 200h2 shl r10, 1 ; deslocamento para a esquerda, imediato3 ; a codificação utiliza uma palavra:4 ; 42010a00h5 shl r11, r3 ; deslocamento para a esquerda6 ; a codificação utiliza uma palavra:7 ; 43000b03h8
SHR54 CAPÍTULO 3. O PROCESSADOR FAÍSKA
Deslocamento para a direita
SHR
Deslocamento para a direita
Sintaxe Operação Flags Codificação
shr rdest, expr5
repita imd5 vezes {rdest[i]← rdest[i + i]C← rdest[0]rdest[31]← 0
}
CSZ31 0
40 imd8 rdest
shr rdest, rfonte
repita rfonte vezes {rdest[i]← rdest[i + i]C← rdest[0]rdest[31]← 0
}
CSZ31 0
41 rdest rfonte
Exemplo 27
1 org 200h2 shr r10, 1 ; deslocamento para a direita, imediato3 ; a codificação utiliza uma palavra:4 ; 40010a005 shr r11, r3 ; deslocamento para a direita6 ; a codificação utiliza uma palavra:7 ; 41000b038
Antes
00 00 00 07r3
Memória
55 55 55 55r10
ff 00 00 00r11
00 00 02 00ip
00200h
00204h
40 01 0a 00
41 00 0b 03
Processador
00208h
... 0 0 0 flags
C S Z
SAR3.5. INSTRUÇÕES DE DESLOCAMENTO 57
SAR
Deslocamento aritmético para a direita
Sintaxe Operação Flags Codificação
sar rdest, expr5
repita imd5 vezes {rdest[i]← rdest[i + i]C← rdest[0]rdest[31]← 0
}
CSZ31 0
44 imd5 rdest
sar rdest, rfonte
repita rfonte vezes {rdest[i]← rdest[i + i]C← rdest[0]rdest[31]← rdest[31]
}
CSZ31 0
45 rdest rfonte
Exemplo 29
1 org 200h2 sar r10, 1 ; deslocamento aritmético, imediato3 ; a codificação utiliza uma palavra:4 ; 44010a00h5 sar r11, r3 ; deslocamento aritmético, com registrador6 ; a codificação utiliza uma palavra:7 ; 45000b03h8
Antes
00 00 00 07r3
Memória
55 55 55 55r10
ff 00 00 00r11
00 00 02 00ip
00200h
00204h
44 01 0a 00
45 00 0b 03
Processador
00208h
... 0 0 0 flags
C S Z
rdest[31]
Exemplo• Em uma palavra de 32 bits com com quatro campos: Op,
func, src e dst.
• Como extrair o valor do campo func e colocá-lo no registrador r0?
funcop dstsrc
31 ... 25 24 ... 14 13 ... 7 6 ... 0
Exemplo• Em uma palavra de 32 bits com com quatro campos: Op,
func, src e dst.
• Como extrair o valor do campo func e colocá-lo no registrador r0?
palavra: ds 4ld r1, palavra ! ; carregue a palavra da memória em r1shr r1, 14 ! ; desloque o conteúdo de r1 para direitaset r0, 000007FFh! ; r2 = 0000 ... 0000 0111 1111 1111and r0, r1! ! ; r0 = r0 (mascara) ^ r1
funcop dstsrc
31 ... 25 24 ... 14 13 ... 7 6 ... 0
Deslocamento com Rotação
64 CAPÍTULO 3. O PROCESSADOR FAÍSKA
Depois
00 00 00 07r3
Memória
aa aa aa abr10
80 00 00 ffr11
00 00 02 08ip
00200h
00204h
4a 01 0a 00
4b 00 0b 03
Processador
00208h
... 1 1 0 flags
C S Z
A Figura 3.5.2 mostra um resumo das operações de deslocamento de formaesquemática.
031Creg
shldeslocamento para a esquerda
031Creg
shrdeslocamento para a direita
0 0
031Creg
sardeslocamento aritmético para a direita
031Creg
rolrotação para a esquerda
031Creg
rorrotação para a direita
031Creg
rolrotação com vai-umpara a esquerda
rcrrotação com vai-um para a direita
031Creg
Figura 3.6: Resumo das instruções de deslocamento e rotação