Você está na página 1de 6

Faculdade Senac Bacharelado em Cincia da Computao Sistema de programao

Lista de Exerccios 1
Prof. Leonardo Takuno

1. Quais os tipos de tradutores que voc conhece? Defina-os e exemplifique. 2. O que um passo de compilao ? qual a diferena entre os compiladores de um passo e de vrios passos ? 3. Do ponto de vista dos critrios de qualidade da engenharia de software, mais recomendvel construir um compilador de um passo apenas ou um compilador de vrios passos ? Justifique sua resposta. 4. Situe o compilador em um sistema de programao completo, mostrando sua relao com os outros mdulos de software bsico. 5. O que so interpretadores ? Quais as semelhanas e diferenas que eles guardam em relao aos compiladores 6. Quais as dificuldades encontradas quando se deseja transportar um compilador de uma mquina para outra ? Como contorn-las ? 7. O que um filtro ? 8. Conceitue: a. Linguagem de alto-nvel; b. Linguagem de baixo-nvel; c. Linguagem-fonte; d. Linguagem-objeto; Discorra sobre a relao que existe entre os tipos de linguagem acima citados e os tipos de processadores de linguagem que voc conhece. Cite exemplos. 9. Sejam dados: Uma mquina M; Um compilador Java escrito em JVM e que gera JVM; Um interpretador JVM escrito em M; Um interpretador AWK escrito em Java.
Mostre como: a. Obter uma verso do interpretador AWK escrito em JVM; b. Executar um programa escrito em AWK; c. Executar um compilador escrito em AWK que traduz de Pascal para Java.

Faculdade Senac Bacharelado em Cincia da Computao Sistema de programao 10. Dados: - Compilador Java / JVM escrito em JVM - Interpretador JVM escrito em x86 - Mquina x86 Mostre: A) Como construir e executar um interpretador PHP B) Como interpretar um programa escrito em PHP 11. Mostre a nica instruo do MIPS, ou o menor nmero de instrues do MIPS, associada ao seguinte comando C: a = b + 100; 12. Mostre a nica instruo do MIPS, ou o menor nmero de instrues do MIPS, associada ao seguinte comando C: x[10] = x[11] + c; 13. O programa a seguir tenta copiar palavras do endereo armazenado no registrador $a0 para o endereo armazenado em $a1, contando o nmero de palavras copiadas em $v0. O programa pra de copiar ao encontrar uma palavra igual a zero. loop: lw $v1, 0 ($a0) addi $v0, $v0, 1 sw $v1, 0 ($a1) addi $a0, $a0, 1 addi $a1, $a1, 1 bne $v1, $zero, loop

Existem vrios erros neste programa. Cabe a voc consert-lo, escrevendo uma verso desse programa sem erro. Neste exerccio, no se preocupe em preservar os valores dos registradores $v1, $a0 e $a1. 14. Adicione comentrios ao cdigo MIPS abaixo e resuma em uma frase o que ele calcula. Suponha que $a0 usado para entrada e, inicialmente, contm o valor n (um nmero inteiro positivo). Suponha que $v0 usado para sada. begin: addi $t0, $zero, 0 addi $t1, $zero, 1 loop: slt $t2, $a0, $t1 bne $t2, $zero, finish add $t0, $t0, $t1 addi $t1, $t1, 2 j loop finish: add $v0, $t0, $zero

Faculdade Senac Bacharelado em Cincia da Computao Sistema de programao 15. O trecho de cdigo em C abaixo usa tanto um desvio condicional quanto um desvio incondicional cada vez que executa o lao. Reescreva o cdigo em assembly de modo que o novo cdigo utilize no mximo um desvio condicional ou um desvio incondicional dentro do lao. while (A[i] == k) i = i + j; 16. Considere o seguinte fragmento de cdigo escrito em C: for (i=0; i <= 100; i++) a[i] = b[i] + c; Suponha que a e b so vetores de palavras, e que o endereo base de a esteja em $a0 e o endereo base de b esteja em $a1. O registrador $t0 est associado varivel i e $s0 varivel c. Escreva o cdigo para MIPS correspondente ao fragmento acima.

17. A linguagem assembly a interface com o software de mais alto nvel. O montador pode tratar situaes do projeto da arquitetura onde a presena de certas instrues seja importante na linguagem de montagem (por simplificar tanto a traduo do cdigo quanto a disciplina de programao), mas cujas operaes no sejam implementadas diretamente em hardware. Essas instrues so conhecias como pseudo-instrues. O montador do MIPS, por exemplo, aceita a instruo move abaixo, mesmo sabendo que ela no uma instruo da linguagem de mquina: move $t0, $t1 # registrador $t0 recebe o contedo do registrador $t1 Para que seja processada, a instruo acima convertida pelo montador em uma instruo de mquina equivalente instruo abaixo. Para essa converso, o montador pode fazer uso de um registrador (para uso exclusivo do montador) denominado $at. add $t0, $zero, $t1 # registrador $t0 recebe o contedo do registrador $t1

Com essas idias em mente, produza a seqncia mnima de instrues do MIPS para cada uma das pseudo-instrues da tabela abaixo:

