compilador

10
DATA: 26/04/2010 LISTA DE EXERCÍCIOS SOBRE: NÍVEL ISA 1. Explique a metodologia empregada pelos arquitetos de sistemas para o projeto do nível ISA. R1. A metodologia empregada consiste na capacidade de traduzir programas escritos em diferentes linguagens de alto nível para uma forma intermediária comum – o nível ISA – e construir hardware que possa executar programas de nível ISA diretamente. Comentários 1. O nível ISA está posicionado entre os níveis da microarquitetura e do sistema operacional, definindo a interface entre os compiladores e o hardware. 2. Quais são as características de uma boa ISA? R2. As características fundamentais que uma ISA deve apresentar são: 1. Compatibilidade com modelos anteriores, permitindo que uma nova máquina seja capaz de executar programas antigos sem alterações, de modo que o conjunto de instruções possa ser implementado com eficiência em tecnologias atuais e futuras; 2. Regularidade e completude de uma faixa de opções. 3. Qual o papel do compilador na ligação entre uma linguagem de alto nível e o ISA? R3. O papel do compilador entre uma linguagem de alto nível e o nível ISA se refere ao fato de que o código de nível ISA é o que um compilador produz. Analogamente, enquanto o nível ISA é a interface entre a microarquitetura e o sistema operacional, o compilador funciona como uma interface entre a linguagem de alto nível o nível ISA. Comentários 3. O escritor de compilador necessita conhecer qual é o modelo de memória, quais e quantos são os registradores, quais tipos de dados e instruções estão disponíveis e assim por diante. 4. Quais são os modos de execução do nível ISA? Qual a diferença entre esses modos? R4. Os modos de execução do nível ISA são o modo núcleo (kernel) que executa o sistema operacional, permitindo que todas as instruções sejam executadas; e o modo usuário que executa programas de aplicação e não

Upload: nyedja-andrade-almeida

Post on 26-Oct-2015

343 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: COMPILADOR

DATA: 26/04/2010LISTA DE EXERCÍCIOS SOBRE:NÍVEL ISA

1. Explique a metodologia empregada pelos arquitetos de sistemas para o projeto do nível ISA.

R1. A metodologia empregada consiste na capacidade de traduzir programas escritos em diferentes linguagens de alto nível para uma forma intermediária comum – o nível ISA – e construir hardware que possa executar programas de nível ISA diretamente.

Comentários 1. O nível ISA está posicionado entre os níveis da microarquitetura e do sistema operacional, definindo a interface entre os compiladores e o hardware.

2. Quais são as características de uma boa ISA?

R2. As características fundamentais que uma ISA deve apresentar são: 1. Compatibilidade com modelos anteriores, permitindo que uma nova máquina seja capaz de executar programas antigos sem alterações, de modo que o conjunto de instruções possa ser implementado com eficiência em tecnologias atuais e futuras; 2. Regularidade e completude de uma faixa de opções.

3. Qual o papel do compilador na ligação entre uma linguagem de alto nível e o ISA?

R3. O papel do compilador entre uma linguagem de alto nível e o nível ISA se refere ao fato de que o código de nível ISA é o que um compilador produz. Analogamente, enquanto o nível ISA é a interface entre a microarquitetura e o sistema operacional, o compilador funciona como uma interface entre a linguagem de alto nível o nível ISA.

Comentários 3. O escritor de compilador necessita conhecer qual é o modelo de memória, quais e quantos são os registradores, quais tipos de dados e instruções estão disponíveis e assim por diante.

4. Quais são os modos de execução do nível ISA? Qual a diferença entre esses modos?

R4. Os modos de execução do nível ISA são o modo núcleo (kernel) que executa o sistema operacional, permitindo que todas as instruções sejam executadas; e o modo usuário que executa programas de aplicação e não permite que determinadas instruções sensíveis, como as que manipulam diretamente a cache, sejam executadas.

5. Os registradores no nível ISA podem ser classificados como?

R5. Registradores no nível ISA são divididos em de uso específico e de uso geral. Os registradores de uso específico incluem o contador de programa e o ponteiro de pilha onde os valores armazenados têm interpretações específicas. Os registradores de uso geral contêm variáveis locais fundamentais e resultados intermediários de cálculos.

6. Qual a função do registrador PSW?

O PSW (registrador de flags) é um registrador de controle que contém vários bits diversos de que a CPU precisa. Os bits mais importantes são os códigos de condição que são ajustados em todo ciclo da ULA e refletem o estado do resultado da operação mais recente.

Page 2: COMPILADOR

Comentário 6. Os códigos de condição são importantes porque as instruções de comparação e desvio condicional os usam.

7. Quais os tipos de dados que o nível ISA reconhece?

