Code Generation/Exercise 8: Difference between revisions

From Wiki**3

Root (talk | contribs)
Created page with "== The Original Code == Consider the following C function: <c> extern int printf(const char *format, ...); int printlist(int lo, int hi) { int ix = lo; while (ix < hi) { ..."
 
Root (talk | contribs)
No edit summary
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
== The Original Code ==
{{TOCright}}
Small exercises and questions.


Consider the following C function:
== static ==


<c>
Considere em C uma variável declarada static no corpo de uma função:
extern int printf(const char *format, ...);
# Indique justificadamente qual a área de memória de dados a que pertence.  
int printlist(int lo, int hi) {
# Comente justificadamente se o valor desta variável pode ser modificado a partir de outra função.  
  int ix = lo;
# 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.
  while (ix < hi) {
# Indique justificamente se uma função pode devolver o endereço de uma variável declarada static sem criar dangling references.
    printf("%d\n", ix);
    ix++;
  }
  return ix;
}
</c>


directivas: text data rodata bss align label extrn globl const str char id byte double
== Memory Organization ==


acesso: addr addra addrv local loca locv load dload ldchr store dstore stchr alloc dup swap push pop int sp
Discuta as diferenças, se existirem, entre as variáveis x e y, declaradas como se segue, na linguagem C:  
aritmética/lógica: add dadd sub dsub mul dmul div ddiv mod neg gt ge lt le eq ne cmp
<source lang="c">
char *x  = "cadeia";
char  y[] = "cadeia";
char  z[] = { 'c', 'a', 'd', 'e', 'i', 'a' };
</source>


bit a bit: rotl rotr shtl shtru shtrs and or not xor
== Polymorphism ==


funções/saltos: call ret start enter leave trash jmp jz jnz branch leap
Indique justificadamente se a linguagem C possui algum tipo de polimorfismo. Em caso afirmativo, apresente exemplos.


== Postfix Code ==
== Symbols ==


The Postfix code for the above function is as follows:
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?


<asm>
== Code Generation ==


</asm>
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.


== Compiling and Running ==
[[category:Compiladores]]
 
[[category:Ensino]]
To compile the Postfix code directly, [[pf2asm]] can be used:
 
* pf2asm printlist.pf
* yasm -felf printlist.asm
 
[[category:Compilers]]
[[category:Teaching]]

Latest revision as of 11:43, 12 February 2019

Small exercises and questions.

static

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.

Memory Organization

Discuta as diferenças, se existirem, entre as variáveis x e y, declaradas como se segue, na linguagem C:

char *x   = "cadeia"; 
char  y[] = "cadeia"; 
char  z[] = { 'c', 'a', 'd', 'e', 'i', 'a' };

Polymorphism

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

Symbols

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?

Code Generation

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.