3.1. formato de instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-cpu.pdf · 2 ♦...

71
1 3. ESTUDO DA CPU 3.1. Formato de Instruções Programa: consiste numa seqüência de instruções. Instrução: executa uma ação particular. Componentes de uma instrução: Código de operação: especifica a ação a ser executada. Operandos: contêm ou especificam a localização do dado utilizado pela instrução. Formatos típicos de uma instrução de máquina: Código de Operação (a) Instrução sem endereço Cód. de Operação Endereço (b) Instrução com um endereço Cód. de Operação Endereço 1 Endereço 2 (c) Instrução de dois endereços

Upload: others

Post on 18-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

1

3. ESTUDO DA CPU

3.1. Formato de Instruções

♦ Programa: consiste numa seqüência de instruções.

♦ Instrução: executa uma ação particular.

♦ Componentes de uma instrução:

• Código de operação: especifica a ação a ser executada. • Operandos: contêm ou especificam a localização do dado

utilizado pela instrução.

♦ Formatos típicos de uma instrução de máquina:

Código de Operação (a) Instrução sem endereço

Cód. de Operação Endereço (b) Instrução com um endereço

Cód. de Operação Endereço 1 Endereço 2 (c) Instrução de dois endereços

Page 2: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

2

♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra da máquina:

• Todas as instruções possuem o mesmo comprimento. • As instruções podem assumir dois ou três comprimentos

diferentes. • As instruções podem ser mais curtas, ter o mesmo

tamanho ou ser mais compridas do que a palavra da máquina.

• Exemplos:

1 palavra 1 palavra

End. End. 0 Instrução 0 Instrução Instrução Instrução Instrução 1 Instrução 1 Instrução Instrução Instrução Instrução 2 Instrução 2 Instrução Instrução Instrução Instrução 3 Instrução 3 Instrução Instrução Instrução Instrução (a) (b)

1 palavra 1 palavra

End. End. 0 Instrução 0 Instrução Instrução Instrução Instrução 1 Instrução 1 Instrução Instrução 2 2 Instrução Instrução Instrução 3 Instrução 3 Instrução Instrução Instrução 4 Instrução 4 Instrução Instrução Instrução 5 5 Instrução Instrução 6 6 Instrução 7 Instrução 7 Instrução Instrução (c) (d)

Page 3: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

3

Critérios de Projeto para Formatos de Instruções

♦ “Instruções curtas são melhores do que instruções longas”.

• Um programa com n instruções de 16 bits consome a metade do espaço de memória do que um de n instruções de 32 bits.

• Cada memória tem a sua taxa de transferência determinada pela tecnologia de projeto. ∗ Número de bits por segundo que pode ser lido da

memória. ∗ Para uma taxa de transferência de t bps e um

comprimento médio de instrução de r bits, a memória pode fornecer no máximo t/r instruções por segundo para o processador.

∗ A taxa de instruções executadas por segundo (velocidade do processador) depende do comprimento da instrução.

∗ Este critério só não seria importante se o tempo para a execução das instruções fosse grande comparado ao tempo de busca da instrução.

♦ “Deve haver espaço suficiente na instrução para expressar todas as operações desejadas”.

• Uma máquina com 2n operações deve ter instruções com no mínimo n bits.

♦ “É desejável que o comprimento da palavra de máquina seja um múltiplo inteiro de seu comprimento de caractere”.

• Se o caractere tiver k bits, o comprimento da palavra deve ser k, 2k, 3k, ..., para não haver desperdício de espaço para o armazenamento de caracteres.

Page 4: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

4

• Ou uma instrução ocupa um número inteiro de bytes ou palavras ou uma palavra abriga um número inteiro de instruções.

♦ “O número de bits no campo de endereços”.

• Considerando-se uma máquina com o caractere de 8 bits e uma memória principal com capacidade de armazenar 216 caracteres, temos diversas possibilidades, entre elas: ∗ Unidade básica (palavra) de 8 bits:

◊ Memória de 216 bytes, de 0 a 65535. ◊ Um endereço para cada caractere.

∗ Unidade básica (palavra) de 32 bits: ◊ Memória de 214 palavras, de 0 a 16383. ◊ Comparação entre dois caracteres na memória: busca

das palavras e extração dos caracteres dentro das palavras.

◊ Um endereço mais curto possibilita a existência de instruções mais curtas.

◊ Permite o endereçamento de uma quantidade de memória 4 vezes maior com o mesmo número de bits de endereços do anterior.

• Quanto maior a resolução de endereçamento da memória, maior o tamanho da instrução.

• Exemplos: ∗ Burroughs B 1700: endereçamento de bits. ∗ CDC Cyber: endereçamento de palavras de 60 bits.

Page 5: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

5

Expandindo os Códigos de Operação

♦ Considerando-se uma instrução de n + k bits, com o código de operação de k bits e endereçamento de memória de n bits.

• Permite 2k operações diferentes. • Permite 2n células endereçáveis de memória.

♦ Considerando-se uma instrução de n + k bits, com o código de operação de k - 1 bits e endereçamento de memória de n + 1 bits.

• Permite 2k/2 operações diferentes. • Permite 2*2n células endereçáveis de memória ou o

mesmo número com o dobro da resolução.

♦ Considerando-se uma instrução de n + k bits, com o código de operação de k + 1 bits e endereçamento de memória de n - 1 bits.

• Permite 2*2k operações diferentes. • Permite 2n/2 células endereçáveis de memória ou o

mesmo número com a metade da resolução.

Page 6: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

6

♦ Expansão do código de operação:

• Exemplo: ∗ Máquina com instruções de 16 bits e endereços de 4

bits. ◊ Permite 16 códigos de operação (4 bits) com 3 endereços

de 4 bits

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Código de Operação

Endereço 1 Endereço 2 Endereço 3

∗ Alternativa possível: ◊ 15 instruções de 3 endereços.

• códigos de operação de 4 bits

◊ 14 instruções de 2 endereços. • códigos de operação de 8 bits

◊ 31 instruções de 1 endereço. • códigos de operação de 12 bits

◊ 16 instruções sem endereço. • códigos de operação de 16 bits

• Nem sempre os operandos tem o mesmo comprimento.

Page 7: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

7

∗ Código de operação expandido:

16 bits Código de 0000 xxxx yyyy zzzz 15 instruções deOperação de 0001 xxxx yyyy zzzz 3 endereços 4 bits 0010 xxxx yyyy zzzz . . . . . . . . 1100 xxxx yyyy zzzz 1101 xxxx yyyy zzzz 1110 xxxx yyyy zzzz Código de 1111 0000 yyyy zzzz 14 instruções de Operação de 1111 0001 yyyy zzzz 2 endereços 8 bits 1111 0010 yyyy zzzz . . . . . . . . 1111 1011 yyyy zzzz 1111 1100 yyyy zzzz 1111 1101 yyyy zzzz Código de 1111 1110 0000 zzzz 31 instruções deOperação de 1111 1110 0001 zzzz 1 endereço 12 bits . . . . . . . . 1111 1110 1110 zzzz 1111 1110 1111 zzzz 1111 1111 0000 zzzz 1111 1111 0001 zzzz . . . . . . . . 1111 1111 1101 zzzz 1111 1111 1110 zzzz Código de 1111 1111 1111 0000 16 instruções deOperação de 1111 1111 1111 0001 0 endereço 16 bits 1111 1111 1111 0010 . . . . . . . . 1111 1111 1111 1101 1111 1111 1111 1110 1111 1111 1111 1111

15 12 11 8 7 4 3 0

Número de bits

Page 8: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

8

Exemplos de Formato de Instrução

PDP-11

♦ Instrução possui um código de operação de 4 bits e dois campos de endereçamento de 6 bits (total de 16 bits).

♦ Código de Operação:

• Primeiro bit indica se a instrução opera sobre um byte ou sobre uma palavra.

♦ Operando:

• 3 bits para modo ∗ Operando é registrador, ∗ Operando está na memória, ∗ Operando é uma constante, ...

• 3 bits para registrador (8 registradores)

♦ Os modos são os mesmos para os operandos fonte e destino.

♦ Qualquer operação atua sobre qualquer operando fonte e destino (código de operação é dito ortogonal).