Pseudo-instruo clear $t5 ble $t5, $t3, L bgt $t5, $t3, L bge $t5, $t3, L

O que ela faz $t5 = 0 se $t5 <= $t3, desvia para L se $t5 > $t3, desvia para L se $t5 >= $t3, desvia para L

Faculdade Senac Bacharelado em Cincia da Computao Sistema de programao

18. Implemente o seguinte cdigo C em MIPS: void main(){ int a, b, c; a=10; b = 20; c = soma(a,b); } int soma (int a,int b){ return a + b; }

19. Implemente o seguinte cdigo C em MIPS: void main(){ int x, y; x=5; y = quadrado (x); } int quadrado (int a){ return a * a; } 20. Implemente o seguinte cdigo C em MIPS, supondo que set_array seja a primeira funo chamada: int i; void set_array (int num){ int array[10]; for (i=0; i < 10; i++){ array[i] = compare(num,i); } } int compare (int a, int b){ if (sub(a,b) >= 0) return 1; else return 0; }

Faculdade Senac Bacharelado em Cincia da Computao Sistema de programao

int sub (int a, int b){ return a-b; } No se esquea de tratar o stack pointer corretamente. A varivel alocada na pilha, e i corresponde a $a0. Desenhe o status da pilha antes de chamar set_array e durante cada chamada de funo. Indique os nomes dos registradores e variveis armazenadas na pilha e marque o local de $sp. 21. Escreva um programa em linguagem assembly do MIPS que leia dois valores e armazene nos registradores $t1 e $t2. Aps isso, efetue a troca dos valores de forma que o registrador $t1 passe a possuir o valor do registrador $t2 e o registrador $t2 passe a possuir o valor do registrador $t1 22. Escreva um programa em linguagem assembly do MIPS que leia trs nmeros e armazene nos registradores $s1, $s2, $s3. Aps isso, o programa dever ordenar os trs nmeros de tal maneira que $s1 esteja com o menor valor, $s2 esteja com o valor intermedirio e o $s3 esteja com o maior valor. 23. Escreva um programa em linguagem assembly do MIPS que imprima os 10 primeiro nmeros inteiros positivos. 24. Escreva um programa em linguagem assembly do MIPS que leia 10 nmeros inteiros e para cada nmero lido apresente o seu quadrado. 25. No correio local h somente selos de 3 e de 5 centavos. A taxa mnima para correspondncia de 8 centavos. Faa um programa em linguagem assembly do MIPS que determina o menor nmero de selos de 3 e de 5 centavos que completam o valor de uma taxa dada. Use estrutura de seleo de mltipla escolha. 26. Dado um nmero inteiro positivo, calcular o seu fatorial. Fatorial o produto dos nmeros naturais desde 1 at o inteiro n. 27. Ler um nmero inteiro n, que no contm dgito 0, e escrever um nmero inteiro m que corresponde ao nmero n invertido. Por exemplo, se n igual a 123, a sada ser m igual a 321. 28. Faa um programa em linguagem assembly do MIPS que leia um nmero na base binria e converta para decimal. 29. Faa um programa em linguagem assembly do MIPS que leia um nmero na base decimal e converta para a binria. 30. Tendo com entrada de dados um valor numrico qualquer, faa um programa em linguagem assembly do MIPS que verifique se este mltiplo de 7, e em caso afirmativo apresenta uma mensagem conveniente. 31. Faa um programa em linguagem assembly do MIPS que calcule e informe as razes de uma equao do 2 grau, sendo que os valores a, b e c so fornecidos pelo usurio, isto se for possvel tal clculo, em caso negativo apresentar mensagem conveniente. 32. Elabore um programa em linguagem assembly do MIPS que gere e escreva os nmeros mpares dos nmeros lidos entre 100 e 200. 33. Escreva um em linguagem assembly do MIPS que calcule o MDC (mximo divisor comum) entre dois nmeros naturais. 34. Escreva um em linguagem assembly do MIPS que l um nmero natural, e verifica se o mesmo primo ou no.

Faculdade Senac Bacharelado em Cincia da Computao Sistema de programao 35. Elabore um em linguagem assembly do MIPS que imprima todos nmeros primos existentes entre N1 e N2, em que N1 e N2 so nmeros naturais fornecidos. 36. A srie de Fibonacci formada pela seguinte seqncia: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,...etc. escreva um linguagem assembly do MIPS que gere e apresente a srie de Fibonacci para ensimo termo, ou seja, para n igual 8, oitavo termo, o correspondente 21. Esta srie se caracteriza pela soma de um termo posterior com o seu anterior subseqente.

37. Traduza para MIPS


Nome: Exerccio 30 Objetivo: Verificar a classificao de um nadador de acordo com sua categoria. Dados de Entrada: Idade Sada: Mensagem com sua categoria, de acordo com a idade Variveis: inteiro idade <armazena a idade de um nadador> incio leia idade se ( idade 0 E idade 4 ) ento imprima "Fraldinha" seno se (idade 5 E idade 10) ento IMPRIMA " Infantil" seno se (idade 11 E idade 17) ento imprima " Juvenil" seno imprima " Snior " fim-se fim-se fim-se fim

Você também pode gostar