MAC 211 - Laboratório de Programação

Primeiro Semestre de 2003

Prof. Francisco Reverbel

. Informações gerais
. Ementa da disciplina
. Assuntos tratados em aula
. Trabalhos propostos
        
. Bibliografia
. Lista de discussão da disciplina
. Recursos adicionais na Internet

At work icon Esta página estará em permanente construção até o final do semestre...

Informações Gerais

. Local: IME-USP, bloco B, sala 3
. Horário: terças das 10:00 às 11:40, quintas das 8:00 às 9:40
. Monitor: Alfredo Roberto Junior
. Pasta xerox CAMAT: número 71
. Avaliação: duas provas, trabalhos práticos, projeto final
. Primeira prova: 22 de abril
. Segunda prova: 24 de junho

Assuntos Tratados em Aula

Agradecimento: ao Prof. Fabio Kon, que disponibilizou as notas de aula referenciadas abaixo.
. 18/02: Apresentação. Organização das disciplinas práticas do BCC. Visão geral de MAC-211. Números binários e hexadecimais. Notas de aula.
. 20/02: Arquitetura dos processadores da família x86. Notas de aula.
. 25/02: Chamadas ao S.O. e programa "Hello, World!" em linguagem de montagem. Instruções de desvio incondicional, comparação e desvio condicional. Notas de aula.
. 27/02: Mais programas com chamadas ao S.O.: programa que lê um arquivo e escreve o conteúdo do arquivo na saída padrão (tela) e programa que copia a entrada padrão para a saída padrão.
. 11/03: Instruções aritméticas (ADD, SUB, INC, DEC) e lógicas (AND, OR, XOR). Tipos de operandos: registradores, constantes imediatas e dados na memória (da forma [endereço + reg_base + escala * reg_indice]).
. 13/03: Programa que copia a entrada padrão para a saída padrão, invertendo a ordem dos caracteres lidos. Os flags da CPU x86. Representação de números inteiros com sinal.
. 18/03: Desvios condicionais. Comparações de números com sinal e sem sinal.
. 20/03: Instruções de deslocamento (shift), multiplicação e divisão. Funções em linguagem de montagem.
. 25/03: A sintaxe AT&T, usada pelo as: diferenças em relação à sintaxe Intel usada pelo nasm. Exemplo de recursão em linguagem de montagem: hanoi.asm (programa que resolve o problema das torres de Hanoi). Aqui você encontra o mesmo programa, na sintaxe AT&T.
. 27/03: Diferenças entre a esquema de passagem de parâmetros adotado pela linguagem C e o esquema adotado por outras linguagens (Pascal, por exemplo). Modularização de programas em linguagem de montagem (módulos montados separadamente). Notas de aula.
. 01/04: Estrutura de um montador: a tabela de símbolos, montadores de um passo e montadores de dois passos. Relocação de código: acerto de endereços em tempo de ligação de módulos (link) e em tempo de carga do programa. Ligação estática e ligação dinâmica de bibliotecas. Noções básicas de sistemas operacionais (notas de aula).
. 03/04: Noções básicas de sistemas operacionais (continuação). Interpretador de comandos (shell). Notas de aula.
. 08/04: Shell (continuação).
. 10/04: Mais sobre a shell: metacaracteres, saída de um comando como argumento para outro comando, redirecionamento de entrada e saída (referência: Kernighan e Pike). Linguagem de montagem: revisão e tópicos adicionais (instrução loop, instruções de manipulação de cadeias, prefixo rep).
. 22/04: Primeira prova.
. 24/04: Visão geral do projeto da disciplina (simulador de canoagem). Manipulação de arquivos. Notas de aula.
. 29/04: Manipulação de arquivos (continuação). Notas de aula. Manipulação de arquivos via chamadas ao sistema operacional versus manipulação de arquivos via chamadas à biblioteca C.
. 06/05: Mais sobre filtros e comandos Unix. Notas de aula. Modularização de programas escritos em C.
. 08/05: Analisadores léxicos. Exemplo de programa C modularizado: calculadora pós-fixa. Notas de aula.
. 13/05: O utilitário make. Notas de aula.
. 15/05: Biblioteca XWC. Fase 2 do projeto. Notas de aula.
. 20/05: Calculadora recursiva com notação infixa. Notas de aula.
. 22/05: Processamento de macros, m4, autoconf. Notas de aula.
. 27/05: Autoconf (continuação). Expressões regulares, awk. Notas de aula.
. 03/06: O utilitário awk (continuação). O utilitário flex. Notas de aula.
. 10/06: Depuração e testes (Prof. Marco D. Gubitoso).
. 12/06: LaTex (Prof. Alfredo Goldman). Notas de aula.
. 17/06: Flex (continuação). Gnuplot. Notas de aula.
. 24/06: Segunda prova.
. 01/07: Prova substitutiva.

Trabalhos Propostos

. Primeiro exercício-programa (ps, pdf). Prazo: 08 de abril
. Primeira fase do projeto. Prazo: 19 de maio (o prazo original era 15 de maio e foi alterado a pedido da classe)
. Segunda fase do projeto. Prazo: 05 de junho
. Terceira fase do projeto. Prazo: 26 de junho

Bibliografia

. Randall Hyde, The Art of Assembly Language Programming. Livro online, com versões para 32 bits/Linux, 32 bits/Windows, e 16 bits/DOS.
. Bob Neveln, Linux Assembly Language Programming, Prentice-Hall, 2000. ISBN: 0130879401.
. Brian W. Kernighan & Rob Pike, The UNIX Programming Environment, Prentice-Hall, 1984. ISBN: 0139376992.

Recursos Adicionais na Internet

. Página de MAC211 e notas de aula do Prof. Fabio Kon.
. Lista de comandos úteis do emacs.
. Linguagem de montagem:
.Linux Assembly HOWTO (pdf).
.Using Assembly Language in Linux. Explica (1) a diferença entre a sintaxe da Intel e da AT&T, (2) como fazer chamadas ao sistema e (3) como colocar código de montagem dentro de um programa em C usando o gcc.
.ECE 291 - Laboratory Notes, University of Illinois. Inclui um bom manual de referência sobre o conjunto de instruções do 80x86.
.Manuais de referência do conjunto de instruções do 80x86 disponibilizados pela Intel: Instruction Set Reference do Pentium (566 páginas) e Instruction Set Reference do Pentium 4 (978 páginas). Economize papel, por favor!
.Páginas sobre Linux Sistem Calls (chamadas ao sistema):
.http://linuxassembly.org/syscall.html
.http://home.snafu.de/phpr/lhpsysc0.html
.linuxassembly.org. Contém ponteiros para muito material interessante.


Valid CSS! Valid XHTML 1.0! Last modified: Sat Jul 19 12:49:24 EST 2003
Francisco Reverbel
reverbel at ime.usp.br