Código de Operando Fonte Operando Destino Byte/

Pal. INSTRUÇÃO MODO REGISTRADOR MODO REGISTRADOR

Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

♦ As intruções de um operando utilizam o código de escape x111, sendo o código de operação representado por 10 bits e o operando por 6 bits.

Page 9: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

9

♦ As instruções que endereçam memória possuem 1 ou 2 palavras adicionais de 16 bits para especificar os endereços.

A Família Intel 8088/80286/80386

♦ Instruções não são muito regulares.

• Geralmente, para uma instrução de dois operandos, se um operando está na memória, o outro não pode estar na memória (código não ortogonal).

♦ 8088

• Todo código de operação é de 1 byte.

♦ 80386

• Novas instruções: o código de operação 15 (1111) funciona como um escape para os códigos de operação de 2 bytes.

♦ O bit menos significativo do código de operação indica em algumas instruções se a operação é sobre um byte ou palavra. O bit subseqüente indica se o endereço de memória (se for o caso) é fonte ou destino.

Page 10: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

10

CPU Comprimento de campos (em bytes)

8088 0-3 1 0-1 0 0-2 0-2 80286 0-3 1 0-1 0 0-2 0-2 80386 0-5 1-2 0-1 0-1 0-4 0-4

Formato

da Instrução

Prefixo Código de

Operação

Modo SIB Desloca-mento

Imediato

Bits 6 1 1 2 3 3

INSTRUÇÃO Fonte B/P ESCALA ÍNDICE BASE

2 3 3

MOD REG R/M

♦ Na maioria das instruções, o byte após o código de operação indica onde se localizam os operandos:

• Modo (2) ∗ 4 maneiras de se endereçar um operando.

• Registrador (3) ∗ AX, BX, CX, DX, SI, DI, BP ou SP. ou ∗ AH, BH, CH, DH, AL, BL, CL ou DL.

• Registrador/Memória (3) ∗ O outro registrador ou o modo de endereçamento a

memória (depende do Modo).

♦ No 80386, alguns dos modos requerem um byte adicional, SIB (Escala, Índice, Base), referente a outros modos de endereçamento.

Page 11: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

11

♦ Algumas instruções possuem mais 1, 2 ou 4 bytes adicionais para especificar um endereço de memória.

♦ Algumas instruções possuem mais 1, 2 ou 4 bytes adicionais para especificar um operando constante.

♦ Tamanho das instruções:

• 8088/80286: 1 a 9 bytes. • 80386: 1 a 17 bytes.

Page 12: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

12

A Família Motorola 68000/68020/68030

♦ Tem 3 comprimentos de dados (byte, palavra, palavra longa).

♦ Tentativa de construir todas as instruções em 16 bits.

• 18 formatos diferentes de instruções (menos ponto-flutuante).

• Existem palavras adicionais para prover endereços de memória e constantes para a instrução.

• Existe um espaço maior para as instruções mais importantes e mais utilizadas. ∗ Instrução Move: formato 1 (só dois bits

especificam esta instrução).

• CÓD. OPERAÇÃO: 2, 4, 8, 9, 10, 11, 12, 16 bits. • TAM: 1-byte, 2-palavra longa, 3-palavra. • OPERANDO: 6 bits.

∗ Modo: 3 bits. ∗ Registrador: 3 bits.

◊ 1 dos 8 registradores A ou 1 dos registradores D.

♦ A maioria das instruções de 2 operandos utiliza um campo REG para especificar o segundo operando. Desta forma, perde-se a ortogonalidade nestas instruções, pois só é permitido um dos operandos na memória.

Page 13: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

13

♦ Formatos de instrução utilizados no 68000 (primeira palavra):

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

1 OP TAM. OPERANDO OPERANDO MOVE

2 CÓD. OPER. REG MOD OPERANDO ADD, AND, CMP, SUB

3 CÓD. OPER. REG OP OPERANDO CHK, DIVS, LEA, MULS

4 CÓD. OPER. REG MOD OP REG MOVEP

5 CÓD. OPER. REG OP TAM OP REG ASL, ASR, ROL, ROR

6 CÓD. OPER. REG COD. OPER. REG ABCD, EXG, SBCD

7 CÓD. OPER. REG OP DADO MOVEQ

8 CÓD. OPER. CONT. OP OP TAM OP REG ASL, ASR, ROL, ROR

9 CÓD. OPER. DADO OP TAM OPERANDO ADDQ, SUBQ

10 CÓD. OPER. CONDIÇÃO OP OPERANDO Scc

11 CÓD. OPER. CONDIÇÃO DESLOCAMENTO Bcc

12 CÓD. OPER. CONDIÇÃO COD. OPER. REG DBcc

13 CÓDIGO DE OPERAÇÃO TAM OPERANDO ADDI, CMPI, NEG, TST

14 CÓDIGO DE OPERAÇÃO TAM OPERANDO MOVEM

15 CÓDIGO DE OPERAÇÃO OPERANDO JMP, JSR, NBCD, PEA

16 CÓDIGO DE OPERAÇÃO VETOR TRAP

17 CÓDIGO DE OPERAÇÃO REG EXT, LINK, SWAP,

NLINK

18 CÓDIGO DE OPERAÇÃO NOP, RESET, RST,

TRAPV

Page 14: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

14

♦ A diferenciação entre os formatos de instrução não se dá sempre pelos bits 12 a 15 para os formatos de 2 a 12:

ADDQ 0 1 0 1 DADO 0 TAM Modo Reg

SUBQ 0 1 0 1 DADO 1 TAM Modo Reg

Scc 0 1 0 1 CONDIÇÃO 1 1 Modo Reg

DBcc 0 1 0 1 CONDIÇÃO 1 1 0 0 1 REG

• Obs: Tamanho 11 é inválido.

♦ Nos microprocessadores 68020, 68030 o problema se agrava, devido a existência de instruções adicionais.

• Compiladores e montadores mais complexos. • Microprogramas mais complicados.

Page 15: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

15

3.2. Endereçamento

♦ As instruções podem ser classificadas de acordo com o número de endereços que elas utilizam. Estes endereços podem ser:

• Número do registrador a ser utilizado. ∗ Os registradores da CPU constituem uma memória

de alta velocidade e, portanto, um espaço de endereçamento.

• Posição de memória.

♦ Instruções comuns: especificam 1, 2 ou 3 endereços.

♦ Em muitas máquinas que fazem operações aritméticas com um endereço apenas, um registrador especial denominado Acumulador provê um dos operandos.

♦ Instruções de 1 endereço: em geral envolvem o Acumulador.

• Acumulador := Acumulador + Registrador 1 • Acumulador := Acumulador + Memória[ end1 ]

♦ Instruções de 2 endereços: utilizam um dos endereços como fonte e o outro como destino ou fonte/destino.

• Fonte/Destino := Fonte/Destino + Fonte

♦ Instruções de 3 endereços: utilizam dois endereços como fonte e o terceiro como destino.

• Destino := Fonte 1 + Fonte 2

♦ O modo de endereçamento de um operando está relacionado com a forma como os campos de endereço da

Page 16: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

16

instrução são interpretados para se encontrar um operando.

Page 17: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

17

Endereçamento Imediato

♦ É a maneira mais simples de uma instrução especificar um operando, pois a parte da instrução relativa ao endereço contém o operando propriamente dito (valor), e não o local onde ele possa ser encontrado.

♦ Tal operando é dito operando imediato.

♦ O operando é buscado na memória ao mesmo tempo que a instrução é buscada.

♦ Vantagem: não requer um referência extra à memória para se buscar o operando.

♦ Desvantagem: restringe o operando a um valor que possa caber dentro do campo de endereçamento.

• Se o campo de endereço for de 3 bits, sua utilização fica limitada.

Page 18: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

18

Família Intel:

♦ Não possui um modo de endereçamento para operandos imediatos.

♦ Possui instruções distintas nas quais um dos operandos é imediato.

Família Motorola:

♦ Possui um modo de endereçamento imediato; qualquer operando fonte pode ser uma constante.

• 68000: algumas instruções permitem constantes de 8 ou 16 bits.