R7. Normalmente, o nível ISA pode reconhecer tipos de dados numéricos, não numéricos, booleanos e ponteiros.[inteiros, ponto flutuante, alfanuméricos]Comentário 7. Uma questão importante é se há suporte de hardware para um tipo particular de dados.

8. Qual a composição de uma instrução?

R8. Uma instrução é formada basicamente por um opcode (código de operação), usualmente associado a alguma informação adicional, que consiste em endereços.

9. Quais os formatos mais comuns de instrução?

R9. Os formatos mais comuns de instruções são instruções sem endereço, instrução de um endereço, instrução de dois endereços e instruções de três endereços.

10. Qual a vantagem e desvantagem de se ter instruções de tamanho fixo ou variável?

R10. Instruções de tamanho fixo são mais simples de manipular e apresentam maior facilidade de decodificação. Por outro lado, pode ocorrer desperdício de espaço, uma vez que todas as instruções necessitarão ter o mesmo tamanho da maior instrução. Instruções de tamanho variável apresentam melhor aproveitamento do espaço disponível; porém, exigem maior lógica operacional.

11. Quais são os critérios para a determinação do formato das instruções?

R11. A determinação do formato de instruções deve contemplar a capacidade de acréscimo de novas instruções e a possibilidade de incremento de novos recursos em função dos possíveis avanços tecnológicos como, por exemplo, a melhoria no desempenho da velocidade do relógio da CPU, tempo de acesso à RAM. O tamanho das instruções consiste num importante critério de projeto que tem importantes implicações para o desempenho. Outro critério de projeto importante diz respeito à existência de espaço suficiente no formato da instrução para expressar todas as operações desejadas. Não obstante, é relevante considerar o número de bits em um campo de endereço.

Comentário 11. De modo geral, instruções curtas são melhores do que as longas devido a restrições de espaço de memória.

12. Quais os modos de endereçamento existentes?

R12. Os modos de endereçamento existente são: endereçamento imediato, endereçamento direto, endereçamento de registrador, endereçamento indireto de registrador, endereçamento indexado, endereçamento de base indexado e endereçamento de pilha.

Comentário 12. Modo de endereçamento refere-se ao modo como os bits de um campo de endereço são interpretados para encontrar operandos.

Page 3: COMPILADOR

13. Explique cada um dos modos de endereçamento.

R13. 1. Endereçamento imediato é o modo mais simples de uma instrução indicar um endereço que contém um operando, sendo este buscado automaticamente na memória. A vantagem reside no fato da não exigência de uma referência extra à memória para busca do operando. A desvantagem é que somente uma constante pode ser fornecida desse modo e, por outro lado, o número de valores está limitado pelo tamanho do campo; 2. Endereçamento direto é o método de endereçamento que especifica o endereço completo de um operando na memória. Nesse tipo de endereçamento, a localização da variável na muda, embora seu valor possa ser modificado. É utilizada para variáveis globais cujos endereços são conhecidos no momento da compilação. 3. Endereçamento de registrador é conceitualmente idêntico ao endereçamento direto, mas especifica um registrador em vez de uma localização de memória. É o modo de endereçamento mais comum na maioria dos computadores. Instruções carregue/armazene usam esse método de endereçamento. 3. Endereçamento indireto de registrador CONTINUAR.

