4646T-2 - Programação de Baixo Nível
Prof. Márcio Sarroglia Pinho

Programa da Disciplina

OBJETIVOS:

O cumprimento da disciplina busca dar ao aluno, ao final do semestre, condições de:

•    Dominar a forma de representação interna das variáveis em um programa
•    Dominar os mecanismos de manipulação da estrutura interna de variáveis
•    Avaliar e aplicar as melhores técnicas de alocação dinâmica de memória
•    Avaliar e aplicar as melhores técnicas de uso de ponteiros para variáveis
•    Dominar a utilização de aritmética de ponteiros, sendo capaz de avaliar a melhor alternativa em cada situação
•    Dominar a utilização de strings e vetores com ponteiros, sendo capaz de avaliar a melhor alternativa em cada situação
•    Utilizar ponteiros para funções


EMENTA:

Discussão sobre utilização de linguagens de programação de baixo nível. Estudo da estrutura de um programa em C, variáveis, comandos e subprogramas. Entendimento dos processos de geração de código(pré-processamento, compilação e ligação).  Análise da forma de armazenamanto de variáveis em memória. Análise sobre a representação interna de variáveis(operações bitwise). Compreensão da noção de ponteiros e sua relação com o uso de vetores e strings. Estudo sobre passagem de parâmetris com ponteiros. Estudo sobre alocação dinâmica de menória. Estudo sobre ponteiros para funções. Estudo sobre estruturas encadeadas em C.

CONTEÚDO PROGRAMÁTICO:

UNIDADE 1: Introdução à Linguagem C

1.1    Motivação para uso de linguagens de baixo nível
1.2    Processo de compilação: pré-processador, compilador e ligador
1.3    Ferramentas de programaçãoddb, lint checker, gprof
1.3.1    Modularização via makefiles,
1.3.2    Ambientes de desenvolvimento
1.4    Estrutura básica da linguagem C
1.4.1    Tipos básicos e constantes
1.4.2    Variáveis do tipo ponteiros
1.4.3    Operadores lógicos, aritméticos e de comparação
1.4.4    Comandos de seleção e repetição
1.5    Uso de Subprogramas
1.5.1    Passagem de parâmetros utilizando ponteiros
1.5.2    Escopo de variáveis
1.5.3    Tipos de retorno
1.6    Estruturas de dados
1.6.1    Struct, union
1.6.2    Enumerações, vetores uni e multidimensionais
1.6.3    Strings
1.7    Arquivos
1.8    Criação de Bibliotecas

UNIDADE 2 - Manipulação de Bits

2.1    Operações bitwise: OR, AND, XOR, NOT, deslocamento 

2.2    Mascaramento de bits
2.3    Aplicações típicas de operações bitwise

UNIDADE 3  - Alocação Dinâmica de Memória e Ponteiros
3.1    Organização das variáveis em memória
3.1.1    Tamanhos dos tipos básicos em memória
3.1.2    Char, short int, int, long int, float, double, pointer
3.1.3    Vetores e Structs 
3.2    Diferença entre endereço e valor de uma variável
3.3    Ponteiros
3.3.1    Definição
3.3.2    Passagem de parâmetros com ponteiros
3.3.3    Uso de ponteiro para acesso a arrays, string e structs
3.3.4    Aritmética de Ponteiros
3.3.5    Typecast com ponteiros
3.3.6    Ponteiros para funções  e uso de callback functions
3.4    Gerência dinâmica de memória
3.4.1    Alocação
3.4.2    Desalocação
3.4.3    Memory Leaks
3.5    Estruturas encadeadas
3.6    Depuração de ponteiros
 
AVALIAÇÃO

G1 = (P1 + P2 + T) / 3

Onde T é a média dos trabalhos realizados ao longo da disciplina