• 68020, 68030: permitem constantes de 8, 16 ou 32 bits. • Existem instruções especiais (ADDI, ADDQ e CMPI)

que permitem uma codificação mais eficiente de instruções imediatas: ∗ Constantes imediatas pequenas são incluídas dentro

da palavra da instrução, sem a necessidade de se acrescentar bytes adicionais ao final da instrução.

Page 19: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

19

Endereçamento Direto

♦ A instrução fornece o endereço da palavra de memória onde o operando está contido.

♦ Exemplo:

• “Carga do registrador R1 com o conteúdo da posição de memória de endereço 1000”.

Endereço

Código de Operação

(*) R1 1000

(*) Campos que Especificam o

Endereçamento Direto

1000 1510 1510 4

R1 1510

∗ Passo 1: O operando é buscado da posição 1000. ∗ Passo 2: O operando é carregado em R1.

Page 20: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

20

Intel:

♦ Todas as CPUs possuem endereçamento direto.

• 8088/80286: ∗ Endereços diretos de 16 bits.

• 80386: ∗ Utiliza endereços diretos de 16 bits nos modos real e

virtual, e segmentos de 16 bits no modo protegido. ∗ Utiliza endereços diretos de 32 bits no modo

protegido de 32 bits.

Motorola:

♦ Possui duas formas de endereçamento direto:

• 16 bits ∗ Para endereçamento dos primeiros 64 Kbytes de

memória. • 32bits

∗ Para endereçamento acima dos 64 Kbytes.

♦ As formas de endereçamento direto são indicadas no campo MODO de 3 bits e se aplicam a todos os operandos da instrução.

Page 21: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

21

Endereçamento de Registrador

♦ Conceitualmente é semelhante ao endereçamento direto. O campo de endereço da instrução contém o número do registrador no qual o operando está armazenado.

♦ O endereçamento da máquina deve ter duas partes:

• Um bit para indicar se será utilizada uma posição de memória (endereçamento direto) ou um registrador (endereçamento de registrador) na instrução.

• Um campo de endereço com o número do registrador (endereçamento de registrador) ou endereço de uma palavra na memória (endereçamento de direto).

♦ O número de registradores é muito menor do que o número de palavras de memória: logo, os formatos freqüentemente são diferentes (para garantir instruções menores).

♦ Fica mais claro quando o bit que diferencia estes dois tipos de endereçamento se encontra no campo de endereçamento e não no código de operação.

♦ Motivos para a utilização de registradores:

• O acesso aos registradores é mais rápido do que o acesso a palavras na memória.

• O endereçamento dos registradores requer apenas alguns bits, pois estes são em pequeno número.

♦ “Problema”: complica a programação, pois sendo em pequeno número, o programador (ou o compilador) deve decidir quais operandos e resultados intermediários devem permanecer em registrador.

Page 22: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

22

♦ Disponível em quantidade nas CPUs Intel e Motorola.

Page 23: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

23

Endereçamento Indireto

♦ O campo de endereçamento da instrução especifica qual a palavra de memória ou registrador contém o endereço do operando.

♦ Exemplo:

• “Carga do registrador R1 de forma indireta a partir da posição de memória de endereço 1000”.

Endereço

Código de Operação

(*) R1 1000

(*) Campos que Especificam o

Endereçamento Indireto

Apontador

1000 1510 1510 4

R1 4

• Passo 1: O apontador para o operando é buscado da posição 1000.

• Passo 2: O operando é buscado na posição 1510. • Passo 3: O operando é carregado em R1.

Page 24: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

24

Intel:

♦ Os processadores Intel possuem endereçamento indireto via registrador, mas não permitem um endereçamente indireto na memória.

♦ 8088/80286:

• Registradores utilizados para endereçamento indireto: BX, SI e DI.

♦ 80386:

• Todos os registradores podem ser utilizados.

Motorola:

♦ 68000:

• Permite somente o endereçamento indireto via registrador.

♦ 68020 e 68030:

• Permitem também o endereçamento indireto via memória.

♦ Existem processadores que permitem endereçamento indireto de múltiplos níveis na memória.

Page 25: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

25

Endereçamento Indexado

♦ Muitos algoritmos necessitam da execução de alguma operação sobre uma seqüência de dados armazenados em posições consecutivas de memória.

♦ Exemplo:

• Bloco de n palavras ocupando as posições: A, A+1, A+2,..., A+n-1

que devem ser copiadas para as posições: B, B+1, B+2,..., B+n-1

• Uma solução possível: se a máquina possuir uma instrução

MOVE A, B que copia o conteúdo da posição A para a posição B e

modifica a própria instrução para: MOVE A+1, B+1

e a executa novamente, e assim sucessivamente, até completar as n interações.

Problema: os programas ficam difíceis de se depurar (programa altera a si próprio).

♦ Outra solução: utilizar o endereçamento indireto. A cada movimentação são alterados os apontadores, que são dados.

♦ No endereçamento indexado é utilizado um ou mais registradores de índice. Neste caso, os endereços possuem duas partes:

• O número de um registrador de índice. • Uma constante.

Page 26: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

26

♦ O endereço do operando é a soma da constante com o conteúdo do registrador de índice.

♦ No exemplo anterior, se o registrador de índice possuir o valor k, a instrução MOVE A,B copiará o conteúdo da posição de memória A+k para B+k. Basta o registrador de índice ser inicialmente carregado com o valor 0, e ser incrementado do tamanho da palavra de memória a cada palavra copiada.

♦ Algumas máquinas incrementam ou decrementam o conteúdo do registrador de índice antes ou depois de cada utilização: auto-indexação.

♦ CPUs Intel e Motorola: possuem endereçamento indexado.

Page 27: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

27

Endereçamento de Pilha

♦ É desejável a existência de instruções de máquina tão curtas quanto possível.

• Economia de memória e tempo de CPU.

♦ Instruções sem endereço possuem apenas o código de operação.

♦ Pode-se ter uma arquitetura baseada em instruções sem endereço, que se utilizam de uma estrutura de dados denominada pilha. Estas máquinas são denominadas de stack machines.

♦ Pilha: consiste em itens de dados (palavras, caracteres, bits) armazenados em ordem consecutiva na memória.

• Base (fundo) da pilha: é o primeiro item colocado na pilha.

• Ponteiro da Pilha: registrador ou palavra na memória que contém o endereço do topo da pilha (último dado armazenado).

Page 28: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

28

♦ Exemplo de funcionamento da pilha:

Apontador da pilha 1001 1002 1003 1002

Endereço

Fundo da

pilha

1000 100 100 100 100 1001 40 40 40 40 1002 6 6 6 1003 Topo da 75 1004 Pilha 1005 1006

(a) (b) (c) (d)

♦ Os computadores orientados para pilha possuem instruções para:

• Inserir o conteúdo de um registrador ou posição de memória na pilha, incrementando o ponteiro da pilha após armazenar o dado. ∗ Exemplo: PUSH.

• Copiar o conteúdo do topo da pilha para um registrador ou posição de memória, decrementando o ponteiro da pilha após armazenar o dado. ∗ Exemplo: POP.

♦ Em alguns computadores a pilha cresce no sentido contrário ao dos endereços.

• Exemplo: CPUs da família Intel.

Page 29: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

29

♦ Instruções sem endereço utilizam como operandos dados existentes na pilha.

• Exemplo: ∗ Uma instrução de adição obtém os dois operandos

retirando-os consecutivamente do topo da pilha e armazena o resultado na pilha. Os operandos são retirados da pilha após o uso.

Apontador da pilha

1003 1002 1001

Endereço

1000 4 4 4 1001 20 20 50 1002 6 30 1003 5 1004 Topo da

Pilha (a) (b) (c)

♦ Tipos de notação para uma operação envolvendo dois operandos:

• Notação Infixada: o operador é colocado entre os operandos. ∗ Exemplo: x + y.

• Notação Polonesa Reversa ou Notação Pós-Fixada: o operador é colocado após os operandos. ∗ Exemplo: x y +.

Page 30: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

30

Exemplos de Endereçamento

♦ Maneiras de se implementar as diversas formas de endereçamento:

• Utilizar um código de operação para cada modo: ∗ Exemplos:

