Organização de Computadores e Linguagem de Montagem

1. Visão geral

Esta página apresenta os materiais que tenho utilizado para ministrar a disciplina "Organização de Computadores e Linguagem de Montagem" pelo Instituto de Computação da Unicamp.

O curso intitulado "Organização de Computadores e Linguagem de Montagem" da Unicamp é um curso de 60 horas aula onde os alunos aprendem conceitos básicos de organização de computadores e programação em linguagem de montagem.

O curso é oferecido para alunos dos cursos de "Ciência da Computação", "Engenharia de Computação" e "Engenharia de Controle e Automação" e é dividido em atividades teóricas (30h) e práticas (30h).

Costumo dividir o curso em três partes. Na primeira parte utilizo o computador IAS para introduzir os conceitos básicos de organização básica de computadores, programação em linguagem de máquina e em linguagem de montagem, e o processo de montagem. A Seção 2 contém apontadores para os materiais utilizados nesta parte do curso. Além disso, os itens 2, 3 e 4 da Seção 4 contém apontadores para os slides e para as videoaulas desta parte do curso.

Na segunda parte do curso, discuto como informações são representadas em computadores modernos e uso a arquitetura RISC-V RV32 para ensinar programação em linguagem de montagem com uma arquitetura moderna. Nesta parte, o foco é ensinar como o programador pode, através de rótulos, diretivas de montagem e de instruções do processador, implementar elementos de programação em linguagens de alto nível, como variáveis globais e locais, estruturas condicionais, laços de repetição e rotinas. Também apresento a ABI (Application Binary Interface) e mostro como ela facilita a composição de software com bibliotecas de terceiros. Vale destacar que nesta parte do curso as operações de entrada e saída de dados são realizadas com a ajuda do sistema operacional através de chamadas ao sistema (syscalls). A Seção 3 contém apontadores para os materiais utilizados nesta parte do curso. Além disso, os itens 5 a 10 da Seção 4 contém apontadores para os slides e para as videoaulas desta parte do curso.

Por fim, na última parte do curso, uso a arquitetura RISC-V RV32 para apresentar conceitos de programação em nível de sistema. Primeiramente discuto como acessar periféricos utilizando MMIO (Memory Mapped I/O). Em seguida, discuto como podemos melhorar a interação com os periféricos utilizando interrupções externas. Por fim, apresento os mecanismos de exceções e interrupções por software e mostro como estes mecanismos podem ser usados para proteger o sistema contra programas defeituosos ou maliciosos. A Seção 3 contém apontadores para os materiais utilizados nesta parte do curso. Além disso, os itens 11 a 13 da Seção 4 contém apontadores para os slides e para as videoaulas desta parte do curso.

2. Material IAS

Para o IAS, além de uma apostila, há um simulador e um montador escrito em JavaScript que rodam no navegador. Além disso há cartões de referências com as instruções do computador e com um resumo das instruções e diretivas de montagem para a linguagem de montagem do computador do IAS.

Os conceitos cobertos por este material são bem básicos e tenho utilizado este material no primeiro mês de aula para nivelar a turma. Dessa forma, quando introduzo a arquitetura RV32 os alunos já têm uma boa noção dos elementos da arquitetura (p.ex., registradores, memória, ...) e da linguagem de montagem (p.ex., rótulos, diretivas e instruções). Por outro lado, o material do RISC-V, apresentado na Seção 3, é autocontido e pode ser utilizado do início ao fim do curso sem a necessidade de se discutir o IAS.

Programando o Computador IAS: Apostila que apresenta a organização e a operação do Computador do IAS, conceitos básicos de programação em linguagem de máquina usando o computador do IAS e conceitos básicos de programação em linguagem de montagem.
Simulador do computador IAS: Este simulador permite que o aluno execute pequenos programas escrito em linguagem de máquina e acompanhe sua execução passo a passo. Por ser implementado em JavaScript, pode ser executado no navegador, sem a necessidade da instalação de softwares no computador do aluno.
Cartão de referência do conjunto de instruções do computador IAS: Este cartão de referência contém um resumo das instruções do computador IAS.
Montador do computador IAS: Este montador permite a edição e a montagem de pequenos em linguagem de montagem para o computador do IAS. A ferramenta está integrada com o simulador do IAS de forma que o usuário pode, com um único clique no botão Load IAS Sim, montar o programa e carregá-lo no simulador do IAS, descrito acima. Por ser implementada em JavaScript, pode ser executado no navegador, sem a necessidade da instalação de softwares no computador do aluno.
Cartão de referência do montador do IAS: Este cartão de referência contém um resumo das instruções e diretivas de montagem para a linguagem de montagem do computador do IAS.

3. Material RISC-V

Na segunda e na terceira parte do curso utilizo o livro intitulado "An Introduction to Assembly Programming with RISC-V". Uma cópia aberta do livro e do simulador podem ser encontrados em https://riscv-programming.org/.

An Introduction to Assembly Programming with RISC-V: Livro didático que apresenta programação em linguagem de montagem utilizando a arquitetura RISC-V. Enquanto outros livros sobre RISC-V focam em detalhes e decisões de projeto da arquitetura, este livro foca nos conceitos de programação em linguagem de montagem.
RISC-V Assembly Learn Environment: Este simulador permite que o aluno execute código RISC-V RV32 e programe diversos periféricos. Por ser implementado em JavaScript, pode ser executado no navegador, sem a necessidade da instalação de softwares no computador do aluno.
Cartão de referência do montador do RISC-V: Este cartão de referência contém um resumo das instruções e diretivas de montagem para a linguagem de montagem do RISC-V.

4. Slides e aulas gravadas

No segundo semestre de 2020 eu gravei as aulas teóricas do curso e as disponibilizei para os alunos na plataforma YouTube. Os vídeos foram segmentados em seções, o que permite que o aluno avance com facilidade para o tema de interesse. Segue abaixo o link para os slides e para os vídeos. Para visualizar as seções, após abrir o vídeo na plataforma YouTube, clique em "mostrar mais/show more" logo abaixo do vídeo.