Difference between revisions of "Code Generation/Exercise 8"

From Wiki**3

< Code Generation
Line 1: Line 1:
== The Original Code  ==
+
Exercício 1.
  
Consider the following C function:  
+
Considere em C uma variável declarada static no corpo de uma função:  
 +
# Indique justificadamente qual a área de memória de dados a que pertence.
 +
# Comente justificadamente se o valor desta variável pode ser modificado a partir de outra função.
 +
# Caso a função que contém a variável static seja invocada recursivamente, quantas instâncias da variável existem e, caso existam múltiplas, os valores são iguais ou distintos? Justifique.
 +
# Indique justificamente se uma função pode devolver o endereço de uma variável declarada static sem criar dangling references.
  
 +
Exercício 2.
 +
 +
Discuta as diferenças, se existirem, entre as variáveis x e y, declaradas como se segue, na linguagem C:
 
<c>
 
<c>
extern int printf(const char *format, ...);
+
char *x   = "cadeia";  
int printlist(int lo, int hi) {
+
char  y[] = "cadeia";  
   int ix = lo;
+
char z[] = { 'c', 'a', 'd', 'e', 'i', 'a' };
  while (ix < hi) {
+
</c>
    printf("%d\n", ix);
 
    ix++;
 
  }
 
  return ix;
 
}
 
</c>
 
 
 
'''directivas:''' text data rodata bss align label extrn globl const str char id byte double
 
 
 
'''acesso:''' addr addra addrv local loca locv load dload ldchr store dstore stchr alloc dup swap push pop int sp
 
 
 
'''aritmética/lógica:''' add dadd sub dsub mul dmul div ddiv mod neg gt ge lt le eq ne cmp
 
 
 
'''bit a bit:''' rotl rotr shtl shtru shtrs and or not xor
 
 
 
'''funções/saltos:''' call ret start enter leave trash jmp jz jnz branch leap
 
 
 
== Postfix Code  ==
 
  
The Postfix code for the above function is as follows:
+
Exercício 3.
  
<asm>
+
Indique justificadamente se a linguagem C possui algum tipo de polimorfismo. Em caso afirmativo, apresente exemplos.
  
</asm>
+
Exercício 4.
  
== Compiling and Running  ==
+
Considere a tabela de símbolos fornecida na CDK. Que modificações seriam necessárias se fosse necessário permitir a definição de espaços de nomes distintos para variáveis, funções e constantes?
  
To compile the Postfix code directly, [[Pf2asm]] can be used:
+
Exercício 5.
  
*pf2asm printlist.pf
+
Considere uma função, denominada raizes, que recebe três argumentos correspondentes aos factores de uma equação de 2º grau (ax²+bx+c) e que calcula o número de raízes. Escreva a sequência de instruções Postfix correspondentes à implementação da função raizes.  
*yasm -felf printlist.asm
 
  
 
[[Category:Compilers]] [[Category:Teaching]]
 
[[Category:Compilers]] [[Category:Teaching]]

Revision as of 18:20, 2 June 2012

Exercício 1.

Considere em C uma variável declarada static no corpo de uma função:

  1. Indique justificadamente qual a área de memória de dados a que pertence.
  2. Comente justificadamente se o valor desta variável pode ser modificado a partir de outra função.
  3. Caso a função que contém a variável static seja invocada recursivamente, quantas instâncias da variável existem e, caso existam múltiplas, os valores são iguais ou distintos? Justifique.
  4. Indique justificamente se uma função pode devolver o endereço de uma variável declarada static sem criar dangling references.

Exercício 2.

Discuta as diferenças, se existirem, entre as variáveis x e y, declaradas como se segue, na linguagem C: <c> char *x = "cadeia"; char y[] = "cadeia"; char z[] = { 'c', 'a', 'd', 'e', 'i', 'a' }; </c>

Exercício 3.

Indique justificadamente se a linguagem C possui algum tipo de polimorfismo. Em caso afirmativo, apresente exemplos.

Exercício 4.

Considere a tabela de símbolos fornecida na CDK. Que modificações seriam necessárias se fosse necessário permitir a definição de espaços de nomes distintos para variáveis, funções e constantes?

Exercício 5.

Considere uma função, denominada raizes, que recebe três argumentos correspondentes aos factores de uma equação de 2º grau (ax²+bx+c) e que calcula o número de raízes. Escreva a sequência de instruções Postfix correspondentes à implementação da função raizes.