◊ ADDim - ADD imediato ◊ ADDd - ADD direto ◊ ADDin - ADD indireto

• Fazer o modo de endereçamento como parte do endereço da instrução.

Page 31: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

31

Endereçamento no PDP-11

♦ Os modos de endereçamento são implementados de forma elegante, clara e simples.

♦ Os endereços são especificados por um campo de 6 bits.

• Instruções de dois endereços possuem dois destes campos.

♦ Existem 8 registradores: R0 a R7.

• R6 - Ponteiro da Pilha • R7 - Contador do Programa

∗ O Contador do Programa avança de 2 imediatamente após uma palavra de instrução ser buscada (2 bytes) e antes de ser executada.

♦ Todas as instruções têm 16 bits, sendo que as vezes são necessárias 1 ou 2 palavras adicionais após a instrução, que são utilizadas pela instrução (valor, endereço de memória) e podem ser consideradas como parte dela.

♦ Formato de uma instrução de dois endereços no PDP-11.

Palavra de 16 bits

End. Fonte Destino

N Código de Operação

Modo Fonte

RegistradorFonte

Modo Destino

RegistradorDestino

4 3 3 3 3

N+2 (Próxima Palavra 1)

N+4 (Próxima Palavra 2)

Page 32: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

32

♦ Descrição dos modos de endereçamento do PDP-11, onde R é o registrador especificado em Fonte ou Destino.

Modo Nome Como o operando é localizado

0 Endereçamento Registrador

O operando está em R.

1 Indireto Via Registrador

O R contém um apontador para o operando.

2 Auto-Incremento

O conteúdo de R é buscado e usado como um apontador para o operando. Após esse passo, mas antes de a instrução seguinte ser executada, R é incrementado de 1 (instruções de byte) ou 2 (instruções de palavra).

3 Auto-Incremento Indireto

O endereço de uma palavra na memória que contém um apontador para o operando é buscado em R. Então R é incrementado de 1 ou 2 antes de a instrução ser executada.

4 Auto-Decremento

R é primeiro decrementado de 1 ou 2. O novo valor de R é então usado como apontador para o operando.

5 Auto-Decremento Indireto

R é primeiro decrementado de 1 ou 2. O novo valor de R é então usado como endereço de uma posição de memória que contém um apontador para o operando.

6 Indexação

O operando está no endereço igual à soma de R (registrador de índice) e o deslocamento de 16 bits em complemento de 2 na próxima palavra. O contador de programa (R7) é incrementado de 2 imediatamente após a próxima palavra ser buscada.

7 Indexação + Endereçamento Indireto

A posição da memória que contém um apontador para o operando é encontrada somando o conteúdo de R e o deslocamento de 16 bits em complemento de 2 na próxima palavra. O contador de programa (R7) é incrementado de 2 imediatamente após a próxima palavra ser buscada.

• Casos especiais: ∗ Modos 6 e 7 requerem uma constante de 16 bits. ∗ Modo 2 com o registrador R7: endereçamento imediato. ∗ Modo 3 com o registrador R7: endereçamento direto. ∗ Modo 6 com o registrador R7: endereçamento auto-relativo ou

endereçamento independentemente de posição. Se utilizado no lugar do endereçamento direto, tem-se programas que podem ser carregados em qualquer posição de memória.

Page 33: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

33

♦ Exemplo: possibilidades da instrução MOV R, R4.

Palavra de 16 bits

End. Fonte Destino

1000 MOV (*) Modo Fonte

M

RegistradorFonte

R0 4

4 3 3 3 3

1002 (Próxima Palavra) K

(*) Considerando as instruções que manipulam palavras, com o primeiro bit igual a 1.

• Nomenclatura: ∗ R - registrador; ∗ $ - operando imediato; ∗ * - indica indireção.

• Um único código de operação produz um grande número de instruções diferentes, já que os modos de endereçamento fonte e destinos são especificados independentemente.

Page 34: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

34

Modo Fonte (M) R = 0 - 5 R = 6 R = 7

0 Move R para R4. Ex: MOV R3, R4

Move o apontador de pilha para R4. Ex: MOV SP, R4

Move o contador de programa para R4. Ex: MOV PC, R4

1 Move a palavra de memória apontada por R para R4. Ex: MOV *R3, R4

Move o topo da pilha para R4, mas não o remove da pilha. Ex: MOV *SP, R4

Move K para R4; o contador de programa não é incrementado, assim K será executado como a próxima instrução. Ex: MOV *PC. R4

2 Move a palavra de memória apontada por R para R4 e soma 2 a R. Ex: MOV (R3)+, R4

Remove uma palavra da pilha e a coloca em R4 (instrução de desempilhamento). Ex: MOV (SP)+, R4

Move K para R4 (endereçamento imediato). Ex: MOV $24, R4

3 Move para R4 a palavra da memória endereçada pela palavra que R aponta e soma 2 a R. Ex: MOV *(R3)+, R4

Desempilha o endereço do operando fonte e move o próprio operando fonte para R4. Ex: MOV *(SP)+, R4

Carrega R4 a partir do endereço de memória K (endereçamento direto). Ex: MOV *$24, R4

4 Decrementa R de 2 e então carrega R4 a partir do endereço apontado por R. Ex: MOV -(R3), R4

M=4 e R=6 não é fonte útil; entretanto, é usado como destino em instruções para empilhar. Ex. de empilhamento.: MOV $6, -(SP)

Não é usado. (causa um loop infinito).

5 Decrementa R de 2 e então carrega R4 indiretamente a partir do endereço apontado por R. Ex: MOV *-(R3), R4

Não é usado.

Não é usado. (causa um loop infinito).

6 Carrega R4 com a palavra de memória em (R) + K (indexação). Ex: MOV 24 (R3), R4

Carrega R4 com a palavra K/2 (posição abaixo do topo da pilha). Ex: MOV 24 (SP), R4

Carrega R4 com a palavra distante K/2 palavras desta instrução (endereçamento auto-relativo). Calculada pelo montador. Ex: MOV X, R4 (X calculado pelo montador)

7 Carrega R4 com a palavra de memória apontada por (R) + K (indexação + endereçamento indireto)

Carrega R4 a partir da palavra cujo endereço está K/2 palavras abaixo do topo da pilha.

Carrega R4 com a palavra apontada pela palavra distante K bytes desta instrução (endereçamento indireto).

Page 35: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

35

Ex: MOV *24 (R3), R4 Ex: MOV *24 (SP), R4 Ex: MOV *X, R4 (X calculado pelo montador)

Page 36: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

36

Endereçamento na Família Intel: 8088/80286/80386

♦ Os endereçamentos no 8088, 80286 e 80386 (considerando segmentos de 16 bits) são iguais.

♦ O byte MODO controla os modos de endereçamento. Um dos operandos é especificado pela combinação dos campos MOD (2 bits) e R/M (3 bits).

♦ O outro operando é sempre um registrador e é controlado pelo campo REG.

♦ Para MOD=00 e R/M=000, a soma BX+SI representa um ponteiro para a memória de onde será obtida a palavra ou byte, de acordo com bit menos significativo do código de operação.

MOD 00 01 10 11 000 M[BX + SI] M[BX + SI + DISP8] M[BX + SI + DISP16] AX ou AL

001 M[BX + DI] M[BX + DI + DISP8] M[BX + DI + DISP16] CX ou CL

010 M[BP + SI] M[BP + SI + DISP8] M[BP + SI + DISP16] DX ou DL R/M 011 M[BP + DI] M[BP + DI + DISP8] M[BP + DI + DISP16] BX ou BL

100 M[SI] M[SI + DISP8] M[SI + DISP16] SP ou AH 101 M[DI] M[DI + DISP8] M[DI + DISP16] BP ou CH

110 Endereçamento Direto M[BP + DISP8] M[BP + DISP16] SI ou DH

111 M[BX] M[BX + DISP8] M[BX + DISP16] DI ou BH

♦ Os modos não são ortogonais.

♦ A indireção é permitida apenas através dos registradores BX, SI e DI.

♦ Endereçamento direto existe, mas através da eliminação do registrador BP.

Page 37: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

37

♦ Somente algumas combinações de somas de registradores são permitidas para formar apontadores.

