11/08
Apresentação do Curso
referência: Aho & Ullman, 4.2.
13/08
Arquitetura Típica de uma Máquina
Elementos Básicos
- CPU
- memória principal
- memória secundária
- dispositivos de E/S
CPU
- ALU
- registradores
- unidade de controle
Memória Principal
- bytes
- palavras
- memória cache
Memória Secundária
- necessidade de persistência da informação
referência: Aho & Ullman, 4.3, 4.4.
18/08
Representação de Dados Básicos
Inteiros
- representação na base binária
- números sem sinal: representação direta
- números com sinal: representação em complemento a 2
- representação de positivos e negativos em complemento a 2
- operaçoes de soma e subtração (sempre reduzidas a soma)
- possibilidade de overflow
referência: Patterson & Hennessy, 4.1,
4.2, 4.3.
obs: Não se deter nas referências a instruções
da linguagem de máquina!
20/08
Representação de Dados Básicos (cont)
Operações bit a bit
- shift
-
and
bit a bit
-
or
bit a bit
-
not
bit a bit
Operações bit a bit em C
- operadores >>, <<, &, | e ~.
- exemplo de utilização
- Manipulação de variável
unsigned int flags
,
cujos bits 0, 1 e 2 indicam, respectivamente,
se a variável é ou não palavra chave, global e externa.
exercícios
- Que número na base 10 é representado por CA (hex),
interpretado
- como número inteiro sem sinal?
- como inteiro em complemento a 2?
- Converter 45 e -113 da base 10 para a representação
em complemento a 2, somar as representações e converter
de volta para a base 10.
- No exemplo discutido em sala, da variável
flags
,
verificar:
- Se a variável não é global nem externa.
- Se a variável é global mas não é externa.
referência: Patterson & Hennessy, 4.4.
25/08
Representação de Dados Básicos (cont)
Representação em ponto flutuante: padrão IEEE 754
- notação em ponto flutuante e normalização
- campos para sinal, mantissa e expoente
- padrão IEEE 754: precisão simples e dupla
- uso de sinal e magnitude
- expoente em notação com bias (excesso (2 elevado a (k-1)) - 1),
onde k é o número de bits reservado para o expoente)
- mantissa não inclui o 1 à esquerda do ponto binário,
que fica sempre implícito
- soma de números em ponto flutuante: alinhamento e aproximação
- diferença da aritmética conceitual para a aritmética com
representações limitadas: erros e perda de propriedades aritméticas.
referência: Patterson & Hennessy, 4.8,
até pag. 283, e pags 304-305.
Discussão do exercício 3 da aula de 20/08
27/08
Representação de Dados Básicos (cont)
Representação de caracteres
- associação arbitrária de um código
interno a cada caracter que se deseja representar
- código ASCII
- importante: não há distinção interna, na máquina,
entre posições que representam números, instruções ou
caracteres! Distinção fica por conta do programa!!!!
Exercícios
- Suponha que temos uma variável
unsigned int cabecalho
,
de 16 bits, com as informações:
- bits 8 a 15: tamanho do pacote
- bits 5 a 7: contador
- bits 3 e 4: tipo do pacote
- bit 2: indica se deve avisar origem caso ocorra erro
- bit 1: indica se pacote exige
ACK
(confirmação
de recebimento)
- bit 0: não é usado
crie código C para:
- Extrair tamanho do pacote (atribua a uma outra variável inteira)
- Mudar para indicar que não exige ACK
- Testar se pacote exige ACK
- Extrair contador
- Zerar contador
- Incrementar contador (não se preocupe em detectar overflow,
mas use os itens anteriores de forma a garantir que não
se estraga o campo de tamanho caso ocorra overflow!)
- Represente o número -0,375 (base 10) em ponto flutuante IEEE 754,
precisão simples.
Dê o resultado em hexa.
- Qual o número na base 10 representado pelo
ponto flutuante (IEEE 754) C0A0 0000 (hexa)?
- Como ficaria a representação da cadeia de
caracteres 'ada', em C, em uma máquina com palavra de 32 bits:
- little-endian
- big-endian
1/09
Representação de Dados (cont)
- representação de arrays
- offsets variáveis calculados em tempo de execução
- representação de structs
- offsets constantes conhecidos em tempo de compilação
Linguagem Assembly: a linguagem MIPS
Registradores
- 32 registradores
- operações (exceto transferência) são sempre registrador-registrador!
- convenção: nomes começando com $
- convenção na forma de uso: $t0..$t7, $s0..$s7
- sempre que possível, variáveis locais de programas
são alocadas diretamente em registradores!
Operações Aritméticas
- instruções registrador-registrador
- exemplo ADD
- compilação de comandos como
a = b+c;
- supondo variáveis mantidas em registradores!
Operações de Transferência de Dados
- transferência memória-registrador: LOAD
- transferência registrador-memória: STORE
- exemplos: LW e SW
- acesso a campos de structs
- acesso a campos de arrays
referência: Patterson & Hennessy,
3.1, 3.2, 3.3.
3/09
Instruções MIPS e Representação de Mecanismos de C (cont)
Arrays e ponteiros em C e tradução para assembly
- o conceito de ponteiro em C
- ponteiros e arrays: semelhanças e diferenças
- aritmética com ponteiros
- arrays multidimensionais - cálculo de endereço de um campo
Representação de Intruções MIPS
- tamanho fixo de 32 bits
- campos e diferentes formatos de instruções
importante: Não há distinção entre instruções
e dados para a máquina! A sequÊncia de endereços
usados como ponteiros para instruções e os
dados usados nas instruções é que determinam
o que é instrução e o que é dado!
referências: Patterson & Hennessy,
3.4, K&R, capítulo 5.
8/09
Instruções para Tomada de Decisão
- importância de condicionais e repetições!
- código gerado para um
if
simples
- código gerado para um
if-then-else
- código gerado para
while
e do ... while
- comandos
break
e continue
- código gerado para um
for
- código gerado para um
switch
- idéia de uma tabela de jumps !!
exercícios:
Suponha que as variáveis f, g, h, i, j e k estão
armazenadas nos registradores $s0 .. $s5.
- Mostrar o código MIPS que seria gerado para
do
f = f+g;
if (f > i) break;
g = g-k;
while (g > 0);
- Supondo que o endereço de a está armazenado em
$s6, mostrar o código MIPS que seria gerado para
while (i < j)
a[i] = j;
referências: Patterson & Hennessy,
3.5.
10/09
Instruções MIPS e Representação de Mecanismos C (cont)
Chamadas de Funções
referências: Patterson & Hennessy,
3.6.
15/09
Instruções MIPS e Representação de Mecanismos C (cont)
Funções e Procedimentos
- convenções: registradores $a0.. $a3, $v0, $v1, $t0..$t9
- exemplo de subrotina:
strcopy
- exercícios
-
void memfill (char *m, int n, char c)
-
void memcpy (char *d, char *o, int n)
-
int strlen (char *s)
referências: Patterson & Hennessy,
A.6 e A.10.
Last update: Tue Sep 15 15:43:48 EST 1998
by Noemi