MAC-211 -- Laborat�rio de Programa��o

Primeiro Semestre de 1999

. Informa��es gerais
. Ementa da disciplina
. T�picos tratados em aula
. Leitura recomendada
. Exemplos
        
. Exerc�cios-programa
. Notas
. Recupera��o
. Lista de discuss�o da disciplina
. Refer�ncias

[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 B-9
. Hor�rio: ter�as das 8:00 �s 9:40, quintas das 10:00 �s 11:40
. Professor: Francisco Reverbel
. Avalia��o: duas provas, exerc�cios-programa, projeto em equipe de at� dois alunos
. Primeira prova: 22 de abril
. Segunda prova: 24 de junho (era 22 de junho e foi adiada porque coincidia com outra prova )
. Prova substitutiva: 01 de julho, �s 10:00 (para quem perdeu alguma das provas anteriores)
. Entrevistas sobre os projetos: leia esta mensagem
. Pasta Xerox CAMAT: n�mero 55
. Entrega de trabalhos: pelo sistema de entrega eletr�nica, mais listagens impressas

T�picos Tratados em Aula

. 23/02/99: Apresenta��o. Plano do curso. Arquitetura dos microprocessadores x86 (386/486/586) da Intel.
. 25/02/99: Bytes, words e doublewords na mem�ria do x86: o esquema "little endian" (byte menos significativo primeiro). Mem�ria linear versus mem�ria segmentada. Programa "hello, world" para o NASM. A pilha do x86. Instru��es push, pop, call e ret.
. 02/03/99: Chamadas diretas ao Linux: outra vers�o do programa "hello, world". Uso de equ e $: mais uma vers�o do "hello, world". Se��es de um programa: c�digo (.text), dados inicializados (.data) e dados n�o inicializados (.bss). Diretivas db, dw, dd, resb, resw e resd. Acesso a vari�veis na mem�ria: r�tulos de vari�veis, uso do operador [ ]. Instru��es de compara��o (cmp), desvio condicional (jne, ...) e desvio incondicional (jmp). Programa que soma uma seq��ncia de inteiros.
. 09/03/99: An�lise de uma listagem gerada pelo NASM. Introdu��o � reloca��o de c�digo: acerto de endere�os em tempo de link e em tempo de carga. Classifica��o dos operandos de instru��es: registrador, imediato, direto, indireto via registrador, indexado (com ou sem fator de escala).
. 11/03/99: Passagem de par�metros na pilha: como a rotina chamada acessa os par�metros empilhados. Exemplo: o m�dulo syscalls.asm. Vari�veis alocadas na pilha. Recurs�o em linguagem de montagem. Exemplo: torres de Hanoi.
. 16/03/99: Coment�rios finais sobre passagem de par�metros e aloca��o de vari�veis na pilha. Observa��es sobre o primeiro EP. N�meros inteiros com sinal: representa��o em complemento de dois. Significado dos flags de "carry" (CF) e de "overflow" (OF) do x86.
. 18/03/99: Instru��es de desvio condicional: o que elas realmente fazem (que flags elas testam) e como us�-las ap�s compara��es de n�meros com sinal e sem sinal. Convers�o (alargamento) de tipos por extens�o de sinal ("sign-extension"). Deslocamentos para a direita: shr (n�meros sem sinal) e sar (n�meros com sinal).
. 23/03/99: Arquivos no Linux: seq��ncias de bytes. System calls para manipula��o de arquivos: open, read, write, lseek, close, fsync. Organiza��o f�sica de um disco: cilindros, faces, trilhas e setores. O conceito de "arquivo" como uma abstra��o que o S.O. constr�i sobre o disco f�sico. Import�ncia dos buffers de entrada e sa�da. Conversa inicial sobre o projeto do curso.
. 25/03/99: Gerenciamento de buffers. Discuss�o sobre a primeira etapa do projeto do curso.
. 06/04/99: Ainda sobre manipula��o de arquivos no Linux: o file descriptor como um �ndice para a tabela de arquivos abertos do processo. Bufferiza��o no ambiente Unix/Linux: a bufferiza��o feita pelo sistema operacional (para economizar acessos a disco) e a feita pela libc (para economizar chamadas ao sistema). N�veis de privil�gio numa CPU protegida: modo sistema (mais privilegiado) e modo usu�rio (menos privil�gio). Custo relativamente alto de chamadas a um S.O. protegido (como o Linux ou o Windows NT).
. 08/04/99: Modulariza��o de c�digo em C: arquivos-fonte compilados separadamente, uso de static para esconder vari�veis ou fun��es internas a um m�dulo, uso de header files (arquivos .h) com prot�tipos das fun��es exportadas pelo m�dulo e (mais raramente) com declara��es de vari�veis exportadas pelo m�dulo. Modulariza��o de c�digo em Java: a "unidade de modulariza��o" � a classe. (Em C � o arquivo.) Significado de static em Java: campos de inst�ncia versus vari�veis de classe (static), m�todos de inst�ncia versus m�todos de classe.
. 13/04/99: Resolu��o de d�vidas sobre a primeira etapa do projeto do curso.
. 15/04/99: Resolu��o de mais d�vidas sobre a primeira etapa do projeto do curso.
. 20/04/99: Revis�o: m�dulos montados ou compilados separadamente; liga��o de m�dulos (link); modulariza��o de programas em C; manipula��o de arquivos via chamadas ao sistema e manipula��o de arquivos via fun��es de biblioteca.
. 22/04/99: Primeira prova.
. 27/04/99: Inicia��o de vari�veis de classe em Java; blocos de inicializa��o est�ticos. O programa make.
. 29/04/99: Recomenda��es sobre a entrega do EP2. O programa tar. Interfaces em Java.
. 04/05/99: A segunda etapa do projeto do curso: o gerenciador de arquivos do JBase, API do JBase.
. 06/05/99: Conceitos sobre organiza��o de discos: formata��o f�sica e formata��o l�gica, aloca��o de blocos a arquivos, diret�rio de arquivos. Heapfiles orientados para registros: formato de p�gina, diret�rio dos slots numa p�gina, implementa��o de um heapfile como lista ligada de p�ginas ou como diret�rio de p�ginas. Analogias na segunda etapa do projeto do curso: DBFile <-> disco sem formata��o l�gica, Database <-> disco formatado logicamente, RecordSets num Database <-> arquivos num disco.
. 13/05/99: Heran�a de classes em Java.
. 18/05/99: Resolu��o de d�vidas sobre a segunda etapa do projeto do curso.
. 20/05/99: Resolu��o de d�vidas sobre a segunda etapa do projeto do curso.
. 25/05/99: Exce��es: motiva��o (compara��o com c�digos de erros) e implementa��o (como desvios n�o locais que "abaixam" a pilha de execu��o). Exce��es em Java. Desvios n�o locais em C (fun��es setjmp e longjmp). O programa grep.

Leitura Recomendada

. Em 04/03/97:
  • Os seguintes trechos do livro The Art of Assembly Language Programming:
    • Cap�tulo 1 (Data Representation), at� a sec��o 1.12.
    • Cap�tulo 4 (Memory Layout and Access), at� a sec��o 4.7. D� menos aten��o � sec��o 4.6, que � espec�fica do 8086 e n�o ser� usada no curso.
  • Os seguintes trechos do manual do Netwide Assembler:
    • Cap�tulo 3 (The NASM Language), at� a sec��o 3.5.
    • O in�cio do cap�tulo 8 (Writing 32-bit Code), at� a sec��o 8.1.3.
  • Use uma das op��es abaixo para ir se familiarizando com o conjunto de instru��es do x86. Fa�a isso aos poucos, n�o tente absorver tudo de uma vez! Seu objetivo n�o � memorizar o conjunto de instru��es dessa CPU e sim ter uma boa id�ia do que ela pode fazer!
    • Cap�tulo 3 (Basic Execution Environment) e cap�tulo 6 (Instruction Set Summary) do Intel Architecture Software Developer's Manual.
    • Cap�tulo 6 (The 80x86 Instruction Set) do livro The Art of Assembly Language Programming.
    • Ap�ndice A (Intel x86 Instruction Reference) do manual do NASM.

Exemplos

. Programas em linguagem de montagem do x86:
       . "Hello, world" para o NASM:
. Usando a libc
. Sem usar a libc (chamando diretamente o Linux)
. Tamb�m sem usar a libc (ilustra o uso de equ e $)
. Dividido em dois m�dulos montados separadamente: hello4.asm (o m�dulo principal) e syscalls.asm (m�dulo com chamadas diretas ao Linux)
       . Soma seq��ncia de inteiros
       . Torres de Hanoi

Exerc�cios-programa

. Programa dump em linguagem de montagem
. JBase - Gerenciador de Buffers (documenta��o da classe Buffer, arquivo Buffer.java)
. JBase - Gerenciador de Arquivos (documenta��o da classe HFPage, arquivo HFPage.java)
. JBase - Gerenciador de �ndices (leia esta mensagem)

Refer�ncias

. Linguagem de montagem do x86:
       . Linux Assembly HOWTO
       . C�pia local da documenta��o do NASM (o software pode ser obtido aqui)
       . Randall Hyde, The Art of Assembly Language Programming (livro online), 1996
       . Intel Architecture Software Developer's Manual Os ponteiros acima s�o para uma c�pia local de parte da documenta��o disponibilizada pela Intel.
       . x86 Assemby Language ASM FAQ

. Conceitos gerais sobre montadores, linkers e loaders:
       . Leland L. Beck, System Software: An Introduction to Systems Programming, 3rd edition, Addison-Wesley, 1997

. Linguagem C:
       . Brian Kernighan & Dennis Ritchie, The C Programming Language, second edition (ANSI C), Prentice-Hall, 1988

. Java:
       . Ken Arnold & James Gosling, The Java Programming Language, second edition (Java 1.1), Addison-Wesley, 1997
       . David Flanagan, Java in a Nutshell, second edition (Java 1.1), O'Reilly, 1997
       . Mary Campione & Kathy Wolrath, The Java Tutorial, second edition (Java 1.1), Addison-Wesley, 1997 (c�pia local)
       . The Java Platform API Specification: release 1.1, release 1.2 (estes ponteiros s�o para c�pias locais)
       . Java Code Conventions (o ponteiro � para uma c�pia local)

. Outros assuntos:
       . Eric S. Raymond, How to Become a Hacker (tradu��o para o portugu�s, por Rafael Caetano dos Santos)


Valid HTML 4.0! Last modified: Thu Jul 29 16:05:52 EST 1999
Francisco Reverbel
reverbel at ime.usp.br