♦ Não existe nenhum modo imediato, que é implementado através de códigos de operações adicionais.

♦ Não é permitida a auto-indexação.

♦ O MOD=11 indica um segundo operando registrador. O bit 1 do código de operação indica qual o operando fonte e destino.

♦ 80386:

• Possui um novo esquema de endereçamento para os segmentos de 32 bits, que permite o endereçamento indireto através de mais registradores.

MODO 00 01 10 11 000 M[EAX] M[EAX + DISP8] M[EAX + DISP32] EAX ou AL 001 M[ECX] M[ECX + DISP8] M[ECX + DISP32] ECX ou CL

010 M[EDX] M[EDX + DISP8] M[EDX + DISP32] EDX ou DLR/M 011 M[EBX] M[EBX + DISP8] M[EBX + DISP32] EBX ou BL

100 SIB (*) SIB com DISP8 SIB com DISP32 ESP ou AH

101 Endereçamento Direto M[EBP + DISP8] M[EBP + DISP32] EBP ou CH 110 M[ESI] M[ESI + DISP8] M[ESI + DISP32] ESI ou DH

111 M[EDI] M[EDI + DISP8] M[EDI + DISP32] EDI ou BH (*) SIB - Escala, Índice, Base

• Quando o SIB (Escala, Índice, Base) está presente, tem-se: ∗ Endereço do operando é calculado pela soma do

Registrador de Base ao Registrador de Índice multiplicado pelo fator de escala (1, 2, 4 ou 8). Pode-se adicionar ainda um deslocamento de 8 ou 32 bits.

Page 38: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

38

∗ Exemplo de utilização do SIB: arranjos, como para o seguinte comando em Pascal:

for i:=0 to n do a[i]:=0; onde a é um arranjo de 4 bytes locais ao procedimento

corrente. Pode-se armazenar a[i] numa única instrução, enquanto no

8088 seriam necessárias 4 instruções.

EBP

Estrutura de Pilha

Outras variáveis

locais

i em EAX

a [ 0 ] EBP + 8 M[4 * EAX + EBP + 8] a [ 1 ] EBP + 12 a [ 2 ] EBP + 16

Page 39: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

39

Endereçamento na Família Motorola: 68000/68020/68030

♦ Cada operando é especificado por um campo de 6 bits:

• 3 bits para especificar o modo de endereçamento. • 3 bits para especificar o registrador.

♦ O ponteiro da pilha é endereçável (A7), sendo que todos os modos de endereçamento de pilha se aplicam.

Modo Reg Palavras

Extras Descrição

0 D 0 Operando no registrador D. 1 A 0 Operando no registrador A. 2 A 0 Apontador para o operando no registrador A. 3 A 0 Apontador em A; auto-incrementa A após o uso. 4 A 0 Auto-incrementa A; então usa-o como

apontador. 5 A 1 Modo indexado com deslocamento de 16 bits. 6 A 1 A + registrador de índice + deslocamento de 8

bits produz o endereço 7 0 1 Endereçamento direto com endereço de 16 bits. 7 1 2 Endereçamento direto com endereço de 32 bits. 7 2 1 O endereço do operando é PC + deslocamento de

16 bits. 7 3 1 O endereço do operando é PC + índice +

deslocamento de 8 bits. 7 4 1 ou 2 Dado imediato.

♦ Novos modos de endereçamento foram adicionados para permitir o acesso a arranjos e outras estruturas a partir de uma única instrução, a partir do 68020.

Page 40: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

40

♦ Exemplo de instrução do 680x0:

a) Instrução de um operando no 680x0. b) Palavra de extensão no 68000. c) Formato curto da palavra de extensão no 68020 e 68030. d) Formato completo de palavras de extensão no 68020 e

68030.

Bits 10 3 3

(a) CÓDIGO DE OPERAÇÃO MODO REG

(b) D/A REG W/L 00 0 DESLOCAMENTO

(c) D/A REG W/L ESCALA 0 DESLOCAMENTO D/A REG W/L ESCALA 1 BS IS TAM. DE DB 0 I/IS

(d) DESLOCAMENTO BASE (0, 1 ou 2 palavras) DESLOCAMENTO EXTERNO (0, 1 ou 2 palavras)

Legenda: D/A - 0 seleciona um registrador D; 1 seleciona um registrador A. REG - seleciona um registrador (0-7) ou um índice. W/L - 0 indica palavra; 1 indica palavra longa. ESCALA - 0-3 indica fatores de escala 1, 2, 4 ou 8. BS - suprime registrador de base. IS - suprime registrador de índice. TAMANHO DE DB - Tamanho do deslocamento em relação a base

(0, 1 ou 2 palavras). I/IS - Seleciona entre indexado ou indireto.

Page 41: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

41

Discussão Acerca dos Modos de Endereçamento

♦ Os modos de endereçamento geralmente utilizados pelos compiladores de linguagens de alto nível são:

• Auto-indexação ∗ Empilhamento e desempilhamento de parâmetros

de procedimentos. • Direto

∗ Acesso a variáveis globais. • Imediato

∗ Transferência de constantes. • Indexado

∗ Acesso a variáveis locais. • Registrador

∗ Armazenamento de variáveis locais. • Registrador indireto

∗ Armazenamento de ponteiros de estruturas.

Page 42: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

42

PDP-11:

♦ Possui 8 modos de endereçamento, sendo os modos 1, 3, 5, 7 iguais aos modos 0, 2, 4, 6 adicionando-se uma indireção.

♦ Esquema simples, fácil de ser entendido e implementado a nível de micro-código, e engloba todas as formas de endereçamento importantes.

Motorola 68000:

♦ Tentou-se copiar o esquema do PDP-11, mas existiam 16 registradores ao invés de 8. Logo, sobrariam 2 bits para o campo modo.

♦ Optou-se por ter um modo de endereçamento para os registradores D e a maioria funcionando somente para os registradores A.

♦ Difere do PDP-11 por não permitir modos de endereçamento envolvendo o contador do programa.

♦ Os modos de endereçamento mais importantes estão presentes.

♦ Modos de endereçamento quase ortogonal para os códigos de operação.

♦ Os processadores 68020 e 68030 incorporaram novos modos de endereçamento complicados:

• Microcódigo e compiladores mais complicados.

Page 43: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

43

Intel 8088 e 80286:

♦ Possuem apenas 2 bits de modo de endereçamento.

♦ Todos os 8 registradores de uso geral são diferentes.

♦ Somente 3 registradores permitem endereçamento indireto (SI, DI e BX) e somente 4 registradores permitem indexação (SI, DI, BX e BP).

♦ O modo de endereçamento imediato é suprido pela existência de códigos de operação específicos para isso.

♦ Não permitem a auto-indexação (existem instruções específicas para a manipulação de cadeia de caracteres que implementam a auto-indexação).

♦ Não possui endereçamento de pilha, permitindo o acesso a pilha através das instruções PUSH e POP. O PUSP não permite o armazenamento de valores imediatos na pilha.

♦ O 80386 possui um modo de endereçamento melhor com a criação do byte SIB.

DEC VAX:

♦ Solução para se utilizar mais registradores e manter a ortogonalidade: 4 bits para o modo e 4 bits para o registrador.

♦ Cada operando necessita de 1 byte.

♦ Uma instrução de dois operandos necessita de no mínimo 3 bytes.

Page 44: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

44

3.3. Tipos de Instrução

Instruções de Transferência de Dados

♦ Transferência de dados significa a cópia de dados de um lugar para outro, e é a mais fundamental de todas as operações.

♦ A transferência neste contexto significa a criação de um novo objeto com o mesmo padrão de bits do original, deixando a cópia original intacta.

♦ Locais possíveis de armazenamento de dados:

• palavra na memória • registrador • pilha (pode ser implementada em registradores ou na

memória, mas a forma de acessá-la é particular).

♦ Devem especificar implicitamente ou explicitamente o operando fonte (original) e destino (onde será guardada a cópia).

♦ Exemplos:

• Motorola (680x0): ∗ MOVE: instrução de propósito geral, que permite a

transferência entre registradores, memória ou pilha. • Intel (8088/80x86):

