Arquitetura de Computadores para BCC e BSI.
60 horas.
Fornecer uma visão dos principais componentes da arquitetura de um computador moderno, através do estudos dos principais subsistemas que dão suporte ao processador central e do detalhamento interno deste. Ao final da disciplina o aluno deve ser capaz de reconhecer e acessar a estrutura de computadores digitais.
BCC - Conceituação de sistemas numéricos e mudança de base. Caracterização da organização de sistemas de computação e detalhamento de subsistemas - memória, processador, dispositivos de entrada e saída de dados e barramentos. Caracterização e análise das formas de tradução de programas de uma linguagem de alto nível para um programa executável. Estudo de um conjunto de instruções e dos modos de endereçamento utilizados por um sistema de computação. Caracterização das interfaces paralela e serial. Caracterização de arquiteturas RISC e CISC. Linguagem de montagem. RISC e CISC. Prática de laboratório em arquitetura de computadores.
BSI - CPU: Unidade de controle e unidade de processamento. Modos de endereçamento. Classificação das instruções e fluxo de controle. Linguagem de montagem. RISC e CISC. Estudo de caso de processadores reais. Prática de laboratório em arquitetura de computadores.
Introdução à Arquitetura de Computadores.
Organização vs Arquitetura de Computadores.
Introdução à Linguagem de Montagem.
Arquitetura da Unidade Central de Processamento.
A Unidade Lógica e Aritmética.
Representação de Dados Numéricos.
Arquitetura do Conjunto de Instruções e Linguagem de Montagem.
Instruções de Máquina (Operações Lógicas e Avaliação de Condições).
Linguagem Assembly (Execução de Sub Programas).
Hierarquia e Modos de Endereçamento de Memórias.
Modos e formatos de endereçamento.
Formatos de instruções.
Lógica de Controle.
Micro-operações.
Lógica e Implementação do Controle.
Microprogramação.
Controle por Microprogramas.
Execução de Microinstruções.
Paralelismo e Arquiteturas RISC e CISC.
Aprender fazendo e fazer aprendendo. As ações implementadas têm como foco o aprendizado de Arquitetura de Computadores pelo uso de recursos computacionais - privilegiando o projeto por simuladores e o desenvolvimento prático; seguido de exposições teóricas, apoiadas por: simulações, slides e vídeos. Em resumo, a metodologia tem como base a tríade Conteúdo, Atividade e Produto.
A nota final será dada pelas avaliações dos artefatos (relatório, lista de exercício - manuscritas, apresentação oral, pôster, postagem, vídeo, ...) produzidos durante as aulas e entregues em cada uma das datas especificadas. O aluno também será avaliado através de outros recursos, como p.ex. a frequência e a apresentação de artefatos não obrigatórios - os quais poderão até ter pontuação extra.
Conteúdo:
Introdução à Arquitetura de Computadores.
Arquitetura e Organização de Computadores - Stallings (Capítulo 1).
Atividades:
Observando a diferença entre 7-7 e 7+(-7).
Execute as operações no K&S e na Máquina de 4 Bits.
Observe a saída de dados e os Flags.
Observe a geração de Flag na Máquina de 4 Bits.
Tente compreender os Flags do K&S em relação a Máquina de 4 Bits.
Analisando a "ISA" do 8 Bit Simulator.
O que representa uma "ISA" de um microprocessador?
Destaque os possíveis tipos de dados usados na programação.
Verifique como são implementados os desvios condicionais.
Avaliativa:
Nos primórdios da computação, os programas e dados eram inseridos no computador em sua forma elementar, ou seja, em binário. Vamos provar que isso ainda é possível. Usando o K&S Simulator, faça um programa em binário, para calcular a somatória dos 5 primeiros números inteiros pares, maiores que o número encontrado nos 3 últimos dígitos da sua matrícula. Use como recurso o programa no K&S Simulator (ISA) para Somar Dois Números Inteiros.
Formulário de Respostas para as atividades das aulas de 1 a 4.
Desafio:
Além da somatória, calcule a média dos 5 números. Observe a Divisão Sem Usar O Operador '/'.
Fazer a atividade proposta no Altair.
Produtos:
Conteúdo:
A Unidade Lógica e Aritmética.
Arquitetura e Organização de Computadores - Stallings (9.1).
Projeto de Sistemas Computacionais - Unidade Lógica e Aritmética.
Atividades:
Projetando uma ULA Simples de 4 Bits.
Ideia Geral: Criar 4 ULAs de 1 Bit e Integrá-las em um circuito de 4 Bits.
Operações: Soma, Subtração, AND e OR.
Entradas: 4 Bits do operando A; 4 Bits de B; Transporte de Entrada (vem 1) e Código da Operação em 2 Bits.
Saídas: Bit de Resultado e Transporte de Saída (Vai 1).
Observe um possível resultado (Circuito) no Falstad.
Planilha usada para gerar a Tabela Verdade de cada ULA de 1 Bit.
Implementando no Logic.ly.
Construindo uma ULA de 1 Bit e 4 Operações.
Construir o CI Somador.
Construir o CI Seletor.
Conectar as entradas aos circuitos AND, OR, NOT e de Soma, e integrar com o Seletor.
Integrar as 4 ULAs de 1 Bit.
Avaliativas:
Um computador "toma decisões"? Existe uma "lógica" para isso? Tentando responder a estas questões, use o K&S Simulator para escrever um programa que compare dois números inteiros, verificando se o primeiro é maior que o segundo. Sugestão: Compare a lógica de saltos nas ISAs do K&S e do 8-Bit Simulator.
Desafio: Programando o simulador do Altair (ISA) para calcular os 10 primeiros números da Sequência de Fibonacci.
Produtos:
Conteúdo:
Representação de Dados Numéricos.
Arquitetura e Organização de Computadores - Stallings (9.2 a 9.5).
Atividades:
Adaptando expressões matemáticas para o 8-Bit Assembler.
Observe a prioridade matemática de avaliação da expressão.
Organize as sub expressões de acordo com a prioridade de execução.
Divida e expressão, gerando sub expressões de operações atômicas.
Escreva o programa, em 8-Bit Assembler, para executar as sub expressões.
Analisando programas de Conversão de Binário (em 8 bits) para Hexadecimal.
Verifique as alterações necessárias à conversão para outras bases.
Construa um novo programa em C++, que não seja limitado a 8 bits.
Responda:
O algoritmo usado, pode ser facilmente adaptado para conversão em outras bases?
Qual o motivo de ser criada uma lista com as potências necessárias, ao invés de calculá-las?
Avaliativas:
Desenvolva um programa em C que leia um número real qualquer e exiba o seu equivalente em binário, usando a conversão direta. Em complemento a este programa, você pode desenvolver um outro que implemente a conversão de acordo com o padrão IEEE 754, em 8 bits. Para melhor compreender o processo, analise o Conversor "IEEE 754 em 8 bits" para Real.
Desafio: Soma em Ponto Flutuante com 8 Bits.
Produtos:
Conversor Binário para Hexadecimal.
Conversor Decimal Inteiro (v0) para Binário, para o 8-Bit Assembler.
Como Converter de Números Decimais Fracionários para Binários.
Como Converter Números de Binários para Decimais Fracionários.
Calculadora: Conversão de números fracionários entre sistemas de numeração.
Norma IEEE 754.
Conversão Real<->Binário:
Separando parte Inteira e Fracionária de Reais.
Convertendo Fração de Real para Binário.
Convertendo Fração de Binário para Real.
Convertendo Decimal para IEEE 754 em 32 bits.
Conversão de Real para Binário Fracionário.
Conversão de Binário Fracionário para Real.
Conteúdo:
Instruções de Máquina (Operações Lógicas e Avaliação de Condições).
Arquitetura e Organização de Computadores - Stallings (10.1 a 10.5).
Atividades:
Executando Desvios Incondicionais.
Analise o código em Assembly.
Observe o uso de desvios incondicionais na implementação da estrutura de seleção condicional.
Controlando desvios: Seleções e Laços.
Analise os códigos em Assembly.
Observe como as estruturas de controle de fluxo são implementadas nas linguagens de baixo nível.
Avaliativas:
Faça um programa em assembly (8-Bit Assembler) que verifique, para cada caractere de uma String, se este é: um número, uma Letra maiúscula, uma letra minúscula, ou outro caractere qualquer. O programa deve substituir, cada caractere da String, pelos caracteres { N, M, m, O }, que representam cada um dos tipos verificados.
Veja como estas estruturas de controle são usadas no programa para Inverter o Conteúdo de uma String. Você avaliaria que o modo de implementação usado é o mais eficiente?
Produtos:
NASM 64: Seleções, Laços e Deslocamentos.
Conteúdo:
Revisão de conteúdos e 1ª Avaliação.
Atividades:
Relatório de Produto 1 ou Prova Prática 1.
Conteúdo:
Linguagem Assembly (Execução de Subprograma).
Arquitetura e Organização de Computadores - Stallings (Apêndice B).
Atividades:
Criando função para calcular Potências de 2 em Assembly.
Problema: Diferentemente dos comandos de controle de fluxo "estruturados", que não são implementados em Assembly; existem comandos específicos para chamada de rotinas (internas e externas ao programa Assembly). Para exemplificar este contexto, faça dois programas para calcular a média entre os elementos pares de dois vetores; onde o primeiro terá seus "módulos de trabalho" implicitamente implementados e o segundo, usará de chamadas de rotinas para implementar cada um destes "módulos".
Produtos:
Funções para exibir Strings e Inteiros.
Conteúdo:
Modos e formatos de endereçamento.
Arquitetura e Organização de Computadores - Stallings (11.1 e 11.2).
Atividades:
Demonstrando Modos de Endereçamento.
Exemplo Extremo: Alterar um programa em tempo de execução.
Problema: Toda linguagem de programação tem como funcionalidade básica a manipulação de dados. Desta forma, todo programa de computador, além das instruções para manipulação de dados, conta com diversos tipos de construções sintáticas para acesso aos dados pelas instruções. Para "visualizar" algumas destas estas construções, faça um programa em C++ que manipule, usando de ponteiros, os caracteres uma String qualquer, de modo que: i) cada um de seus caracteres em "caixa baixa", seja substituído por seu equivalente em "caixa alta" e; ii) todos os caracteres numéricos sejam substituídos pela parte inteira da raiz quadrada do mesmo.
Produtos:
Conteúdo:
Formatos de instruções.
Arquitetura e Organização de Computadores - Stallings (11.3 a 11.5).
Atividades:
Entendendo o Fatorial Recursivo de um número.
Use teste de mesa para a analise do fatorial interativo e do recursivo em C++.
Analise o fatorial recursivo no programa Assembly, observando o uso da Pilha.
Calculando Potência em Modo Recursivo.
Observe a implementação da função.
Avalie o uso de recurso semelhante para o tratamento de Strings.
Produtos:
Assembly 64: Chamadas de rotinas e vetores.
Conteúdo:
Micro-operações.
Arquitetura e Organização de Computadores - Stallings (15.1).
Atividades:
Criando micro-operações no K&S Simulator.
Operação inversão (+/-) de um número decimal.
N = N - N * 2.
Operação inversão (NOT) de um número binário (em decimal).
B = ( B - B * 2 ) - 1.
Problema: Um compilador, em muitos casos, implementa seus algoritmos com base na teoria dos autômatos finitos. Uma das tarefas comuns em um compilador é fazer análise léxica. Dentro deste contexto, faça um programa para verificar se o nome de uma variável em C (definida por um programador) está correto, ou não. Dica: você pode usar de recursos como desvios incondicionais e as pseudo micro-operações (descritas aqui) na implementação da sua solução.
Produtos:
Conversão de Binário para Hexadecimal.
Simulando ação de vírus (extra).
Conteúdo:
Revisão de conteúdos e 2ª Avaliação.
Atividades:
Relatório de Produto 2 ou Prova Prática 2.
Conteúdo:
Lógica e Implementação do Controle.
Arquitetura e Organização de Computadores - Stallings (15.2 e 15.3).
Unidade de Controle Microprogramável (até o tópico 3.1).
Atividades:
Como as micro-operações "manipulam" e controlam a execução?
Observando a Lógica de Controle do K&S Simulator:
Faça um microprograma para ler dois valores da memória e efetuar a soma entre eles.
Verifique na execução de cada uma das microinstruções, como a configuração da máquina é alterada.
Observar botões, chaves e marcadores de endereços.
Observando a Lógica de Controle da CPU de 2 Bits.
Faça um programa para ler dois valores (via DE) e efetuar a subtração entre eles.
Quais operações (sub circuitos) são habilitadas na execução de cada tarefa?
Produtos:
Componentes de uma CPU: UC, Registradores, ULA.
Conteúdo:
Controle por Microprogramas e Execução de Microinstruções.
Arquitetura e Organização de Computadores - Stallings (16.1 a 16.3).
Unidade de Controle Microprogramável (a partir do tópico 3.2).
Atividades:
Exercitando: Faça um programa no K&S Simulator para incrementar de 1 um valor armazenado em memória.
Problema: No K&S Simulator, verifique a possibilidade de criar um programa para calcular o fatorial de um número, usando o método recursivo (implementando uma pilha em memória).
Formulário de Envio da Avaliação 2 - Turma 2.
Produtos:
Desafio: Ordenação Quick Sort em Assembly.
Conteúdo:
Paralelismo e Arquiteturas RISC e CISC.
Arquitetura e Organização de Computadores - Stallings (13 e 14).
Atividades:
Observando as características gerais do Processamento Paralelo e Distribuído.
Apache Kafka: O que é e como funciona?
Arquitetura Kafka em transmissões de eventos esportivos.
Como Paralelismo e Sincronização podem ser implementados em Semáforos Microcontrolados: 1º, 2º, 3º e 4º.
Problema: Implementar semáforo de cruzamento com solicitação de prioridade para pedestre.
Veja as opções de processamento de interrupções no Arduino.
Comparando Arquiteturas CISC e RISC.
Produtos:
Projetos ISA MIPS.
A visual simulator for teaching computer architecture using the RISC-V instruction set (emulsiV).
Conteúdo:
Apresentação de Trabalhos.
Atividades:
Relatório de Produtos.
Conteúdo:
Revisão de conteúdos e 3ª Avaliação.
Atividades:
Relatório de Produto 3 ou Prova Prática 3.
MONTEIRO, Mário A. Introdução à Organização de Computadores. 4a ed. LTC, 2001.
STALLINGS, William. Arquitetura e Organização de Computadores: Projeto para Desempenho, 5a ed. Prentice-Hall, 2002.
TANENBAUM, Andrew S. Organização estruturada de computadores. 5a ed. Prentice-Hall, 2006.
Introdução à Arquitetura de Computadores (WikiLivro).
Organização e Arquitetura de Computadores (Livro Técnico).
Ferramentas:
K&S Simulator, 8-Bit Assembler (tutorial), WeMIPS, NASM; C, Blockly, Compiler Explorer.
Outros: Tabela ASCII, Hello World em x86, System Calls.