[imediato não vem com endereço. O dado vem imediatamente com a instrução. Geralmente usado com constantes. Direto temos endereço e operando. Registrador ao invés de endereço de memória para valor do operando temos um endereço do registrador que contém o dado. Indireto via registrador semelhante ao registrador ao invés de ter endereço de memória utilizamos endereço de registrador. Indexado endereço inicial no registrador a esse endereço é somado um valor que é um índice – usado mais para vetores – implícito está no registrador. Base indexado o índice está no segundo registrador. Via pilha as instruções não tem endereços, os operandos estão numa pilha de onde serão obtidos os endereços; usado quando retorna de função.

14. Elabore um esquema de expansão do código de operação para permitir que os formatos de instruções mostrados a seguir sejam codificados em 36 bits:7 instruções com dois endereços de 15 bits e um número de registrador de 3 bits;500 instruções com um endereço de 15 bits e um número de registrador de 3 bits;50 instruções sem referência a endereço ou a registrador;

Esquema de expansão de código com 36 bits:- primeiros três bits usados para instruções, os próximos 15 bits para o primeiro endereço, os 15 bits seguintes para o segundo endereço, os três últimos bits para o registrador. Com três bits para instruções, podemos representar até oito instruções diferentes; como são apenas sete instruções, a oitava representação pertence à próxima representação de instruções e indica que a o código diferencial encontra-se nos próximos 9 bits que são suficientes para representar 526 instruções diferentes; os 3 bits seguintes R14. Para elaborar um esquema de expansão de código de operação de acordo com os parâmetros fornecidos TEMOS ...:

Considerando 36 bits para o formato de instrução, como o primeiro requisito pede sete instruções, necessitamos de 3 bits para a codificação das instruções, 30 bits para endereços e 3 bits para o registrador, perfazendo um total de 36 bits. Para o segundo requisito, necessitamos de 9 bits para a codificação das instruções, 15 bits para endereços e 3 bits para o registrador, perfazendo um total de 27 bits. Para o terceiro requisito, necessitamos de seis bits para a codificação das instruções. O primeiro requisito é atendido com a utilização da tabela de códigos binários de três dígitos de 000 a 110. O segundo requisito é atendido pela representação de três bits 1, indicando que a instrução encontra-se nos campos de bits de 4 a 12, o endereço de da instrução dos campos de bits de 13 a 27, e o registrador de 28 a 30.

000001010011100

Page 4: COMPILADOR

101110111

15. É possível elaborar um esquema de expansão do código de operação que permita que as instruções seguintes sejam codificadas em 12 bits? Uma referência a registrador gasta 3 bits. Justifique.4 instruções com três registradores;255 instruções com um registrador;16 instruções sem referência a registrador;

R15. 16. Como são classificadas as instruções do nível ISA?

R16. Instruções do tipo registrador-memória e registrador-registrador.

17. Como existem duas fontes possíveis para os dados (memória ou registrador) e dois destinos possíveis (memória ou registrador), quais são os quatro tipos de cópia de dados possíveis?

R17. Cópia de memória para registrador (LOAD, por exemplo), registrador para memória (STORE, por exemplo), registrador para registrador (MOVE, por exemplo), memória para memória. CONFIRMAR.

18. O que são operações diádicas e operações monádicas?

R18. Operações diádicas são as que combinam dois operandos para produzir um resultado, incluindo também operações booleanas. Operações monádicas têm um só operando e produzem um só resultado.

19. Defina desvio condicional e comparação.

R19. Desvio condicional é um método utilizado para testar se determinada condição foi atendida e, então, realizar o desvio da instrução para determinado endereço de memória. Por exemplo, podemos utilizar um bit de código de condição para avaliar se houve excesso em uma operação aritmética e desviar a instrução para um código de correção de erro.Comentário 19. Todo programa precisa ter a capacidade de testar seus dados e alterar a seqüência de instruções a ser executada com base nos resultados.

20. O que é um procedimento?

R20. Um procedimento é um grupo de instruções que realiza alguma tarefa e pode ser invocado (chamado) de diversas partes do programa.

Comentário 20. O termo sub-rotina muitas vezes é usado em vez de procedimento, principalmente quando se refere a programas em linguagem de montagem. Quando o procedimento é finalizado deve retornar um endereço que pode ser colocado na memória, no registrador ou na pilha. Deve-se evitar colocar o endereço de retorno numa única localização de memória fixa porque se o procedimento tiver chamado outro procedimento, a segunda chamada sobreporia a primeira, ocasionando a perda desta. Recursão é a capacidade de um procedimento chamar a si mesmo.

21. Quais são os 3 esquemas de realização de E/S e como eles funcionam?

R21. Os esquemas de realização de E/S são: 1. E/S programada com espera ocupada cujo funcionamento

Page 5: COMPILADOR

é o método de E/S mais simples, comumente usado em processadores de baixa tecnologia, utilizado em sistemas embutidos ou em sistemas que têm de responder imediatamente a mudanças externas (sistemas de tempo real) [ utiliza um registrador de dados e um de status.]2. Interrupção – o processador só é acionado quando é gerada um interrupção. 3. DMA inclui uma controladora de DMA que informa ao processador que verifica a existência de um controladora que passa o controle para ela.

22. O que é fluxo de controle e como ele é classificado?

R22. Fluxo de controle se refere à seqüência em que as instruções são executadas dinamicamente, isto é, durante a execução do programa. Isso significa que, em geral, na ausência de desvios e chamadas de procedimentos, as instruções executadas em seqüência são buscadas em localizações consecutivas de memória. Pode ser classificado em seqüencial e desvios.

Comentário 22. Desvios, chamadas de procedimento, co-rotinas, exceções e interrupções causam alteração no fluxo de controle.

23. Explique o conceito de co-rotinas.

R23. Para exemplificar o conceito de co-rotinas, temos dois procedimentos A e B, cada um dos quais chamando o outro como um procedimento. Uma utilização comum de co-rotinas é simular processamento paralelo em uma única CPU. No caso das co-rotinas, é chamada a primeira vez e uma continua a outra, ou seja, reiniciar de onde foi parada a outra.

24. O que é um trap?

R24. Um trap (exceção) é um tipo de chamada de procedimento automática iniciada por alguma condição causada pelo programa, usualmente uma condição importante, mas que ocorre raramente. Um bom exemplo é o excesso (overflow).

25. O que são interrupções e como elas são processadas?

R25. Interrupções são alterações no fluxo de controle que não são causadas pelo programa em execução, mas por alguma outras coisa, em geral relacionada a E/S. O tratamento da interrupção consiste em parar a execução do programa e transferir o controle para um tratador de interrupção, que executará uma ação adequada. Finalizado o tratamento da interrupção, o controle é devolvido ao programa interrompido, que deve reiniciar o processo interrompido exatamente no mesmo estado em que estava quando ocorreu a interrupção, o que significa restaurar todos os registradores internos a seu estado anterior à interrupção.

Comentário 25. A diferença essencial entre exceções e interrupções é que exceções são síncronas com o programa e interrupções são assíncronas.

26. Qual a diferença entre um trap e uma interrupção?

27. O que são interrupções mascaráveis e não-mascaráveis?

R27. Mascaráveis são aquelas têm prioridade inferior às não-mascaráveis. Não-mascaráveis são aquelas que têm prioridade zero, devendo ser tratadas imediatamente devido a iminência de comprometimento do sistema.

Page 6: COMPILADOR

28. Elabore uma metodologia para trocar o conteúdo de duas variáveis A e B sem usar uma terceira variável ou um registrador.Dica: Pense na instrução EXCLUSIVE ORA 1 0 1 0B 1 1 1 1A xor B

0 1 0 1

B xor A1 0 1 0

A xor BA 1 1 1 1

29. Compare máquinas de 0, 1, 2 e 3 endereços escrevendo os programas para que cada uma delas calcule o valor da expressão abaixo:X = (A + B X C)/(D – E X F)As instruções disponíveis para o uso em cada uma das máquinas são as seguintes:

[push f; push e; mul; push d; sub; push b; push c; mul; push a; add; div.] 88 bits.

[load 4; mul 5; store 6; load 3; sub 6; store 6; load 1; mul 2; add 0; div 6] 240 bits.0 a1 b2 c3 d4 e5 f67

accLoad m – armazena no acumuladorStore m – carrega o conteúdo do acumulador na memória

[mul 4,5; sub 3,4; mul 1,2; add 0,1; div 0,3] 200 bits.0 a1 b2 c3 d4 e5 f67

[mul 6,4,5; sub 7,6, 3; mul 6, 1,2; add 5,6,0; div 6, 7, 5)] 280 bits.0 a1 b2 c3 d4 e5 f67