∗ MOV, etc: instruções bem mais limitadas. Existem muitas delas, que tornam possível a transferência entre dois lugares quaisquer.

Page 45: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

45

Operações Diádicas

♦ Operações diádicas são aquelas que combinam dois operandos para produzir um resultado.

♦ Encontramos neste grupo as operações aritméticas e lógicas.

♦ Instruções Aritméticas:

• Adição, subtração, multiplicação e divisão.

♦ Instruções Lógicas:

• AND, OR, XOR. • AND: calcula o produto booleano bit a bit de dois

argumentos de uma palavra cada, gerando como resultado também uma palavra. ∗ Uso importante: extração de bits de uma palavra,

através de uma máscara. A operação AND tende a remover os bits iguais a 1.

∗ Exemplo: extração do segundo caractere de uma palavra de 4 bytes para ser imprimido. ◊ Solução: isolá-lo dos demais bytes e justificá-lo à direita. ◊ Extração:

10110111 10111100 11011011 10001011 A

00000000 11111111 00000000 00000000 B (máscara)

00000000 10111100 00000000 00000000 A AND B

• OR: calcula a operação booleana OR bit a bit de dois argumentos de uma palavra cada, gerando como resultado também uma palavra.

Page 46: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

46

∗ Uso importante: empacotamento de bits em uma palavra, que significa o inverso da extração. A operação OR tende a inserir bits 1 no resultado.

∗ Exemplo: trocar os 8 bits mais à direita de uma palavra de 4 bytes, sem alterar os demais bits. ◊ Solução: limpar o byte a ser alterado, mantendo os

demais, e incluir o novo byte. ◊ Empacotamento:

10110111 10111100 11011011 10001011 A

11111111 11111111 11111111 00000000 B (máscara)

10110111 10111100 11011011 00000000 A AND B

00000000 00000000 00000000 01010111 C

10110111 10111100 11011011 01010111 (A AND B) OR C

• XOR: calcula a operação booleana XOR bit a bit de dois argumentos de uma palavra cada, gerando como resultado também uma palavra. ∗ Uso importante: permite a inversão de

determinados bits de uma palavra, aplicando a operação XOR com um operando que possua 1s nestes bits. A operação XOR com um bits iguais a 0 não altera o resultado.

∗ É uma operação simétrica, pois na média não tende nem a inserir nem a remover bits iguais a 1.

Page 47: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

47

∗ Exemplo: inverter os 8 bits do segundo caractere de uma palavra de 4 bytes, sem alterar os demais bits. ◊ Inversão de bits:

10110111 10111100 11011011 10001011 A

00000000 11111111 00000000 00000000 B (máscara)

10110111 01000011 11011011 10001011 A XOR B

♦ Operações aritméticas em ponto-flutuante:

• Antigamente eram implemantada via software. • Atualmente muitas máquinas possuem instruções de

máquina que implementam operações em ponto-flutuante diretamente por hardware (maior velocidade). ∗ Tamanho menor dos operandos: maior velocidade. ∗ Tamanho maior dos operandos: maior precisão.

• Em muitos casos estas operações são realizadas por processadores numéricos, também chamados de co-processadores. Tais processadores realizam também outras operações que não sejam de ponto-flutuante.

Page 48: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

48

Operações Monádicas

♦ Operações monádicas são aquelas que têm um operando e produzem um resultado.

♦ Em geral são mais curtas que as operações diádicas, pois só necessitam da especificação de um operando.

♦ Encontramos neste grupo as operações para deslocar e rodar o conteúdo de uma palavra.

♦ Deslocamentos: são operações nas quais os bits do operando são movidos para a esquerda ou direita, perdendo os bits deslocados para fora da palavra, formando o resultado.

• As posições vagas são preenchidas com 0. • Um deslocamento para a direita de k bits significa uma

divisão do operando por 2k. • Um deslocamento para a esquerda de k bits significa uma

multiplicação do operando por 2k. • Exemplo: deslocamento de 2 bits de uma palavra para a

direita.

00000000 00000000 00000000 01110011 A

00000000 00000000 00000000 00011100 11

A deslocado de 2 bits para a direita

Page 49: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

49

♦ Rotações: são operações nas quais os bits do operando são movidos para a esquerda ou direita, sendo que os bits que saem da palavra reaparecem do outro lado, formando o resultado.

• Exemplo: rotação de 2 bits de uma palavra para a direita.

00000000 00000000 00000000 01110011 A

11000000 00000000 00000000 00011100 A rodado de 2 bits para a direita

• Propriedade: “Se uma palavra de n bits é rodada k bits para um lado, o resultado é o mesmo caso tivesse sido rodada n-k bits para o outro lado”.

♦ Deslocamentos com sinal: são operações de deslocamentos para a direita que mantêm o sinal do operando para gerar o resultado.

• Na prática, isso significa que as posições vagas do lado esquerdo são preenchidas com o bit de sinal original, 0 ou 1. Logo, um número negativo permanecerá negativo.

Page 50: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

50

• Exemplo: deslocamento de 2 bits de uma palavra para a direita, sem a extensão do sinal e com a extensão do sinal.

11111111 11111111 11111111 11110000 A

00111111 11111111 11111111 11111100 A deslocado de 2 bits para a direita sem extensão do sinal

11111111 11111111 11111111 11111100 A deslocado de 2 bits para a direita com extensão do sinal

♦ Certas operações diádicas muito utilizadas com operandos específicos podem ser fornecidas na forma monoádica.

• Exemplos: ∗ Mover o valor 0 para uma palavra de memória ou

registrador: ◊ Instrução CLEAR.

∗ Somar/subtrair 1 a/de uma palavra de memória ou registrador: ◊ Instrução INC/DEC.

∗ Negar o valor de X (significa fazer a operação 0 - X): ◊ Instrução NEGATE.

• Intel: as suas CPUs fornecem instruções INC e DEC. • Motorola: as suas CPUs fornecem instruções mais

genéricas, ADDQ e SUBQ que podem somar ou subtrair uma constante na faixa de 1 a 8.

Page 51: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

51

Comparações e Desvios Condicionais

♦ Praticamente todos os programas precisam da capacidade de testar seus dados e alterar a seqüência de instruções a serem executadas.

• Exemplo: x ∗ Se x é negativo, retorna mensagem de erro; caso

contrário, calcular a raiz quadrada de x.

♦ Solução: a máquina deve possuir instruções de salto condicional (desvio condicional).

♦ As instruções de desvio condicional testam alguma condição e saltam para um determinado endereço se a condição é satisfeita, e continuam a seqüência normal do programa caso contrário.

• O desvio pode ocorrer se uma determinada condição for satisfeita ou então se uma determinada condição não for satisfeita, de acordo com algum bit da instrução.

♦ A condição mais comum a ser testada é se um bit específico na máquina é 0 ou 1.

Page 52: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

52

• Exemplo: teste do bit de sinal de um resultado. ∗ Se o bit de sinal é 1 (número negativo), o programa

continua a partir do endereço Rótulo. Se o bit de sinal é 0, o programa continua a partir da instrução seguinte a instrução de salto.

JNEG REG1, Rótulo ; desvia se o registrador REG1 for negativo. INSTR

1 ; próxima instrução caso REG1 seja positivo.

INSTR2

. . Rótulo: INSTR

3 ; próxima instrução caso REG1 seja negativo.

INSTR4

. .

♦ Muitas máquinas possuem bits que são utilizados para indicar condições específicas, denominados flags de máquina. Os flags, de certa forma, indicam o estado atual do processador, e em geral refletem o ocorrido na ULA após a última operação lógica ou aritmética executada.

• Exemplo: vai-um do bit mais a esquerda de uma operação, indicando o estouro numa operação aritmética.

♦ Teste do bit mais a direita de uma palavra: permite avaliar se um número é par ou ímpar.

♦ Teste por zero: permite avaliar se uma palavra é 0 ou não, sendo importante para loops.

Page 53: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

53

♦ Comparação entre duas palavras: permite avaliar se elas são iguais ou qual é a maior.

• Instrução que a princípio precisa de três endereços: dois para os operandos e um para o endereço de desvio.

• Se a máquina não permite instruções de três endereços, uma solução é disponibilizar dois tipos de instruções: ∗ Instrução de comparação, que armazena alguns bits

