Fundamentos de Arquiteturas de Computadores

Laboratório 1 - Representação de dados

Neste laboratório, veremos a representação de dados na linguagem C. Para isso, utilizaremos alguns programas em C e o compilador gcc. A seguir, serão descritos os passos a serem seguidos para realização deste laboratório:

  1. Salve em um diretório os seguintes arquivos: reprint.c , tam.c , vermem.c e soma.c.
  2. Você irá compilar e executar estes arquivos utilizando o compilador gcc. Para entrar neste ambiente execute os seguintes passos:
    1. Abra uma janela prompt de comando . Vá para o diretório onde você salvou os arquivos acima com o comando
 cd diretório 
    1. Para compilar o seu programa você deve digitar o seguinte comando
 gcc -o &ltnome_do_executavel> &ltnome_do_arquivo_fonte> 
    1. Para executar o seu programa você deve digitar o nome do seu programa executável na linha de comando.
  1. Agora você começará a testar seus programas em C. O primeiro programa a ser testado é reprint.c.
4.   
5.  #include "stdio.h"
6.   
7.  int main (void) {
8.    int x = 112;
9.    printf("%d  %x  %u  %c  %o\n", x, x, x, x, x);
10.  return 0;
11.}
12. 

O comando printf em C, imprime um dado de acordo com uma certa formatação, dada pelo caracter %letra. No caso acima, %d imprime o valor da variável x interpretando-a com um inteiro com sinal, %x imprime o padrão de bits da variável com um inteiro sem sinal expresso em hexadecimal (base 16), %u a imprime como um inteiro sem sinal na base 10, %c, como um caracter e %o, como um número sem sinal em octal (base 8).

Pergunta 1: Dado que o valor da variável é 112, indique como este valor deve ser impresso pelo programa utilizando as formatações do programa. Para verificar o caracter a ser impresso consulte a tabela ASCII .

Pergunta 2: Compile e execute este programa e indique se as respostas que você encontrou são as mesmas do programa.

Para compilar o seu programa você deve digitar o seguinte comando: gcc -o reprint reprint.c
Para executar o seu programa você deve digitar o nome do seu programa executável
reprint na linha de comando.

  1. Para o mesmo programa acima, troque o valor da variável para -112.

Pergunta 3: Indique os valores que você espera que sejam impresssos. Gere um novo executável, execute-o e indique se os resultados foram os esperados.

Para mudar o valor para -112, você terá que editá-lo. A seguir, compile e execute o programa novamente executando os passos acima.

  1. Em C, cada variável possui tipos diferentes. Os tipos que veremos são utilizados para representar inteiros com sinal (int e short int), caracteres (char), números em ponto flutuante (float para precisão simples e double para precisão dupla). Você irá compilar e executar o programa tam.c abaixo.
15. 
16. 
17.#include "stdio.h"
18. 
19.int main (void) {
20.   printf("%d\n", sizeof(int));
21.   return 0;
22.}

A função sizeof() em C indica o número de bytes utilizado para representar cada tipo existente. O programa acima quando executado indicará o número de bytes utilizado para representação da variável quando ela é do tipo int.

Pergunta 4: Indique o tamanho utilizado para o tipo int, compilando e executando este programa.

Pergunta 5: Troque o parâmetro da função por short int e indique o novo tamanho. Faça isso, para os tipos char, float e double.

  1. Agora você verá como os dados são armazenados na memória do computador. Para isso você utilizará o programa vermem.c.
24. 
25. 
26.#include "stdio.h"
27. 
28.void dump (void *p, int n) {
29.  unsigned char *p1 = p;
30.  while (n--) {
31.    printf("Endereco %p - %02x\n", p1, *p1);
32.    p1++;
33.  }
34.}
35.int main (void) {
36.  int i = 24;
37.  dump(&i, sizeof(i));
38.  return 0;
39.}

Em cada endereço de memória, é armazenado um byte do dado. Caso um dado necessite de 4 bytes, teremos 4 endereços. O programa acima mostra como um dado do tipo int é armazenado na memória. Compile e execute o programa vermem.c.

Pergunta 6: Indique como este dado está armazenado na memória.

Pergunta 7: Troque o dado para -24, compile e execute o arquivo novamente. Indique como o novo valor está armazenado na memória.

Pergunta 8: Execute o mesmo procedimento, trocando o tipo para short int, character e float.

  1. Compile e execute o programa soma.c mostrado abaixo.
41. 
42.#include "stdio.h"
43. 
44.int main (void) {
45.   short int i = 32767;
46.   i = i+3;
47.   printf("%d \n", i);
48.   return 0;
49.}

Pergunta 9: O resultado é o que você esperava? Porque ?

Pergunta 10: Troque o tipo da variável i para int, compile e execute o programa novamente. Mudou alguma coisa ? Explique o que está acontecendo.
Algoritmos dos programas