Page 7: COMPILADOR

M é um endereço de memória de 16 bits e X, Y e Z são endereços de memória de 16 bitsou números de registradores de 4 bits. A máquina que não faz referência a qualquerendereços usa uma pilha, a que referencia somente um endereço, usa o acumulador e asoutras duas têm 16 registradores e instruções que operam sobre todas as combinaçõesde endereços de memória e registradores. SUB X, Y subtrai Y de X e SUB X,Y,Z subtrai Zde Y e coloca o resultado em X. Considerando códigos de operação de 8 bits ecomprimentos de instrução sempre múltiplos de 4, pergunta-se: quantos bits cada umadas máquinas gasta para calcular o valor de X?30. Escreva um programa para cálculo de Fatorial. Semelhante ao exemplo das Torresde Hanói, ilustre os estados da pilha para cálculo do fatorial de 8.Dicas:a. n! = n(n-1)!b. Condição-limite: 0! = 1

Comentários pág. 197 – 5.1.2 Modelos de memória.O uso de células de 8 bits (um byte) tem relação com os caracteres ASCII que utilizam 7 bits. Isso permite que 1 bit seja utilizado para a paridade.Em geral, os bytes são agrupados em palavras de 4 bytes (32 bits) ou 8 bytes (64 bits). Muitas arquiteturas requerem que as palavras sejam alinhadas em suas fronteiras naturais; assim, por exemplo, uma palavra de 4 bytes pode começar no endereço 0, 4, 8, ... Uma palavra de 8 bytes pode começar no endereço 0, 8, 16, ...O alinhamento costuma ser exigido porque memórias funcionam com mais eficiência desse modo.Ter a capacidade de ler palavras em endereços arbitrários requer lógica extra no chip, o que o torna maior e mais caro.

Comentários pág. 198 – 5.1.3 Registradores.Os registradores controlam a execução do programa, retêm resultados temporários ... De modo geral, a função do registrador é prover acesso rápido a dados muito usados.

Comentários pág. 199 – 5.1.4 Instruções.A principal característica do nível ISA é seu conjunto de instruções de máquina, que controlam o que a máquina pode fazer.

Comentários pág. 224 – 5.5.6 Controle de laço

Page 8: COMPILADOR

Algumas vezes é necessário executar um grupo de instruções por um determinado número de vezes. Nesse tipo de operação, utiliza-se um contador que é aumentado ou reduzido cada vez que o laço é percorrido.