de condição a respeito do resultado. ∗ Instrução de desvio condicional, que consulta os bits

de condição e eventualmente faz o desvio. ∗ Este tipo de solução é adotada pelas famílias

Motorola e Intel.

♦ O resultado de uma comparação depende dos sinais dos operandos. Em geral, faz-se a comparação entre dois valores de mesmo sinal, ou precisa-se ter instruções específicas para números sem sinal e números com sinal.

Sem sinal Com sinal 0 000 100 -4 1 001 101 -3 2 010 110 -2 3 011 111 -1 4 100 000 0 5 101 001 1 6 110 010 2 7 111 011 3

♦ Outra forma de desvio condicional: pular a próxima instrução.

♦ Desvio Incondicional é um desvio que sempre é satisfeito. Logo, necessita de um endereço somente.

Page 54: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

54

Instruções de Chamada de Procedimentos

♦ Procedimento ou sub-rotina ou simplesmente rotina: é um grupo de instruções que realiza uma tarefa e que pode ser chamado de diversas partes do programa.

♦ Um procedimento, após ser executado, deve retornar para o comando após a sua chamada.

• O procedimento deve receber de alguma forma o endereço para onde ele deve retornar após realizar a sua tarefa (endereço de retorno).

• Formas de se armazenar o endereço de retorno: ∗ Memória:

◊ Posição Fixa: não permite encadeamentos de sub-rotinas.

◊ Primeira palavra da sub-rotina: cada sub-rotina sabe onde buscar o endereço de retorno. Não permite recursão direta ou indireta.

∗ Registrador: ◊ A instrução de chamada de sub-rotina armazena o

endereço de retorno num registrador, deixando a cargo da sub-rotina armazenar o endereço num local seguro.

∗ Pilha: ◊ A instrução de chamada de sub-rotina armazena o

endereço de retorno na pilha. A sub-rotina, para retornar, desempilha o endereço da pilha e o coloca no contador do programa (logo, retorna).

◊ Método utilizado pela Intel e Motorola.

Page 55: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

55

Controle de Loop

♦ Um programa em geral necessita executar um grupo de instruções um número fixo de vezes - loop.

♦ O controle de loop pode ser implementado através das instruções elementares, devendo:

• Ter um contador, que é decrementado ou incrementado de uma constante a cada interação.

• Testar o contador a cada interação, terminando o loop se uma condição for atingida.

♦ Tipos de loop:

• Loop com teste no final ∗ Sempre será executado ao menos uma vez. Falha

para n igual a zero. • Loop com teste no início

♦ Exemplos de controles de loops: i:=1; i:=1; 1: {primeiro comando} 1: if i > n then goto 2; {segundo comando} {primeiro comando} . {segundo comando} . . {último comando} . i := i + 1; {último comando} if i <= n then goto 1; i := i + 1; 2: {primeiro comando após o loop} goto 1; 2: {primeiro comando após o loop}

(a) teste no final (b) teste no início Código equivalente em Pascal

for i := 1 to n do begin ... end

Page 56: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

56

♦ Algumas máquinas podem disponibilizar instruções especiais que fazem o controle de contagem de interações, teste de condição e desvio numa única instrução.

• Intel: ∗ 8088/80286: Instrução LOOP, que decrementa o

registrador CX de 1 e salta para um dado rótulo se o resultado não for 0. Se for 0, a execução continua a partir da próxima instrução.

∗ 80386: Idem para o registrador ECX. • Motorola:

∗ Instrução para uma solução mais geral: ◊ Primeiro testa uma determinada condição, que se não

satisfeita, encerra o loop. ◊ Decrementa um registrador D, que se resultar num valor

maior ou igual a 0, repete o loop; caso contrário, encerra o loop.

Page 57: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

57

Entrada e Saída

♦ Apresentam grande variação de máquina para máquina.

♦ Se o espaço de endereçamento de entrada e saída (E/S) não estiver mapeado em memória (ou seja, os dispositivos de E/S também possuem endereços, da mesma forma que a memória), devem existir instruções especiais (mapeamento em E/S) que permitam:

• A leitura de um dado num dispositivo de entrada. ∗ Instrução: IN.

• A escrita de um dado num dispositivo saída. ∗ Instrução: OUT.

♦ Intel:

• Instruções específicas para E/S: IN e OUT: ∗ Especificam o endereço da porta de E/S de forma

direta ou indireta via registrador DX. ∗ Utilizam o registrador AX / EAX como elemento de

transferência entre o dispositivo e a CPU.

♦ Motorola:

• Registradores dos dispositivos são endereçados via mapeamento de memória.

Page 58: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

58

3.4. Fluxo de Controle

♦ O Fluxo de controle corresponde à seqüência na qual as instruções são executadas.

♦ As instruções executadas sucessivamente são buscadas de posições de memória consecutivas.

♦ As alterações do fluxo normal de controle do programa podem ocorrer através de:

• Chamadas de Procedimentos. • Co-rotinas. • Armadilhas (Traps). • Interrupções.

Page 59: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

59

Fluxo de Controle Seqüencial e Desvios

♦ Após a execução de cada instrução:

• O contador de programa é incrementado do número de posições de memória da instrução (comprimento da instrução).

• A próxima instrução é buscada na memória e executada.

♦ Ao longo do tempo, o contador do programa é aproximadamente uma função linear crescente em função do tempo (as instruções são executadas na ordem em que aparecem numa listagem).

• Se não houver desvio (a), o contador avança linearmente. • Se houver desvio (b), o contador avança linearmente por

partes, entre os desvios.

Desvios

Tempo

Tempo

(a) Sem desvios

(b) Com desvios

C O N T A D O R

D O

P R O G R A M A

CONTADOR

DO

PROGRAMA

Page 60: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

60

Procedimentos

♦ A utilização de procedimentos é a técnica mais importante para se estruturar programas.

♦ A chamada de um procedimento altera o fluxo de controle do programa, como ocorre com um desvio, mas permite o retorno para a instrução seguinte à instrução de chamada.

♦ A instrução de chamada de um procedimento pode ser entendida como uma instrução de alto nível. O que importa é o que o procedimento faz, não como ele faz.

♦ Procedimento recursivo: é um procedimento que chama a si mesmo.

• Exemplos de problemas solucionados através de procedimentos recursivos: ∗ Torre de Hanói. ∗ Fatorial: 5! = 5 * 4! = 5 * 4 * 3! = 5 * 4 * 3 * 2! ...

Page 61: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

61

♦ Chamada de um procedimento B a partir de um procedimento A:

(A) (B) Procedimento

que chama Procedimento

chamado A chamado

pelo programa principal A retorna ao programa principal

♦ O procedimento B sempre começa do seu início.

♦ Sistema de chamada e retorno de um procedimento:

• O procedimento A utiliza uma instrução de chamada de sub-rotina (p.ex. CALL), que armazena o endereço de retorno, por exemplo, no topo da pilha, e carrega o contador do programa com o endereço do procedimento B.

• Para retornar, o procedimento B executa uma instrução de retorno (p.ex. RET), que retira do topo da pilha o endereço de retorno e o transfere para o contador do programa.

Page 62: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

62

Co-rotinas

♦ Co-rotinas são procedimentos que chamam uns aos outros, sendo que a cada nova chamada o procedimento continua do ponto onde parou na última vez, ou seja, a partir do comando seguinte ao último retorno.

(A) (B) A chamado

pelo programa principal A retorna ao programa principal

♦ Este esquema pode ser implementado se existir alguma instrução que permita trocar o topo da pilha com o contador do programa. Inicialmente é necessário a colocação do endereço de uma das duas co-rotinas na pilha.

• Uma instrução de chamada de co-rotina é denominada de resume.

Page 63: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

63

Armadilhas (Traps)

♦ Uma armadilha ou trap é um tipo de chamada automática de procedimento disparada por alguma condição causada pelo programa; em geral, uma condição importante ou rara.

♦ Exemplo: estouro numa operação aritmética (overflow).

• Numa operação aritmética, ao ocorrer um resultado que excede o maior número que puder ser representado, ocorre um trap, o que significa que o fluxo de controle será transferido para alguma posição fixa na memória em vez de continuar seqüencialmente.

