organização básica de computadores e …edson/disciplinas/mc404/2011-2s/...• qual é o...

37
Organização Básica de computadores e linguagem de montagem 2 o Semestre de 2011 Prof. Edson Borin

Upload: vothuan

Post on 11-Nov-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Organização Básica de computadores e linguagem de

montagem

2o Semestre de 2011

Prof. Edson Borin

Instruções Lógicas e de Deslocamento

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

Exemplo - AND

op1 = 0 0 0 0 0 1 0 1 0 0 0 1 0 1 1 1

op2 = 0 1 0 1 1 1 0 1 0 1 1 0 1 0 0 1

res =

Exemplo - OR

op1 = 0 0 0 0 0 1 0 1 0 0 0 1 0 1 1 1

op2 = 0 1 0 1 1 1 0 1 0 1 1 0 1 0 0 1

res =

Exemplo - XOR

op1 = 0 0 0 0 0 1 0 1 0 0 0 1 0 1 1 1

op2 = 0 1 0 1 1 1 0 1 0 1 1 0 1 0 0 1

res =

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

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