• A partir desta posição fixa, existe um salto para um procedimento denominado rotina de tratamento de trap, que toma alguma ação apropriada (quem faz esta rotina de tratamento do trap coloca esta instrução de desvio).

♦ O trap pode ser considerado uma interrupção de caráter síncrono, pois ocorre sincronamente com a execução da instrução.

♦ Exemplos de Traps:

• Overflow e Underflow em ponto-flutuante. • Overflow em inteiro. • Violação de proteção. • Código de operação indefinido. • Estouro da pilha. • Divisão por zero.

Page 64: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

64

Interrupções

♦ Uma interrupção ou conjunto de interrupções é um mecanismo que permite suspender temporariamente a execução de um programa, para tratar um evento, de forma a possibilitar o seu posterior prosseguimento de execução.

♦ As interrupções podem ser classificadas em:

• Interrupções Síncronas ou Traps: são interrupções cujo evento está diretamente sincronizado com a execução de uma determinada instrução. ∗ Exemplos: overflow, divisão por zero.

• Interrupções Assíncronas: são interrupções relacionadas a eventos externos. ∗ Exemplos: o pressionar de uma tecla num

computador.

♦ Uma interrupção pára o programa em execução e transfere o controle do programa para uma sub-rotina de tratamento de interrupção, que executa alguma ação apropriada. Ao terminar de tratar o evento, a sub-rotina de tratamento de interrupção retorna o controle para o programa interrompido.

♦ As interrupções possuem duas fases distintas:

• Reconhecimento da interrupção por parte da CPU. • Tratamento da interrupção (execução da sub-rotina de

tratamento de interrupção ou rotina de serviço).

Page 65: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

65

♦ Problemas: o programa interrompido deve voltar a ser executado no mesmo estado em que estava antes de ocorrer a interrupção.

♦ As interrupções assíncronas podem ser implementadas num determinado hardware de duas formas:

• Interrupções diretas por hardware: são aquelas interrupções que vêm diretamente dos dispositivos de E/S para a CPU que sabe, a partir do sinal de interrupção em particular, em que local da memória (fixo) buscar o endereço da sub-rotina de tratamento da interrupção.

• Interrupções vetoradas: são interrupções que fornecem, além do sinal de pedido de interrupção, o vetor de interrupção (número inteiro que identifica o dispositivo) pela via de dados do sistema. ∗ Permite a canalização de diversos pedidos de

interrupção através de um único sinal. ∗ O gerenciamento dos diversos pedidos é feito

externamente por um controlador de interrupção. `

Controlador do

Dispositivo de E/S

CPU

♦ Considerando a ocorrência de uma interrupção vetorada, existem procedimentos a serem realizados pelo hardware e

DADOS

INTA

INT

Vetor de Interrupção

Page 66: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

66

procedimentos a serem realizados pelo software, que em conjunto, devem garantir o tratamento do evento e o posterior prosseguimento do programa interrompido, como se nada tivesse ocorrido.

• Tarefas do Hardware: 1. O controlador do dispositivo gera um pedido de

interrupção (INT - Interrupt Request). 2. Quando a CPU puder atender ao pedido de interrupção

(por exemplo, ao terminar de executar a instrução corrente), ela envia um sinal de reconhecimento de interrupção (INTA - Interrupt Acknoledge).

3. Recebendo o reconhecimento da interrupção, o controlador do dispositivo envia pela via de dados o seu número de identificação (vetor de interrupção).

4. A CPU obtém o vetor de interrupção e o armazena internamente.

5. A CPU salva o seu status mínimo, (PSW - Processor Status Word), na pilha, como o Contador do Programa, o Acumulador e os Flags de Máquina.

6. A CPU carrega o Contador do Programa com o endereço da sub-rotina de tratamento daquela interrupção, obtido da memória (tabela de vetores de interrupção), a partir do vetor de interrupção recebido. ∗ Por exemplo, se o dispositivo tem número n e os

endereços são de 2 bytes (portanto, o Contador do Programa tem 2 bytes), o endereço da sub-rotina é obtido nas posições de memória [2*n] e [2*n+1].

Page 67: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

67

Memória 0000h Endereço do vetor 0

Tabela 0002h Endereço do vetor 1 de 0004h Endereço do vetor 2

Vetores 0006h Endereço do vetor 3de 0008h Endereço do vetor 4

Interrupção 000Ah Endereço do vetor 5

000Ch Endereço do vetor 6 000Eh Endereço do vetor 7

• Tarefas do Software: 1. A sub-rotina de tratamento da interrupção salva o

conteúdo dos registradores da CPU que irá utilizar, por exemplo, na pilha.

2. A sub-rotina realiza a sua tarefa propriamente dita: a operação de E/S (por exemplo, lê o código da tecla pressionada e o armazena num buffer).

3. A sub-rotina restaura o conteúdo dos registradores salvos.

4. A sub-rotina executa uma instrução de retorno da interrupção, permitindo a CPU recuperar o seu status mínimo (PSW).

5. O programa interrompido prossegue então como se a interrupção não tivesse ocorrido.

♦ Conceito relativos a interrupção:

• Transparência: uma sub-rotina de interrupção é dita transparente quando após o retorno da sub-rotina o programa interrompido volta para o estado exato em que estava anteriormente a chegada da interrupção.

• Mascaramento: mecanismo que permite desabilitar uma interrupção ou um conjunto de interrupções.

Page 68: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

68

• Simultaneidade de Interrupções: se duas interrupções ocorrem ao mesmo instante, a de maior prioridade será atendida.

Page 69: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

69

• Uma interrupção pode ocorrer enquanto outra está sendo tratada pela sua sub-rotina de tratamento. Soluções possíveis: ∗ Inibição: todas as sub-rotinas de tratamento de

interrupção inibem interrupções subseqüentes antes de tomar qualquer outra atitude. ◊ Problema: pode-se perder outras interrupções.

∗ Prioridade: cada interrupção tem uma prioridade diferente, definida na PSW, por exemplo. Eventos mais prioritários são atribuídos a interrupções de maior prioridade. Quando uma interrupção de prioridade n estiver sendo tratada, somente eventos mais prioritários podem interrompê-la; eventos menos prioritários devem aguardar.

Page 70: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

70

♦ Exemplo: Supor um sistema com uma impressora, um disco e uma interface RS232, com prioridades 2, 4 e 5 respectivamente.

0 10 15 20 25 35 40 TempoPrograma

do usuário

RSI da impres-

sora

RSI da

RS232

RSI do

disco

RSI da impres-

sora

Programa do

usuário

Pilha

UsuárioUsuário UsuárioUsuário Impressora Impressora Impressora

Interrupção da disco.

Prioridade 4.Pendente.

Interrupção da RS232.

Prioridade 5. Interrupção da

impressora. Prioridade

2.

RSI do disco termina.

RSI da impressora

termina.

RSI da RS232 termina.

Interrupção do disco

Page 71: 3.1. Formato de Instruçõessites.poli.usp.br/d/pcs2529/index_arquivos/3-CPU.pdf · 2 ♦ Relações possíveis entre o comprimento de uma instrução e o comprimento de uma palavra

71

Intel

♦ Possuem dois níveis de prioridade:

• Interrupções não mascarável: utilizadas para sinalizar catástrofes, como erro de paridade.

• Interrupções mascaráveis: ∗ Utilizam o vetor de interrupção para indexar uma

tabela de 256 entradas de 4 bytes cada, para encontrar o endereço da rotina de serviço de interrupção. ◊ 8088: vetor começa na posição de memória 0. ◊ 80286/80386: vetor pode começar em qualquer lugar da

memória.

∗ A prioridade é fornecida por um controlador de interrupção externo 8259A. A CPU deve indicar quando a rotina de serviço terminou, sinalizando isso através de uma escrita num registrador do 8259A.

Motorola:

♦ Possuem 256 vetores de interrupção de 4 bytes cada, a partir do endereço 0 de memória.

♦ Possui 3 pinos para indicar níveis de prioridade de 0 a 7. O nível 7 não é mascarável.

♦ Existem três bits no PSW que permitem definir a prioridade.