Buscar

Organização de Computadores

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 79 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 79 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 79 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

2
ORGANIZAÇÃO DE COMPUTADORES
AULA 1 – EVOLUÇÃO HISTÓRICA DA COMPUTAÇÃO
A computação hoje conhecida é resultado de uma diversidade de pesquisas realizadas no passado. No decorrer dos anos, décadas e até mesmo séculos, o ser humano tem desenvolvido métodos que possam automatizar, otimizar ou agilizar tarefas que antes demandavam maior esforço. Assim, ao longo dos anos, cientistas, pesquisadores, entre outros, iniciaram o desenvolvimento de dispositivos ou recursos que pudessem trazer esses resultados.
Durante esta aula, iremos conhecer parte desta história, que continua sendo desenvolvida a cada dia, com novos resultados e lançamentos em tecnologias que poderíamos imaginar que já estariam em seu auge de desenvolvimento, mas que nos espanta com novos recursos.
De acordo com a época, veremos que equipamentos desenvolvidos se tornaram precursores de novas tecnologias. Alguns possuíam recursos tão grandes para a época, mas hoje já se pode possuir na palma da mão equipamentos com capacidade muito superior, como é o exemplo dos smartphones disponíveis no mercado atual.
Esta aula, portanto, possibilitará uma visão geral sobre a evolução dos computadores, suas gerações e o que motivou o desenvolvimento de cada uma delas. Também iniciaremos a definição de conceitos importantes para se identificar recursos de máquinas, bem como suas finalidades.
Introdução da história da tecnologia
A história da tecnologia e consequentemente da computação se dá desde o momento em que compreendemos o surgimento do fogo e o descobrimento que ele poderia ser usado a favor do ser humano como ferramenta de grande importância para a civilização.
Tais descobertas desencadearam a busca pelo conhecimento por parte do ser humano. Através desse conhecimento e da evolução dele, novas tecnologias e ferramentas podem ser desenvolvidas e surgem a cada dia. Se não fosse isso, continuaríamos até os dias de hoje morando em cavernas, porém aquecidos com o fogo.
O fogo incentivou a descoberta da manipulação dos metais, que permitiu a criação de novas ferramentas para caça e manipulação da madeira etc.
Com o passar do tempo, podemos identificar que todo esse desenvolvimento possui uma motivação: a busca pela otimização de processos para a melhoria do cotidiano, seja de uma pessoa, ou até mesmo de uma civilização.
É muito importante, portanto, compreendermos essa busca pela otimização de processos e ferramentas para entendermos o desenvolvimento dos computadores como fruto desta descoberta. É isso que veremos a seguir.
O surgimento e as gerações na evolução dos computadores
De acordo com os grandes autores da computação, a história dos computadores pode ser dividida em gerações.
Considerando Tanenbaum (2007), por exemplo, a Geração Zero é chamada dessa forma pois foi formada por dispositivos mecânicos.
As gerações seguintes foram formadas pelo surgimento de dispositivos eletrônicos, marcados por alguma inovação.
Já outros autores defendem a subdivisão da geração zero em dois momentos: a dos dispositivos mecânicos e a dos dispositivos eletromecânicos, mas nada que altere as gerações posteriores.
Para entendermos melhor toda essa evolução, veremos um pouco de cada uma delas, mas podemos enfatizar, neste momento, que as gerações de computadores antecederam até mesmo o surgimento da eletricidade, ou seja, dos dispositivos mecânicos, em que os equipamentos se baseiam no uso de engrenagens, entre outras formas de construção, e, por isso, também podem ser considerados equipamentos de grande tecnologia para a sua época.
A partir daí, com a vinda das gerações seguintes, veremos que um dos destaques será o tamanho dos equipamentos construídos, cada vez menores, e o desenvolvimento de capacidades de processamento cada vez maiores, devido ao surgimento de novas tecnologias eletrônicas usadas para marcar uma geração específica da evolução dos computadores.
Geração Zero - Computadores Mecânicos e Eletromecânicos
A geração de computadores mecânicos se resume ao uso de equipamentos que otimizaram processos da civilização através do uso de alguns dispositivos, como, por exemplo, aqueles que facilitavam o cálculo de resultados.
500 a.C. – Ábaco
Existem vários tipos de ábaco, porém se resumem ao uso de bolinhas deslizantes que representam unidades decimais, dezenas, centenas, entre outros, e cálculos relativos à soma e à subtração. Esse equipamento é o reflexo de uma grande evolução nas formas de cálculo da época e perdura até hoje, já que o ábaco continua sendo utilizado com a mesma finalidade, inclusive como instrumento didático para incentivar o pensamento e a lógica matemática.
1642-1644 – Calculadora de somar e subtrair
Aceleramos, então, para séculos mais “próximos”, entre os anos 1642-1644, quando o físico e filósofo francês Blaise Pascal, interessado em otimizar o processo de cálculos aritméticos, criou uma calculadora totalmente mecânica, que permitia o cálculo através de engrenagens.
Pascal criou a calculadora de somar e subtrair para ajudar seu pai a contabilizar os impostos na França, país onde trabalhava. O cálculo era feito totalmente através de engrenagens, onde uma manivela, operada manualmente, permitia que a conta fosse efetuada.
1673 – Calculadora das quatro operações fundamentais
Como dito anteriormente, a máquina de Pascal foi desenvolvida para cálculos de soma e subtração. Com base na mesma ideia, por volta de 1673, Gottfried Wilhelm von Leibniz propôs uma evolução da calculadora, possibilitando o cálculo das quatro operações básicas, ou seja, incluindo a multiplicação e a divisão através do uso de operações sucessivas, também todas executadas de forma manual, através de engrenagens. Temos, então, o que pode ser considerada a primeira calculadora básica com as quatro operações fundamentais, representando uma evolução para a época.
Revolução Industrial
Não podemos deixar de citar uma época fundamental para o avanço das tecnologias de computação: a época da Revolução Industrial. Nela, tivemos uma transição nos processos de produção da forma artesanal e manual para uma fabricação que intensificou o uso de máquinas, permitindo maior eficiência e agilidade, bem como a redução de erros e retrabalhos.
Veja outros destaques na história da evolução dos computadores:
Tear Programável
Nessa época, um dos dispositivos inovadores foi o Tear Programável, criado por Joseph-Marie Jacquard, um mecânico de teares. Ele inventou um sistema de operações repetitivas e sequenciais, até então executadas manualmente pelos tecelões, usando um conjunto de cartões metálicos perfurados, de forma que, à medida que os cartões eram lidos por uma agulha, a máquina sabia o que deveria ser feito no tecido a ser produzido. Veremos que essa invenção criou a primeira forma de comunicação e programação de uma máquina, mais uma inovação para a época.
Calculador Analítico
Surge, então, Charles Babbage, cientista, matemático e engenheiro mecânico, que se tornou o precursor da computação moderna através do projeto-conceito do Calculador Analítico, em 1822. Trata-se de uma máquina capaz de efetuar diversos cálculos, dotada de:
· Um mecanismo de processamento (que ele chamava de moinho);
· Uma unidade de entrada de dados através de cartões perfurados (baseado na ideia do tear programável), por meio do qual seriam inseridos os cálculos a serem efetuados;
· Cerca de 1000 bancos de memória (que ele chamava de armazém); e
· Uma unidade de impressão de cartões perfurados para o registro dos resultados.
Juntamente com a matemática Ada Augusta Lovelace, foram desenvolvidas todas as rotinas e fórmulas para que as instruções fossem processadas. Essas instruções e recursos até hoje são usados pelos computadores! O Calculador Analítico iniciou um desenvolvimento acelerado no que se refere à área de computação, de tal forma que Babbage hoje é conhecido como o precursor do Hardware e Ada Lovelace como a precursora do software e primeira programadora.
Tabulador de Hollerith
Com a chegada da eletricidade, alguns equipamentos marcaram a evolução da computação. Um deles éconhecido como Tabulador de Hollerith.
Utilizando o princípio descoberto por Jacquard para automatizar os teares, Hermann Hollerith, então funcionário do censo nos EUA, inventou, em 1880, uma máquina para realizar as operações de recenseamento da população. O objetivo desse equipamento era contar, classificar e ordenar informações armazenadas em cartões perfurados. O seu uso, na apuração dos dados de 1890, reduziu para dois anos e meio o tempo de apuração das informações. O censo anterior, feito de forma manual, demorou dez anos para ser concluído. O sucesso fez com que ele criasse a Tabulating Machine Company, companhia que, após a fusão com mais algumas empresas, se tornou a conhecida IBM (International Business Machines).
Percebemos que, em períodos onde ocorrem conflitos e guerras, há um grande avanço no desenvolvimento da tecnologia, em especial porque os países buscam inovações que os deixem à frente do inimigo. Naquela época, por exemplo, o tabulador de censo, então da IBM, assim como outras soluções, começou a ser empregado inclusive pelos nazistas, mesmo sendo de uma companhia americana.
Calculadora de Conrad Zuze
O próximo equipamento a ser citado, também de grande importância, é a calculadora de Conrad Zuze. Ele construiu durante a década de 1930 uma série de máquinas de calcular baseadas em relés mecânicos, que serviam como chaves que abriam e fechavam automaticamente. Esse foi o princípio para a utilização de números binários posteriormente e pode ser considerado o primeiro computador operacional do mundo.
O mais interessante de estudarmos essa evolução é percebermos a relação com os computadores atuais. Também identificamos facilmente o surgimento de grandes companhias de tecnologia que existem até hoje.
Geração de Computadores Eletrônicos
Devido à baixa capacidade e ao desgaste de peças em máquinas essencialmente mecânicas, tornou-se uma necessidade a substituição dos equipamentos que conhecemos na geração zero pelos que possibilitassem maior agilidade e menos desgaste.
Certamente a eletricidade e a eletrônica cooperaram para a evolução que veremos a seguir, basicamente dividida em fases evolutivas demarcadas pelo surgimento de materiais que permitiram mudanças consideráveis na forma em que os computadores eram projetados.
Primeira Geração (Válvula)
A primeira geração dos computadores foi marcada pela utilização de válvulas. A válvula é um tubo de vidro, muito similar a uma lâmpada, com eletrodos que possuem a finalidade de controlar o fluxo de elétrons. Em resumo, substitui-se os relés eletromecânicos da aritmética binária pelo controle de fluxo de elétrons através da válvula ligada ou desligada (com corrente/sem corrente). Assim, os equipamentos já atingiam frequências de operação maiores do que os relés mecânicos e grande agilidade em cálculos. Surgem, então, diversos computadores, na sua maioria para propósitos militares ou científicos.
Dentro dessa geração, é importante citar os equipamentos de grande importância:
Colossus (Segunda Guerra Mundial)
Foi construído pelo governo britânico, em 1943, com o objetivo decodificar as mensagens trocadas pelos alemães durante a Segunda Guerra, que eram criptografadas por uma máquina chamada Enigma. A máquina Colossus foi idealizada por Alan Turing e teve sucesso após várias tentativas na decifragem das mensagens. Hoje, Alan Turing é reconhecido como um dos grandes nomes da computação eletrônica.
ENIAC (Electronic Numerical Integrator and Computer)
Conhecido por sua grandiosidade, o ENIAC foi desenvolvido também para fins militares, ocupando cerca de 180m2 de área e sendo construído com:
· 18000 válvulas
· 1500 relés
· 30 toneladas
· 800Km de cabos de conexão
· 20 registradores de memória para números decimais de 10 dígitos
· Consumo de 140 kilowatts
Segunda Geração (Transistor)
A segunda geração de computadores iniciou com a chegada de um substituto para a válvula, o transistor. Criado pela Bell Labs para uso em aparelhos telefônicos, o transistor ofereceu grande revolução na computação, uma vez que as válvulas consumiam muita energia e precisavam de pré-aquecimento para funcionar. Possuíam também pouca confiabilidade em seus resultados e curta vida útil, sendo necessárias trocas constantes.
Além de menores, os transistores consumiam menos energia, sofriam menos aquecimento e eram mais rápidos, o que permitiu que fossem incorporados ao desenvolvimento de computadores, durante o período de 1955 a 1964.
O TX-0 (Transistorized Experimental Computer Zero) foi o primeiro computador transistorizado a ser desenvolvido.
	
	
Porém, há um fator interessante que vale a pena ser mencionado: o desenvolvimento do PDP-1, criado pela DIGITAL. Com o preço de U$120.000,00, foi o primeiro computador comercializado, tento sido vendidas aproximadamente 50 unidades na época. Ele possuía memória de 4Kbytes e deu origem ao conceito de “minicomputadores”.
Terceira Geração (Circuitos Integrados)
A terceira geração veio com a invenção do circuito integrado de silício por Robert Noyce, físico e um dos fundadores da Intel. Com o circuito integrado, dezenas de transistores poderiam estar em um único chip, o que possibilitava a construção de computadores menores e ainda mais rápidos e baratos, pois permitia também a produção em escala maior.
Quarta Geração (VLSI)
Traduzido como Very Large Scale Integration, ou Integração de Circuitos em Larga Escala, essa geração veio mais como uma evolução dos circuitos integrados, onde a tecnologia permite hoje a inclusão de milhões de transistores em um chip. Para compreender isso, é necessário entender o processo de litografia. Contudo, neste momento, podemos nos ater à informação de que os fabricantes usam tecnologia de nanômetros para distância na construção de microchips, ou seja, a distância entre um transistor e outro dentro do chip. Para termos uma ideia dessa distância, um nanômetro equivale a um bilionésimo de milímetro (1nm = 1x10-9m ou ,). Exemplos:
Era da computação pessoal
Altair 8080
Primeiro computador pessoal comercializado. Sua primeira linguagem de programação foi o Basic, desenvolvido pela Microsoft.
IBM PC (Personal Computer)
Computador pessoal desenvolvido pela IBM, também com o processador Intel 8080. Possuía frequência de 4.77Mhz, monitor monocromático e 16KB de memória. Tal arquitetura da IBM possuía um projeto de circuito público, de forma que outros fabricantes poderiam desenvolver componentes facilmente acopláveis a essa arquitetura, tornando esse PC o equipamento mais vendido da história.
Apple
Criada por Steve Jobs e Steve Wosniak. Os computadores Apple tinham o objetivo de ser equipamentos de acesso ao público em geral. O primeiro modelo, o Apple I, foi construído originalmente em uma garagem, e teve muita procura. Porém, o alcance comercial se deu com a venda do Apple II, que já tinha uma linha de produção mais robusta.
	
	
AULA 2 – Hardware, Software e Conceitos
Na aula anterior vimos um pouco da história da computação, como tudo começou e motivou o desenvolvimento tecnológico que conhecemos hoje e que continua evoluindo dia após dia. Também verificamos que o desenvolvimento se deu de diversas formas, tanto em hardware, a parte física do computador, como em software, a parte lógica do computador.
Nesta aula, vamos conhecer a estrutura física da divisão do computador, seus componentes e sua relação com as instruções a serem executadas através de programas. Também iremos estudar conceitos importantes para nosso dia a dia em computação, que possuem relação direta com o bom entendimento da organização de computadores e que precisam fazer parte do vocabulário do aluno de tecnologia e futuro profissional de TI.
Hardware e seus componentes
Hoje temos contato com uma diversidade de dispositivos de computação, alguns com capacidade de processamento igual ao até mesmo superior a alguns computadores tradicionais. Por exemplo, o que conhecemos hoje como smartphones, telefones celulares de alta capacidade de processamento, possuem configurações de hardware realmente robustas.O hardware de um computador é formado por diversos componentes e dispositivos interconectados, de forma que, através dessa comunicação, as suas funções em conjunto possam ser desempenhadas.
Cada equipamento possui a sua particularidade. Porém, como base, existem alguns componentes hoje presentes em qualquer equipamento, seja ele um computador de uso pessoal, uma calculadora, ou até mesmo o smartphone que citamos. Veja abaixo os componentes do hardware cujas funcionalidades devemos conhecer:
Unidade Central de Processamento (CPU)
Unidade de Controle
Unidade Lógica e Aritmética
Clock
Dispositivos de Saída
Dispositivos de Entrada
Memória
Unidade Central de Processamento (UCP ou CPU)
É o dispositivo central de um computador. Muitos acreditam que a CPU é o gabinete do computador, mas, na verdade, ela é o que conhecemos hoje como processador. Internamente, possui dois importantes componentes:
· Unidade de Controle: Responsável pelo gerenciamento de todo o fluxo de informações entre as unidades que fazem parte do hardware, bem como a execução das instruções.
· Unidade Lógica e Aritmética: Responsável pelos cálculos e decisões a serem efetuadas de acordo com as instruções recebidas.
Memória
Responsável pelo armazenamento das instruções e dados a serem executados ou manipulados pela CPU e seus componentes, bem como armazenamento de informações recebidas pelas Unidades de Entrada e Saída. Podemos dizer que a memória poderia ser memória RAM ou até mesmo o HD (ou disco rígido) como unidades de memória.
Dispositivos de Entrada
Todos os periféricos que são utilizados e interligados ao computador para envio de informações para o processamento. Por exemplo: mouse, teclado ou botões de função localizados no equipamento.
Dispositivos de Saída
Todos os periféricos utilizados para enviar alguma informação para o usuário. Uma impressora ou um monitor de vídeo são exemplos.
Dispositivos Internos x Dispositivos Externos
É importante citarmos que o computador é formado por diversos componentes em sua montagem de hardware. Em resumo, temos:
	Dispositivos Internos
	Dispositivos Externos
	Processador
	Teclado
	Placa-mãe
	Mouse
	Disco rígido
	Impressora
	Placa de rede
	Monitor
	Memória
	
Placa-mãe
Toda comunicação entre esses dispositivos se dá através de um barramento central, que conhecemos como placa-mãe. Ela é responsável pela interligação dos componentes internos e externos. Suas especificações estão de acordo com as características dos dispositivos que serão interligados, ou seja, depende do tipo de processador, memória e presença de espaços (slots) para conexão de placas de expansão, que conhecemos como placas off-board. Quando um determinado dispositivo ou conexão está presente na placa-mãe, por exemplo, já existe um processador de vídeo para conexão direta a um monitor de vídeo. Dizemos, então, que há uma placa de vídeo “on-board”, já integrada à placa-mãe. Caso seja necessário acoplar uma placa de vídeo em um dos slots para uso em vídeo nesse mesmo computador, esta conexão se chama “off-board”, ou seja, a conexão de vídeo será processada fora da placa-mãe. Veja nas imagens abaixo alguns exemplos de placa-mãe e dispositivos on-board e off-board.
	
	
Software
Software são todos programas responsáveis por administrar a execução de funções pelo hardware e automatizar as tarefas que o computador irá desempenhar.
Classificação de acordo com as funcionalidades
Cada software possui uma função específica, de forma que é necessário, neste momento, classificá-lo em duas categorias principais:
Software Básico
Utilizado para produzir ou gerenciar a operação do computador e a relação dentre softwares aplicativos com o hardware. Exemplos:
· Linguagens de programação;
· Sistemas Operacionais;
· Compiladores.
Software Aplicativo
Seu foco é o usuário final. Normalmente, os erros ou falhas percebidas pelo usuário são identificados nos softwares que se encaixam nesta categoria. Exemplos:
· Editores de Texto
· Planilhas
· Sistemas de Folha de Pagamento
· Sistemas Comerciais
· Sistemas de Controle de Estoque
· Antivírus
Classificação segundo a forma de aquisição ou de distribuição
Antes de entrarmos no assunto Sistema Operacional, é muito importante citarmos outra classificação de software, agora quanto à sua forma de aquisição ou de distribuição:
Software Livre
Conceito criado por Richard Stallman, em 1983, que defendia uma liberdade de uso para utilizar, copiar, distribuir, modificar e melhorar o software, na condição de que o ciclo continuasse, ou seja, todas as melhorias e modificações no software deveriam ser livres. Muitos desenvolvedores têm usado essa filosofia criando softwares disponíveis livremente para uso, de forma que sua cópia ou redistribuição não caracteriza pirataria. Instituições públicas têm utilizado essa classificação em vista da economia gerada com a compra de softwares.
Software Proprietário
Não é de livre utilização, cópia ou distribuição. Seu uso somente é possível e permitido mediante a compra de licenças de uso, que podem ser por usuário, por máquina ou por empresa. Porém, sempre mediante o investimento financeiro conforme contratado com o fabricante. O aspecto positivo de um software proprietário se dá pelo fato de o fabricante ter a obrigação contratual de oferecer suporte ao aplicativo comprado. Sua cópia ou distribuição sem a compra da licença é considerada pirataria.
Conceitos Básicos
Sistema
Conjunto de partes coordenadas que colaboram para a realização de um determinado objetivo. Essa definição se aplica aos sistemas de computação em que partes (o teclado, a memória, o processador e os dispositivos periféricos) se coordenam para realizar um objetivo comum: computar. Lembre-se que sistema é simplesmente a descrição de um programa de computador. Exemplo: O SUS (Sistema Único de Saúde) é um exemplo de um sistema com o objetivo de que partes coordenadas colaborem para cuidar da saúde do cidadão.
Algoritmo X Linguagem de Programação X Programa
Qual é a relação entre esses termos?
Por definição, algoritmo é o conjunto de etapas (instruções) finitas, ordenadamente definidas, com o propósito de obter solução para um determinado problema. Para que um algoritmo seja executado por um computador, é necessário que o processador entenda o que está sendo solicitado. A sequência precisa ser finita, exata e sem duplicidade de interpretação para que a solicitação do algoritmo seja feita com eficiência. Veja um caso simples de transcrição de um algoritmo para, por exemplo, trocar o pneu de um carro:
Início
Se <o estepe está vazio> então
	Chamar borracheiro
Senão
	Levantar o carro
	Desparafusar a roda
	Remover a roda
	Colocar o estepe
	Parafusar a roda
	Abaixar o carro
Fim se
Fim
Perceba que é uma forma de documentar uma sequência de processos não somente em TI. Trata-se de uma ferramenta de uso em diversas áreas de atuação em uma empresa. Cada passo do algoritmo corresponde a um conjunto de instruções transcritas para a solução de um problema.
Um algoritmo ou um conjunto de algoritmos podem formar um programa. Esse conjunto de instruções é transformado em uma linguagem própria (linguagem binária ou linguagem de máquina) que será executada em uma máquina.
Como um ser humano programa em linguagem binária ou linguagem de máquina?
Sabemos que em computação tudo se baseia no sistema binário (0 e 1). A solução encontrada foi o desenvolvimento de outras formas de linguagem de programação, que fossem mais próximas do entendimento do programador. Elas são conhecidas como linguagem de Alto Nível. De forma contrária, linguagem de Baixo Nível são aquelas linguagens mais complexas para o ser humano, em que é mais difícil a compreensão por parte do programador e são necessárias mais ações na programação.
	Linguagens de alto nível
	Linguagens de baixo nível
	Pascal
Java
C
C++
Cobol
Delphi
Python
	Assembly
O processo consiste em:
· O programador escrever o código, em sequências de instruções exatas e de fácil entendimento
· Em seguida, essa sequência precisa ser convertidaem linguagem binária, que é entendida e executada pelo processador do computador
Esses conversores são identificados como programas compiladores e ligadores (link editor ou linker)
O processo de linkedição, em geral, é um processo de dois passos. O ligador recebe como entrada um conjunto de arquivos objeto, bibliotecas e parâmetros na linha de controle e produz como resultado um arquivo objeto de saída. Neste passo é criada uma tabela de segmentos listando todos os segmentos definidos nos arquivos-fonte e uma tabela de símbolos com todos os símbolos importados ou exportados. O ligador atribui localizações numérica para cada símbolo, determina o tamanho e a localização dos segmentos no espaço de endereços de saída. O segundo passo usa a informação coletada no primeiro passo para controlar a realização da linkedição de fato. Neste passo se ajustam os endereços de memória no código, refletindo os endereços de segmentos realocados, e se escreve o código realocado no arquivo de saída
Sendo assim, um programa é a formalização de um algoritmo em linguagem inteligível pelo computador (linguagem de máquina). Normalmente, é composto por diversos algoritmos e feito, na sua maioria, com uma tecnologia única de linguagem de programação, que é uma linguagem formal. Por exemplo: Cobol, Pascal, Fortran, Visual Basic, Lisp, Assembly, C++, Delphi, Ada, Java etc.
Tradução
Como o próprio nome diz, consiste na tradução de um programa escrito em linguagem de Alto Nível para a linguagem binária da máquina correspondente. Os exemplos de tradutores são:
· Assembler (Montador) da linguagem Assembly e um Compilador da linguagem C++
· Visual Basic
É feito o processo de Compilação, onde o programa escrito na linguagem fonte é traduzido para linguagem máquina e depois ligado e carregado para ser executado.
Compilador
Carregador
Ligador
Execução
Código Fonte
Código Objeto
Código Executável
Editor de texto
Escrita do programa na linguagem fonte (Ex.: C)
Compilação
Criação de Código Executável e Alocação de memória
Interpretação
O programa fonte é traduzido e executado, instrução a instrução, de modo interativo. O interpretador traduz cada instrução para uma representação interna e interpreta-a simulando o funcionamento do processador. Um exemplo de tradutor pode ser a Máquina Virtual Java, que traduz os bytecodes produzidos pela compilação de um programa Java em instruções binárias da máquina onde tal programa está sendo executado.
· Vantagens: O ciclo escrita, execução, modificação e atualização é mais rápido
· Desvantagens: A execução é mais lenta
Palavra (Word)
Em Ciência da Computação, palavra (em inglês: word) é a unidade natural de informação usada por cada tipo de computador em particular. É uma sequência de bits de tamanho fixo processada em conjunto em uma máquina. Trata-se de uma característica importante de uma arquitetura de computador, pois reflete diretamente em vários aspectos da estrutura, da performance e de sua operação, indicando a unidade de transferência entre a CPU e memória principal. Os computadores modernos possuem tamanho de palavra de 16, 32 e 64 bits, o que indica a unidade básica de transferência de dados entre a CPU e a memória principal.
Por isso, é importante ficarmos atentos para, caso tenhamos um equipamento 64 bits, também instalarmos softwares e aplicativos 64 bits, pois eles foram desenvolvidos para usar essa transferência máxima entre CPU e Memória. Quando instalamos um aplicativo em sua versão 32 bits, estamos diminuindo a capacidade de processamento do nosso equipamento. Por exemplo: Um processador de 32 bits possui palavra de comprimento fixo igual a 32 bits, ou 4 bytes. Já um processador de 64 bits possui palavra de 64 bits ou 8 bytes.
Tempo de acesso (latência)
Tempo para recuperação/escrever de uma informação na memória. Depende da tecnologia da memória utilizada. Se formos comparar com uma vitrola, de disco de vinil, seria o tempo gasto desde o momento em que pegamos a agulha até quando colocamos a mesma no início da música que queremos ouvir, mas ainda não começou a tocar.
Tempo de resposta
Mede o desempenho global do sistema. Baseia-se no tempo gasto entre o início da solicitação e a apresentação da resposta. Engloba o tempo de acesso ou latência. Considerando o mesmo exemplo da vitrola, seria o tempo gasto desde o momento em que pegamos a agulha até o tempo em que a música foi totalmente entregue a nós.
Bit e byte
Bit
Sabemos que, com o passar da história, toda informação a ser reconhecida em um computador segue atualmente um modelo de comunicação. Os computadores conhecidos como digitais somente são capazes de entender informações em código binário (0s e 1s). Esses códigos binários são conhecidos como bits (Binary Digit) e podem assumir somente dois valores: 0 ou 1. Esses valores são identificados em eletrônica através de variações de tensão. Por exemplo, em um circuito de 3V, uma tensão próxima a 0V (zero volt) representa o bit 0, e uma tensão próxima a +3V (3 volts positivos) representa o bit 1
Byte
Os valores 0s e 1s postos isoladamente em um computador não significam praticamente nada de informação. Por isso, os fabricantes de computadores começaram a instituir o Byte (Binary Term) como unidade padrão de representação da informação. Essa unidade era formada por um conjunto de bits. No início, cada fabricante usava uma padronização. Existiram bytes, por exemplo, formados por 6 bits e 7 bits. Porém, a primeira codificação de 1 byte = 8 bits foi feita pela IBM, com a criação do código EBCDIC, em 1960. Com o sucesso dos computadores IBM, padronizou-se que 1 byte = 8 bits, surgindo também o código ASCII de 8 bits em 1961. A partir daí, tornou-se padrão que todo byte seria equivalente a um conjunto de 8 bits.
K (Kilo), M (Mega), G (Giga), T (Tera) e P (Peta)
Esses termos foram criados para indicar valores múltiplos de bits e bytes. São potências de 2 (afinal, estamos falando de uma base binária) e não de 10. Assim:
· Kilo (K), representa 1024 unidades (210) e não 1000.
· Mega (M), representa 1048576 unidade (220) ou 1024K. Afinal, 220 = 210 x 210)
É isso que nos permite entender o quadro abaixo, relativo às representações das unidades.
	8 bits
	1 B
	20=1
	1 KB (1 Kilobyte)
	1024 B
	210=1024
	1 MB (1 Megabyte)
	1024 KB
	220=1048576
	1 GB (1 Gigabyte)
	1024 MB
	230=1073741824
	1 TB (1 Terabyte)
	1024 GB
	240=1099511627776
	1 PB (1 Petabyte)
	1024 TB
	250=1125899906843624
	1 EB (1 Exabyte)
	1024 PB
	260=1152921504607870976
	1 ZB (1 Zetabyte)
	1024 EB
	270=1180591620718458879424
	1 YB (1 Yottabyte)
	1024 ZB
	280=1208925819615701892530176
Capacidade de armazenamento x Capacidade de transferência
Esse tema é interessante e polêmico, pois esclarece muitas dúvidas, principalmente nas representações de bits e bytes. Quando falamos em armazenamento, normalmente utilizamos representação em Bytes (B maiúsculo). Exemplos:
· 1 Kbyte ou 1 KB = 1024 Bytes
· 1 Mbyte ou 1 MB = 1024 Kbytes
Quando falamos em capacidade de transferência usamos bits (b minúsculo), normalmente indicado em bits por segundo (bps). Exemplos:
· 1 Kbit ou 1 Kb = 1024 bits
· 1 Mbits ou 1 Mb = 1024 Kbits
Perceba que usando os primeiros exemplos de cada item, temos 1 KB (Kbyte) e 1 Kb (Kbit), que são itens completamente diferentes. É por isso que, quando contratamos um link de internet banda larga para nossa casa, por exemplo, de 10 Mbps, nunca conseguimos uma taxa de download de 10 Megabytes por segundo. Afinal, o link contratado equivale a 10 Megabits por segundo.
AULA 3 – Sistemas de Numeração
Com base em tudo o que foi estudado, já sabemos que o computador eletrônico utiliza a eletricidade em seus circuitos e que, através de pulsos elétricos, a base da informação, o BIT, é gerada através dos 0s e 1s e que, através de conjunto de 8 bits, se transformam em Bytes, mais significativo da formação de um dado representativo para a máquina. Nesta aula, conheceremos os sistemas de numeração e a relação entre eles, ou seja, o sistema decimal, que conhecemos e aprendemos desde a infância, bem comoo binário. Porém, também conheceremos os sistemas Octal e Hexadecimal, utilizados na computação para algumas finalidades, como o novo padrão de endereçamento IPV6, que é representado por números Hexadecimais.
Além disso, iremos aprender a fazer a conversão entre essas bases, tendo a capacidade de efetuar conversões quando necessário no decorrer desta disciplina e de todo o curso.
Introdução
· 410 + 710 = 1110
· 68 + 38 = 118
· 916+816 = 1116 
· 1012 + 112 = 10002
Algo nas contas acima pareceu estranho?
Inicialmente, é muito provável, que a única conta que você imaginou estar correta seja a primeira. Porém, nesta aula, vamos entender por que todas as contas acima estão corretas, apesar de parecerem estranhas para nós.
Simbologia para representar quantidades
Os sistemas de numeração têm o objetivo de fornecer uma simbologia com regras para representar certas quantidades, de forma que, com essas regras e normas, a informação quantitativa possa ser identificada por quem a conheça. Atualmente, essa representação é feita através de números. Em alguns casos, também letras.
Os primeiros registros sobre o uso mais ordenado de números são de aproximadamente 4000 a.C., com as civilizações da Mesopotâmia, coincidência ou não, a mesma região onde o Ábaco foi criado. De lá para cá, a sociedade vem criando e aprimorando formas de representação numérica, até a representação que conhecemos hoje: números definidos por símbolos básicos e limitados e a combinação deles através de sua posição, conhecida como sistema posicional.
Sistema de Numeração Não Posicional
O sistema de numeração não posicional já foi muito usado na antiguidade. Apesar de muito utilizado, não era um sistema de numeração fácil para, por exemplo, fazer operações aritméticas. Isso pode ter sido uma das causas do sistema de numeração posicional. O exemplo mais conhecido e estudado nas escolas até hoje é o sistema de numeração romano, onde letras representam certas quantidades. Para ilustrar, temos:
V - X - L
Que possuem os valores 5, 10, 50, respectivamente.
A única regra diferenciada na numeração romana é que se um algarismo menor for colocado à esquerda de um maior, o mesmo deverá ser subtraído do maior. Apesar de muito utilizado, não era um sistema de numeração fácil para, por exemplo, fazer operações aritméticas. Isso ter sido uma das causas do sistema de numeração posicional.
Sistema de Numeração Posicional
Nos sistemas de numeração posicionais, o valor representado pelo algarismo no número depende da posição em que ele aparece na representação, ou seja, seu valor absoluto é modificado por um fator (ou peso), que varia conforme a posição do algarismo, sendo crescente da direita para a esquerda. Vamos entender melhor através do exemplo:
	393310Base
Posição
	3000
	900
	30
	3
	
	3 x 103
	9 x 102
	3 x 101
	3 x 100
Como podemos verificar, o exemplo trata do sistema na base decimal, onde o “peso” de cada número foi baseado em uma potência de 10, levando como referência a sua posição no número formado. Dependendo da posição onde o algarismo se localiza, seu resultado e seu peso serão diferentes. É o que podemos ver com o número 3. Ele aparece 3 vezes no número. Porém, de acordo com sua posição, seus pesos os transformam em 3000, 30 e 3, respectivamente. Sendo assim, temos dois conceitos fundamentais no sistema de numeração posicional que deverão ser aplicados em todos os sistemas que veremos posteriormente:
· A base que representa este número.
· A posição em que o algarismo está
Bases Numéricas
Como sabemos, é muito importante em um sistema de numeração posicional conhecer a base em que estamos trabalhando. Com ela, teremos o conhecimento de quais símbolos podem ser utilizados na representação numérica deles, de acordo com as posições.
· Sistema Binário: Usado na computação, sabemos que todos números são formados pelo 0 e 1, ou seja, 2 algarismos.
· Sistema Decimal: Usado em nosso cotidiano, sabemos que todos os números são formados pelos números que variam de 0 a 9, ou seja, 10 algarismos.
· Sistemas Octal e Hexadecimal: Não é diferente, teremos a representação de todos os números com 8 e 16 algarismos, respectivamente.
Para conhecer os símbolos utilizados na representação dos números de acordo com sua base, veja a tabela abaixo:
	Sistema
	Base
	Símbolos
	Binário
	2
	0 1
	Octal
	8
	0 1 2 3 4 5 6 7
	Decimal
	10
	0 1 2 3 4 5 6 7 8 9
	Hexadecimal
	16
	0 1 2 3 4 5 6 7 8 9 A B C D E F
Isso quer dizer que, para cada algarismo representado em um sistema de base, temos um equivalente, sendo representado em qualquer outra base, mas não com a mesma simbologia. Entenderemos isso em breve, mas, antes, veja o exemplo abaixo com uma pequena comparação de números representados nas quatro bases que estudaremos:
	Decimal
(Base 10)
	Binário
(Base 2)
	Octal
(Base 8)
	Hexadecimal
(Base 16)
	00
	00000
	00
	00
	01
	00001
	01
	01
	02
	00010
	02
	02
	03
	00011
	03
	03
	04
	00100
	04
	04
	05
	00101
	05
	05
	06
	00110
	06
	06
	07
	00111
	07
	07
	08
	01000
	10
	08
	09
	01001
	11
	09
	10
	01010
	12
	0A
	11
	01011
	13
	0B
	12
	01100
	14
	0C
	13
	01101
	15
	0D
	14
	01110
	16
	0E
	15
	01111
	17
	0F
	16
	10000
	20
	10
Sistemas de Numeração
O quadro anterior é bem interessante. Todavia, nos mostra somente uma pequena relação comparativa de números até o 16 decimal. Porém, não podemos ficar na dependência de consultar quadros para comparação, precisamos, na verdade, entender os métodos de conversão, a fim de que qualquer conversão necessária seja feita. Exemplo:
Um endereço IPV4, que hoje conhecemos com um IP 192.168.1.220, é somente uma representação decimal de um endereçamento, na realidade, binário que, se for necessário calcular a máscara de sub-rede ou até mesmo sumarizar uma rede, precisará ser convertido binário, para que tais cálculos sejam efetuados.
192.168.1.220 (IPV4 Decimal) = 11000000.10101000.00000001.11011100 (IPV4 em Binário)
Sendo assim, vamos conhecer as regras de conversão de um número decimal para as bases Binária, Octal e Hexadecimal.
Conversão de Decimal para outra Base
A conversão de números da base 10 para uma base qualquer é realizada através da aplicação de algoritmos para a parte inteira e para a parte fracionária. O algoritmo, para converter a parte inteira de um número decimal para outra base qualquer, consiste nos seguintes passos:
· Realizar divisões sucessivas pelo valor que identifica a base (exemplo: Binário dividir por 2). A primeira divisão usa como dividendo o próprio número e as demais utilizarão o quociente obtido na divisão anterior. Deverão ser feitas tantas divisões quanto necessárias para o quociente se tornar zero ou ser menor do que a base, não sendo mais possível efetuar divisões.
· Não sendo possível efetuar mais divisões, deve-se transcrever o último quociente juntamente com os restos das divisões, em ordem inversa ao cálculo efetuado.
Vejamos na prática a conversão de Decimal para as seguintes bases:
Decimal para Binária
Na transformação do número 63310 para a base 2, fazemos uma sequência de divisões pela base usando os quocientes com números inteiros e mantendo os restos (em vermelho), até que o último quociente não seja mais divisível (em azul). A partir daí, para se obter o binário correspondente, devemos simplesmente, de frente para trás, copiar o último quociente e os restos obtidos.
	633
	2
	
	
	
	
	
	
	
	
	1
	316
	2
	
	
	
	
	
	
	
	
	0
	158
	2
	
	
	
	
	
	
	
	
	0
	79
	2
	
	
	
	
	
	
	
	
	1
	39
	2
	
	
	
	
	
	
	
	
	1
	19
	2
	
	
	
	
	
	
	
	
	1
	9
	2
	
	
	Resultado:
63310 = 10011110012
	
	
	
	
	
	1
	4
	2
	
	
	
	
	
	
	
	
	0
	2
	2
	
	
	
	
	
	
	
	
	0
	1
Decimal para Octal
Seguindo mais um exemplo, agora para a base Octal, vemos que a regra se mantém a mesma. Consideremos a conversão do número 39410 para a base 8:Resultado:
39410 = 6128
	394
	8
	
	2
	49
	8
	
	1
	6
Decimal para Hexadecimal
Por último, e talvez um pouco mais complexo, vamos considerar a conversão do número 74610 para a base 16:Resultado:
74610 = 2EA16
	746
	16
	
	10
	46
	16
	
	14
	2
	Decimais0
	1
	2
	3
	4
	5
	6
	7
	8
	9
	10
	11
	12
	13
	14
	15
	Hexadecimais
	0
	1
	2
	3
	4
	5
	6
	7
	8
	9
	A
	B
	C
	D
	E
	F
Conversão de uma Base para Decimal
Quando queremos converter de uma base qualquer para Decimal, utilizamos a mesma regra para todas as bases. Ao contrário da regra anterior, em que fazíamos a divisão pela base, na conversão de uma base para decimal, é feita a multiplicação de cada algarismo do número pela base, elevada à potência de sua posição do algarismo. Neste momento, vamos perceber que o sistema de numeração posicional influenciará nos cálculos. Relembrando o sistema de posições, elas devem ser numeradas da direita para a esquerda, começando da posição 0. Montada a expressão, podemos iniciar a resolução dos cálculos.
· Em primeiro lugar, a multiplicação dos números pelo resultado das suas bases e potências.
· Em segundo lugar, somando-se os resultados de tudo o que foi obtido.
Feito isso, temos o número Decimal convertido. Primeiro a resolução das potências. Vamos a alguns exemplos de conversão, para que fique mais claro a regra em questão:
Octal para Decimal
Multiplicar cada algarismo individualmente pela base elevada à sua potência e somar os resultados. Exemplo: 6578 para base 10
	2
	1
	0
	Posição
	6
	5
	7
	Algarismo
	8
	8
	8
	Base
Com a expressão montada, podemos iniciar os cálculos:
	6 x 82
	+
	5 x 81
	+
	7 x 80
	384
	+
	40
	+
	7
	43110
Hexadecimal para Decimal
Multiplicar cada algarismo individualmente pela base elevada à sua potência e somar os resultados. Exemplo: 1AC216 para base 10
	3
	2
	1
	0
	Posição
	1
	A
	C
	2
	Algarismo
	16
	16
	16
	16
	Base
Com a expressão montada, podemos iniciar os cálculos:
	1 x 163
	+
	(A=10) x 162
	+
	(C=12) x 161
	+
	2 x 160
	4096
	+
	2560
	+
	192
	+
	2
	685010
	Decimais
	0
	1
	2
	3
	4
	5
	6
	7
	8
	9
	10
	11
	12
	13
	14
	15
	Hexadecimais
	0
	1
	2
	3
	4
	5
	6
	7
	8
	9
	A
	B
	C
	D
	E
	F
Binário para Decimal
Multiplicar cada algarismo individualmente pela base elevada à sua potência e somar os resultados. Exemplo: 110111102 para base 10
	7
	6
	5
	4
	3
	2
	1
	0
	Posição
	1
	1
	0
	1
	1
	1
	1
	0
	Algarismo
	2
	2
	2
	2
	2
	2
	2
	2
	Base
Com a expressão montada, podemos iniciar os cálculos:
	1 x 27
	+
	1 x 26
	+
	0 x 25
	+
	1 x 24
	+
	1 x 23
	+
	1 x 22
	+
	1 x 21
	+
	0 x 20
	128
	+
	64
	+
	0
	+
	16
	+
	8
	+
	4
	+
	2
	+
	0
	22210
Conversão de bases Octal e Hexadecimal para Binária
Para a conversão de números nas bases Octal e Hexadecimal para a base Binária, as regras são similares, respeitando-se as respectivas particularidades.
· Cada algarismo do número deve ser convertido individualmente para a Base Binária
· Ao ser convertido, cada algarismo convertido deve ser formado por um grupo de
· 3 algarismos binários (se o original for Octal);
· 4 algarismos binários (se o original for Hexadecimal).
Caso na conversão de cada algarismo, o binário não possua o total de três ou quatro binários necessários, deve-se completar com zeros à esquerda a fim de que os grupos sejam formados.
7238 para a base 2:
Passo 1: Converter algarismos individualmente:
	7
	2
	3
	
	
	
	111
	010
	011
Passo 2: Criar grupos de 3 binários (se necessário, completar com zeros à esquerda – em vermelho)
7238 = 1110100112
A2E16 para a base 2:
Passo 1: Converter algarismos individualmente:
	A
	2
	E
	
	
	
	1010
	0010
	1110
Passo 2: Criar grupos de 4 binários (se necessário, completar com zeros à esquerda – em vermelho)
A2E16 = 110001011102
Conversão de base Binária para Octal e Hexadecimal
Para a conversão de números Binários para as bases Octal e Hexadecimal, as regras também são similares às anteriores:
· Com o número binário a ser convertido, dividimos o mesmo, da direita para a esquerda, em grupos de:
· 3 algarismos binários (se o número a ser convertido for Octal);
· 4 algarismos binários (se o número a ser convertido for Hexadecimal);
· Uma vez efetuada essa divisão, cada grupo deve ser convertido para Decimal, que será o seu número representativo. No caso do Hexadecimal, se o número corresponder entre 10 e 15, o mesmo deverá ser substituído pela letra correspondente, de A até F.
11011002 para a base 8:
Passo 1: Dividir o Binário da Direita para a Esquerda em grupos de 3 (Octal):
	1
	101
	100
	
	
	
	1
	5
	4
Passo 2: Converter cada grupo para Decimal
11011002 = 1548
11011002 para a base 16:
Passo 1: Dividir o Binário da Direita para a Esquerda em grupos de 3 (Octal):
	110
	1100
	
	
	6
	C
Passo 2: Converter cada grupo para Decimal
11011002 = 6C16
AULA 4 – Aritmética e Representação de Sinais
Já se sabe que os dispositivos de computação fazem todo seu processamento em BITs, ou seja, no sistema binário. Obviamente, toda operação aritmética ou lógica (isso será visto com mais detalhes nas próximas aulas) é feita sem efetuar nenhuma conversão, e sim em binário, para, dessa forma, ser convertido e visualizado pelo ser humano na base pretendida, seja ela decimal, hexadecimal, entre outras. Nesta aula, serão apresentados os processos de cálculo das operações aritméticas nesses sistemas de base e as formas de representação de um número positivo ou negativo no sistema binário.
Toda operação aritmética ou lógica com mais é feita sem efetuar nenhuma conversão, mas, sim, em binário, para, dessa forma, ser convertido e visualizado pelo ser humano na base pretendida, seja ela decimal, hexadecimal ou outras. Nesta aula, serão apresentados os processos de cálculo das operações aritméticas nestes sistemas de base. Também é muito importante entendermos como se faz a representação de números positivos e negativos na arquitetura de computadores.
Sendo assim, é fundamental que conheçamos as técnicas de: Sinal de Magnitude e Complemento de 1 e de 2 para tais representações.
Operações Aritméticas
As operações aritméticas em outros sistemas de base devem ser feitas da mesma forma que na base decimal, com uma particularidade importante: a quantidade de algarismos disponíveis no sistema de base. Isso trará resultados diferentes nas somas, de acordo com a base em questão.
Soma no Sistema Binário
Para esse caso, devemos lembrar que o sistema possui somente 2 algarismos: 0 e 1. Sendo assim, diferente da soma decimal, onde:
110 + 110 = 210
A soma em binário nos traz que:
12 + 12 = 102
Isso nos traz uma regra já conhecida no sistema decimal: o transporte para outra coluna, “vai um”. Sendo assim, temos:
02 + 02 = 02
02 + 12 = 12
12 + 02 = 12
12 + 12 = 102 – com “vai 1”, ou seja 10
Veja o exemplo da soma dos binários 101101 + 101111:
	1
	
	1
	1
	1
	1
	
	 
	1
	0
	1
	1
	0
	1
	 
	1
	0
	1
	1
	1
	1
	1
	0
	1
	1
	1
	0
	0
Tomando como base o exemplo anterior, cada vez que ocorre a soma de 1+1, deve-se lembrar que “vai um” para o vizinho logo à esquerda, como é feito na soma de decimais.
Subtração no Sistema Binário
Para este caso, devemos também lembrar que o sistema possui somente 2 algarismos: 0 e 1. Apesar de usar o mesmo método de subtração da base decimal, a subtração em binário pode ser um pouco mais complexa, no caso de se ter a ocorrência 0 – 1, onde deve ser feito um empréstimo superior do primeiro algarismo diferente de zero, existente à esquerda. Isso traz a seguinte regra:
02 - 02 = 02
02 - 12 = 112 – 1 e empresta 1
12 - 02 = 12
12 - 12 = 02
Veja, no exemplo da subtração dos binários 10100 – 1111, o passo a passo de como se fazer a subtração.
O empréstimo pode ser feito em qualquer local da operação. Porém, recomenda-se que seja feito no meio ou no final. Caso você coloque acima, pode se confundir com o “vai um” utilizado na soma de binários.Empresta
	
	1
	0
	1
	0
	0
	 
	
	1
	1
	1
	1
	 
	-1
	-1
	-1
	-1
	
	
	0
	0
	1
	0
	1
Essa atenção é necessária para que o cálculo seja feito com exatidão. Por isso, para não confundir, é recomendável inserir a representação do empréstimo com o sinal negativo e abaixo dos cálculos, conforme diagrama acima.
Soma no Sistema Hexadecimal
Para realizar operações aritméticas no sistema hexadecimal, é importante relembrar, assim como na base binária, que existe um número diferenciado dealgarismos que representam esta base. Dessa forma, antes de abordar as regras para cálculos com números hexadecimais, é importante relembrar a equivalência dos números decimais e seus respectivos hexadecimais:
	Decimais
	0
	1
	2
	3
	4
	5
	6
	7
	8
	9
	10
	11
	12
	13
	14
	15
	Hexadecimais
	0
	1
	2
	3
	4
	5
	6
	7
	8
	9
	A
	B
	C
	D
	E
	F
No caso da soma de hexadecimais, todas as regras continuam as mesmas, com um detalhe a ser observado: o “vai 1” será utilizado sempre que a soma de dois algarismos exceder o valor de 15 (ou seja, F), que é o maior algarismo da base hexadecimal, e irá com o valor 1 para o vizinho, e não como 15 ou F. Veja o exemplo a seguir, relativo à soma 12ABCD16 + 4B1F9116:
	
	
	
	1
	1
	
	
	 
	1
	2
	A
	B
	C
	D
	 
	4
	B
	1
	F
	9
	1
	
	5
	D
	C
	B
	5
	E
Repare que, ao efetuar a soma, trocamos a letra pelo valor decimal correspondente. Caso seja superior, subtraímos o valor 16, a fim de verificar o valor que ficará nessa unidade, e o restante será transportado como “1” para o vizinho da esquerda. Logo, o procedimento de soma em hexadecimal será concluído com sucesso.
Subtração no Sistema Hexadecimal
Para realizar subtrações no sistema hexadecimal, é importante relembrar as regras do sistema da base hexadecimal, que também possui caracteres que representam alguns de seus algarismos. A regra se assemelha à soma no sistema hexadecimal. Porém, ao contrário do transporte, conhecido como “vai um”, temos o empréstimo do vizinho. Assim como já é feito no sistema decimal. Porém, ao emprestar 1 unidade do vizinho, emprestará o equivalente a 16. Vamos ao exemplo abaixo, da subtração dos hexadecimais D8A93C16 - 23E4A116:
Recebe 1, que equivale a 16.
3 + 16 – 10 = 9
Recebe 1, que equivale a 16.
10 + 16 – 14 = 12
	
	
	7
	1
	8
	1
	
	 
	D
	8
	A
	9
	3
	C
	 
	2
	3
	E
	4
	A
	1
	
	B
	4
	C
	4
	9
	B
Representação de números positivos e negativos em binário
É possível que você esteja se perguntando...Se os sistemas de computação processam tudo em binário, como podem fazer com números negativos? Pois bem, é isto que será visto agora, ou seja, o uso de sinal + (positivo) ou – (negativo) em números binários. Existem várias maneiras. Porém, falaremos dos três principais tipos.
Sinal e magnitude
Nesta representação, caso tenhamos um número com n algarismos binários (n bits), seu sinal é obtido inserindo-se um bit adicional mais à esquerda, para indicar o valor do sinal, e sua magnitude, ou seja, o seu valor, continua mantendo os bits restantes deste número.
Os valores dos bits de magnitude (ou seja, o valor binário do número) sempre permanecem os mesmos, sendo que a única alteração é o bit mais à esquerda, onde 0 indica POSITIVO e 1 indica NEGATIVO. Veja um exemplo, da representação binária em 7 bits do número decimal 39:
	Número em binário
	00100111 (7 bits)
	39
	Sinal + (Bit adicional)
	00100111 (8 bits)
	+39
	Sinal – (Bit adicional)
	10100111 (8 bits)
	-39
Bits de Magnitude
Essa solução implementada gerou alguns problemas, pois iniciou uma dupla interpretação para o zero, que poderia ser um sinal positivo, ou somente uma indicação de um número, gerando ambiguidades de significado.
Complemento de 1
Mais um método de representação de números positivos e negativos em binário. Um pouco mais complexo, porém mais confiável do que o método de sinal e magnitude.
Para executá-lo, devem ser feitos os seguintes procedimentos:
· Com o número binário a ser inserido o sinal, acrescenta-se um bit significativo 0 (zero) mais à esquerda do número, identificando o sinal POSITIVO dele. Procedimento já executado anteriormente em sinal e magnitude;
· Para identificação do número como negativo, é feita também a inclusão de um bit significativo à esquerda, porém agora invertido, ou seja, ao invés de 0 (zero), 1 (um), assim como a regra de sinal e magnitude. Porém, também são invertidos todos os Bits relativos à magnitude (ou identificação do valor) do número.
Veja um exemplo da mesma representação binária em 7 bits do número decimal 39 no Complemento de 1
	Número em binário
	00100111 (7 bits)
	39
	Sinal + (Bit adicional)
	00100111 (8 bits)
	+39
	Sinal – (Bit adicional)
	11011000 (8 bits)
	-39
Repare que todos os binários que representam o algarismo foram invertidos
Complemento de 2
Método muito utilizado em computação, por não dar ambiguidade no valor e significado do zero em seu significado. Este método é tido como o mais confiável da atualidade. Para entendê-lo, devemos rever o processo do Complemento de 1, com um procedimento adicional:
· Com o número binário a ser inserido o sinal, acrescenta-se um bit significativo 0 (zero) mais à esquerda do número, identificando o sinal POSITIVO dele. Procedimento já executado anteriormente em sinal e magnitude; 
· Para identificação do número como negativo, é feita também a inclusão de um bit significativo à esquerda. Porém, agora invertido, ou seja, ao invés de 0 (zero), 1 (um), assim como a regra de sinal e magnitude. Porém, também são invertidos todos os Bits relativos à magnitude (ou, identificação do valor) do número;
· Realizada a inversão dos Bits, é adicionado 1 ao binário resultante;
· Feito isso, é encontrado o Complemento de 2, relativo ao negativo de um número em binário.
Veja um exemplo da mesma representação binária em 7 bits do número decimal 39 no Complemento de 2Veja que todos os binários que representam o algarismo foram invertidos. Para finalizar o complemento de 2, é somado 1 ao resultado obtido
	Número em binário
	0100111 (7 bits)
	39
	Sinal + (Bit adicional)
	00100111 (8 bits)
	+39
	Sinal – (Bit adicional)
	11011000 (8 bits)
11011000 + 1
11011001
	-39
AULA 5 – Circuitos lógicos
Como estudado, todo processamento em um computador é baseado em Bits, ou seja, 0´s e 1´s que, agrupados, podem gerar diversas informações para o ser humano. Também vimos que o uso do sistema binário vem desde a geração de computadores valvulados, onde as válvulas eram usadas para controlar passagem ou não de corrente elétrica, de forma que, se válvula estivesse ligada ou desligada, indicaria o bit 0 ou o bit 1. Lembrando que este processamento utiliza o sistema de numeração binário correlacionando-se justamente os níveis lógicos. Por exemplo:
	1
	LIGADO
	VERDADEIRO
	ALTO
	SIM
	0
	DESLIGADO
	FALSO
	BAIXO
	NÃO
Posteriormente, a válvula evoluía para transistores, utilizado até hoje nos computadores. Os transistores são formados por componentes eletrônicos que permitem a capacidade de processar informações binárias a nível lógico. Esses elementos são conhecidos como portas lógicas e são o assunto principal desta aula.
Portas Lógicas
Uma porta lógica é um componente de hardware que recebe um ou mais sinais de entrada e produz um sinal de saída, de acordo com a lógica estabelecida para a construção do referido circuito definido. As portas lógicas foram definidas como representação através de:
	Símbolos
	Para que sejam montados os circuitos
	Expressões
	Muito similares às expressões matemáticas
Pode-se entender melhor as expressões lógicas através do uso de Tabelas Verdade , onde são mapeadas as possibilidades de um problema e identificadas as similaridades e as diferenças. Vamos entender melhor através de um exemplo. Veja a tabela verdade do problema da lâmpada.
A – Lâmpada / B – Interruptor / S – Saída
· Lâmpada queimada, interruptor desligado
· Lâmpada queimada, interruptor ligado
· Lâmpada funcionando, interruptor desligado
· Lâmpada funcionando, interruptor ligado
	A
	B
	S
	FALSO
	FALSO
	FALSO
	FALSO
	VERDADEIRO
	FALSO
	VERDADEIRO
	FALSO
	FALSO
	VERDADEIRO
	VERDADEIRO
	VERDADEIRO
	A
	B
	S
	0
	0
	0
	0
	1
	0
	1
	0
	0
	1
	1
	1
Através dessa tabela, podemos perceber que o resultado lógico dependerá da função lógica que uma porta representará.
Porta E ou AND
É aquela que executa a multiplicação de duas ou mais variáveis. Com a porta E ou AND, temos na tabela verdade uma saída no um (1), ou seja, verdadeiro, SE E SOMENTE SE as suas entradas ou mais entradas forem todas iguais a um, ou seja, positivas. A saída será igual a zero(0) nos demais casos. O conceito é utilizado para qualquer número de variáveis de entrada. Como simbologia e expressão lógica, tem-se:
A
B
X
X = A . B
Como tabela Verdade, tem-se:
	A
	B
	X = A . B
	0
	0
	0
	0
	1
	0
	1
	0
	0
	1
	1
	1
Porta OU ou OR
É aquela que executa a soma, em que se obtém o valor um (1) quando uma ou mais variáveis de entrada forem iguais a um (1) e assume valor zero (0), SE E SOMENTE SE todas as suas variáveis forem iguais a zero (0). Vejamos como a porta OU é representada. Como simbologia e expressão lógica, tem-se:
A
B
X
X = A + B
Como tabela Verdade, tem-se:
	A
	B
	X = A . B
	0
	0
	0
	0
	1
	1
	1
	0
	1
	1
	1
	1
Porta NÃO ou NOT
A função NÃO (também conhecida como Complemento) é aquela que inverterá o estado ou valor da variável, ou seja, se a variável estiver com valor zero (0), vai para um (1), e, se a variável estiver com valor um (1), vai para zero (0). O travessão sobre a letra ou expressão representa a variável, e esta simbologia representa onde ocorrerá uma inversão. Pode-se dizer que A é a negação ou a inversão de A. Vejamos como é representada. Como simbologia e expressão lógica, tem-se:
X
A
X = A
Porta NÃO E ou NE ou NAND
Essa função é uma composição de duas portas lógicas já estudadas, ou seja, da função E com a função NÃO, de forma que o resultado será uma nova função E invertida. Vejamos como ela será representada. Como simbologia e expressão lógica, tem-se:
A
B
X
X = A . B
Como tabela Verdade, tem-se:
	A
	B
	X = A . B
	0
	0
	1
	0
	1
	1
	1
	0
	1
	1
	1
	0
Porta NOU ou NOR
Como o próprio nome diz, essa função é uma composição de duas portas lógicas já estudadas, ou seja, da função OU com a função NÃO, de forma que o resultado será uma nova função OU invertida. Vejamos como ela será representada. Como simbologia e expressão lógica, tem-se:
A
B
X
X = A + B
Como tabela Verdade, tem-se:
	A
	B
	X = A + B
	0
	0
	1
	0
	1
	0
	1
	0
	0
	1
	1
	0
Porta OU Exclusivo ou XOR
Essa porta lógica, OU – EXCLUSIVO, apresenta como resultado lógico 1, se as variáveis de entrada forem diferentes entre si, ou seja, se houver EXCLUSIVIDADE de valor na variável. Como simbologia e expressão lógica, tem-se:
A
B
X
X = A  B
Como tabela Verdade, tem-se:
	A
	B
	X = A  B
	0
	0
	0
	0
	1
	1
	1
	0
	1
	1
	1
	0
Porta NOU Exclusivo ou XNOR
A função lógica XNOR, conhecida como COINCIDÊNCIA, ao contrário da OU-EXCLUSIVO, tem como resultado um (1), sempre que em suas variáveis de entrada houver uma igualdade. Vejamos como ela é representada. Como simbologia e expressão lógica, tem-se:
X = A . B
A
B
X
Como tabela Verdade, tem-se:
	A
	B
	X = A . B
	0
	0
	1
	0
	1
	0
	1
	0
	0
	1
	1
	1
Expressões Lógicas
Uma vez reconhecidas as portas lógicas e suas funcionalidades, é importante entender a construção de circuitos através de expressões lógicas, bem como o inverso, ou seja, a construção de expressões com base no circuito já informado. Vejamos um exemplo:
Dado o circuito abaixo, qual a expressão lógica o representa?
Vejamos um passo a passo de como descobrir.
· Procure iniciar a formação das expressões da direita para a esquerda
· Para facilitar a identificação das expressões, pode ser útil desmembrar os membros da porta lógica final.
· Sendo assim, pode-se escrever as expressões que representam os mesmos:
	X
C
A
B
D
X = (A + B) . (C + D) . D
Tabela Verdade
Como último assunto desta aula, falaremos detalhadamente sobre Tabela Verdade. A Tabela Verdade, como vimos na verificação das portas lógicas, permite que possíveis saídas de um circuito sejam identificadas. Assim, é possível saber a probabilidade, por exemplo, de uma saída positiva em um circuito.
Mas quando há um circuito mais complexo e com mais variáveis?
É necessário respeitar algumas regras para que a Tabela Verdade seja construída.
· Uma dica importante é a probabilidade de variações possíveis de acordo com a quantidade de variáveis existentes na expressão. Considerando que o Sistema é Binário (Base 2), eleva-se a base 2 à quantidade de variáveis existentes.
· Considerar a prioridade entre os operadores lógicos:
· NÃO
· E
· OU
Agora, veja o exemplo: S = A + B + A . B . C
3 variáveis, 8 variáveis na Tabela Verdade (23)
	A
	B
	C
	A
	C
	A.B.C
	S
	0
	0
	0
	1
	1
	0
	1
	0
	0
	1
	1
	0
	0
	1
	0
	1
	0
	1
	1
	0
	1
	0
	1
	1
	1
	0
	0
	1
	1
	0
	0
	0
	1
	0
	0
	1
	0
	1
	0
	0
	0
	0
	1
	1
	0
	0
	1
	1
	1
	1
	1
	1
	0
	0
	0
	1
AULA 6 – Modelo de Von Neumann
Conceito de Von Neumann
Conforme estudado na aula de história da computação, as primeiras máquinas tinham um propósito específico, ou seja, programas fixos para processar. Hoje ainda existem computadores com esta finalidade, como a calculadora de mesa, que pode fazer cálculos com as operações fundamentais, mas não pode ser utilizada para nenhuma outra finalidade, como processar um jogo ou realizar cálculos que não existam em sua função.
Alterar o programa de uma máquina de propósito específico exige muito trabalho e reestruturação da máquina, desenho e religação de componentes. Fato que ocorria com os primeiros computadores.
John Von Neumann, matemático húngaro de renome, com diversas contribuições científicas na matemática e na física e professor na Universidade de Princeton, participou do projeto e construção do ENIAC, já estudado anteriormente. Em 1945, John Von Neumann escreveu um artigo crítico sobre os princípios da computação, que se tornaram um padrão na construção de computadores até a atualidade.
O Conceito de Von Neumann se baseava na criação de um modelo de computador em que a máquina possuiria o programa (e suas instruções) armazenado em memória, de forma que os programas em execução poderiam ser alterados durante a execução (uma variável poderia ser alterada em meio à execução) e todas as instruções seriam armazenadas e executadas sequencialmente em memória, de acordo com seu endereçamento.
Além disso, Von Neumann propôs uma arquitetura básica, composta pelos elementos abaixo:Unidade Central de Processamento (CPU)
Unidade de Controle
Unidade Lógica e Aritmética
Saída
Entrada
Memória
Basicamente, todo e qualquer computador possuiria os seguintes elementos:
· CPU (ou UCP);
· Unidade de memória;
· Unidade de entrada;
· Unidade de saída.
Nesse modelo, dados e instruções são armazenadas em uma única memória, utilizada tanto para leitura quanto para escrita, e podem ser acessados através de endereços. Programas agora são tratados também como dados, que, uma vez executados, iniciam o ciclo de Busca-Decodificação-Execução para que obtenham o resultado esperado de suas instruções.
Composição do Modelo de Von Neumann
Todos os componentes estão interligados através de barramentos que permitem a transmissão dos bits entre eles, facilitando o processamento e integrando melhor todos os componentes na arquitetura de computadores. Como caraterísticas de funcionamento do Modelo de Von Neumann, temos:
· Programação sequencial;
· Valor de uma variável alterado durante a execução de um programa;
· Instruções e dados armazenados indistintamente na memória e acessíveis através de endereços.
Diagrama Funcional da CPU
Para entender melhor a estrutura funcional da CPU e demais componentes, veja o diagrama abaixo:Barramento de Dados
Barramento de Endereços
Barramento Interno
MEMÓRIA PRINCIPAL
RDM
REM
CI
RI
UC
CLOCK
ACC
REGs
UAL
DECOD. INSTRUÇÕES
	
A Unidade Central de Processamento - UCP (ou CPU, que vem do inglês Central Processing Unit) é considerada o cérebro do computador, responsável pela execução dos programas armazenados na memória através do ciclo de Busca-Decodificação-Execução. Além disso, tem como função controlar as operações do computador entre os demais componentes. Veja seus principais elementos:
Unidade de Controle (UC)
Responsável por buscar instruções na memória principal, determinar seu tipo e encaminhar.
Unidade Lógica e Aritmética (ULA)
Responsável por executar as instruções, efetuando operações matemáticas e operações lógicas, como já estudado.
Registradores
Memórias de alta velocidade,responsáveis, principalmente, pelo armazenamento de resultados necessários na execução de instruções. Na verdade, são as mais rápidas existentes em um computador. Alguns registradores têm uma finalidade específica e fazem parte do diagrama funcional da CPU, sendo eles:
· Registrador de Dados de Memória (RDM): Tem conteúdo que foi lido ou que será gravado em uma local da memória.
· Registrador de Endereços de Memória (REM): Contém o endereço da Memória Principal onde a CPU deseja efetuar uma leitura ou gravação.
· Registrador de Instruções (RI): Tem o conteúdo da instrução em execução no momento e armazena o endereço da próxima instrução a ser executada.
· Contador de Instrução (CI): Também chamado de Contador de Programa, contém o endereço da próxima instrução que será requisitada na memória. Toda vez que este conteúdo é lido, já á alterado para o endereço da próxima instrução a ser executada.
· Acumulador (ACC): Armazena os dados temporários para as operações na ULA.
Barramentos
Dentro de toda organização de computadores, também se baseando no diagrama funcional da CPU, verifica-se a existência de três barramentos distintos. Como se sabe, barramentos são elementos que efetuam a ligação entre componentes dos computadores. Da mesma forma, esses barramentos distintos têm a mesma função e especializada, ou seja, somente um determinado conteúdo pode trafegar nos mesmos.
651
651
Processador
Memória
E/S
Barramento de Endereços
Barramento de Dados
Barramento de Sinais de Controle
· Barramento de dados: Canal de comunicação bidirecional que interliga o RDM à memória e outros dispositivos. Sua função é a transferência de conteúdo entre a CPU e a memória principal e os dispositivos de entrada e saída.
· Barramento de endereços: Canal unidirecional que faz a transferência de bits que representam um endereço de memória.
· Barramento de controle: Canal bidirecional que efetua o envio de sinais de controle utilizados para diversos elementos do computador, como se fossem ações a serem feitas por estes elementos.
Decodificador de Instruções (DI)
Este elemento não faz parte de barramentos nem registradores, mas tem uma função de grande importância no processo de execução das instruções. Ele é o responsável por decodificar o conteúdo dos dados enviados pelas instruções armazenadas na memória, interpretando as operações a serem realizadas. Feita a decodificação, a unidade de controle poderá enviar para o respectivo responsável a finalização da operação requisitada na instrução, seja ela um cálculo matemático, gravação em um arquivo ou uma impressão.
Ciclo de Busca – Decodificação – Execução
Tendo conhecimento de todos personagens envolvidos no modelo funcional de uma CPU, é importante entender o funcionamento do ciclo de Busca–Decodificação–Execução, que ocorre diversas vezes em um computador, de acordo com sua capacidade de operação.
Basicamente, esse ciclo ocorre desde o momento em que a CPU busca uma instrução armazenada na memória até o momento em que ela foi executada, estando, assim, a CPU disponível para mais uma execução. Veja o funcionamento, com detalhes, do ciclo:
Busca
· Copiar o endereço contido no CI para o registrador de endereços da memória (REM) através do barramento de endereços
· Enviar um sinal de controle com comando de leitura, via barramento de controle, pela UC para a Memória Principal
· Ler o conteúdo no endereço da memória, armazenando o mesmo no RDM, através do barramento de dados de memória
· Copiar o registrador de dados da memória (RDM) para o (RI)
· Atualizar o CI com o próximo endereço a ser executado
Decodificação
· Nessa fase, é determinada qual instrução deve ser executada, enviando o conteúdo do RI para decodificação pelo DI.
Execução
· Encaminhamento da operação para finalização pela UC;
· Fim da execução da operação.
Finalizando este ciclo, um novo ciclo é iniciado, par a execução de uma nova instrução.
Clock
Como último elemento , é visto, no diagrama funcional da CPU, o CLOCK, um gerador de pulsos regulares de curta duração. Esse sinal é enviado pela CPU, como referência de tempo para todas as atividades dentro de um computador, de forma a garantir o sincronismo de todas as operações, independente do dispositivo, uma vez que alguns periféricos possuem clocks diferentes do clock interno da CPU. O clock é medido em quantidade de vezes por segundo, ou Hertz (hz).
AULA 7 – Processador e Conjunto de Instruções
Uma vez conhecido o funcionamento de um processador de acordo com o modelo de Von Neumann e do ciclo de instrução, é importante entender as instruções. Todo programa desenvolvido precisa ser traduzido para linguagem de máquina, de forma que as instruções sejam compatíveis com aquele processador, uma vez que todo o processador contém um conjunto de instruções relacionado à capacidade de executar.
Instrução de Máquinas
Como já estudado, quem executa um programa e suas instruções é o hardware, que, através dos ciclos de instrução do processador, busca as instruções em linguagem de máquina.
Afinal, um programa desenvolvido em linguagem de Alto Nível (mais amigável ao programador) não pode ser executado diretamente pelo hardware. Ele precisa ser traduzido para linguagem de máquina por um compilador antes de ser efetivamente carregado em memória, a fim de que o processador possa executá-lo. A linguagem de máquina é composta de códigos binários, representando essas instruções, endereços e dados e está totalmente vinculada ao conjunto de instruções definido para uma máquina. Em termos de funcionalidade, as operações da máquina podem ser:
	Matemáticas
	Ex: Operações aritméticas, lógicas, de complemento.
	Movimentação de Dados
	Ex: Movimentação da memória para um registrador.
	Entrada/Saída
	Ex: Leitura e gravação de dados em dispositivos externos.
	Controle
	Ex: Desvio condicional da sequência de execução (Se X>18 então ...).
Formato das Instruções
Código da operação: Define a operação que será realizada pelo processador. É o campo da instrução onde o valor binário identifica a operação a ser realizada. Este código é a entrada no Decodificador de Instruções para a unidade de controle. Cada instrução possui um código único, que será seu identificador dentro da execução de instruções em um processador.
Operando: Define o valor binário da localização do dado ou mesmo o próprio conteúdo do dado a ser processado pela instrução definida em seu código de operação. Normalmente o operando define um endereço de memória que possui o dado armazenado ou onde será armazenado o resultado de uma operação. Operações aritméticas possuem em geral 2 ou 3 operandos.
	Código da operação
	Operando 1
	Operando 2
	Operando 3
Aspectos dos Conjuntos de Instruções
Há diversos formatos de instruções, com características particulares, vantagens e desvantagens. O conjunto de instruções de uma máquina pode ser constituído por instruções de diversos formatos. Esta flexibilidade permite a escolha da instrução adequada para aplicação em cada caso. O conjunto de instruções normalmente pode ser analisado sob alguns aspectos, como, por exemplo:
Modo de endereçamento
Quantidade de operandos
(normalmente 1, 2 ou 3 operandos)
Quantidade de instruções
Veja o exemplo de uma instrução com 2 operandos:
	ADD
	SALÁRIO
	TAXA
	11010011
	110011001100
	101010101010
	8 bits
	12 Bits
	12 bits
Podemos ver que na formação da instrução temos:
· A operação ADD definida por um código binário de 8 bits
· Somado a 2 operandos, separados por vírgulas e definidos por 12 bits cada um
Totalizando 32 Bits de uma instrução
Isso já nos leva a entender que a Palavra desse processador seria de 32 Bits, que é o tamanho da informação que trafega entre a CPU e a memória principal. Dessa forma, temos um exemplo de uma instrução definida por 1 operação e 2 operandos. Veremos posteriormente exemplos práticos de instruções com 1, 2 e 3 Operandos, o que permite verificar como é o processamento interno de uma máquina, por exemplo, na execução de uma expressão matemática.
O conjunto de instruções definido emum processador é a base para que um programa seja executado nesse processador. Um exemplo interessante é o processador Intel 8080, primeiro processador comercial da Intel. Ele não possuía instruções para multiplicação ou divisão. Sendo assim, um programa em linguagem de máquina, neste processador, não conseguiria efetuar operações de multiplicação ou divisão se não fosse pela combinação de outras instruções como, por exemplo, múltiplas somas para executar uma multiplicação. Porém, quando desenvolvido em uma linguagem de alto nível, ela poderia implementar comandos de multiplicação e divisão que já aplicassem uma série de instruções repetidas de soma ou subtração no momento da compilação.
Quantidade de Operandos
Instruções de máquinas são constituídas por um conjunto de beta, que contém um subconjunto chamado código de operação, responsável por identificar a operação a ser realizada pelo hardware. Esse código é decodificado na UC na fase de instrução, gerando os pulsos de controle para acionar as portas lógicas necessárias à execução da operação. Possui ainda um ou mais grupos de bits denominados campo(s) do(s) operando(s) que tem por função identificar e localizar o dado a ser processado.
Instruções com 3 operandos
Dentro de uma instrução de 3 operandos, os campos 1 e 2 representam os endereços de cada dado que será utilizado na operação. O campo relativo ao Operando 3 contém o endereço onde será armazenado o resultado da operação em execução. Como exemplo, teríamos como operações fundamentais (ADD = SOMA, SUB = SUBTRAÇÃO, MPY = MULTIPLICAÇÃO e DIV = DIVISÃO) as representações abaixo:
	ADD
	A,B,X
	X=A+B
	SUB
	A,B,X
	X=A-B
	MPY
	A,B,X
	X=A*B
	DIV
	A,B,X
	X=A/B
Quando verificar as instruções acima, pense da seguinte forma:
	ADD
	A,B,X
	Pegue A, some a B e armazene em X
Seguindo esse pensamento, como seria escrito um conjunto de instruções de 3 operandos para executar o cálculo da expressão abaixo?
X = A*(B+C*D-E/F)
Resultado:
· MPY C,D,T1
· DIV E,F,T2
· ADD B,T1,X
· SUB X,T2,X
· MPY A,X,X
Veja que com 3 operandos foram necessárias 5 linhas de programação. Respeitando as regras matemáticas e priorizando parênteses, multiplicações e divisões, a ordem criada na programação das instruções foi a seguinte:
X = A*(B+C*D-E/F)
· MPY C,D,T1 (Ficamos com X = A*(B+T1-E/F)
· DIV E,F,T2 (Ficamos com X = A*(B+T1-T2)
· ADD B,T1,X (Ficamos com X = A*(X-T2)
· SUB X,T2,X (Ficamos com X = A*(X)
· MPY A,X,X (Ficamos com X = X)
Feito isso, o cálculo foi realizado utilizando-se de 2 endereços de memória adicionais (T1 e T2, além de X, que era o endereço final para armazenamento do cálculo da expressão.
Instruções com 2 operandos
Nas instruções com 2 operandos, novas operações aparecem, em virtude de algumas limitações. Quando há somente 2 operandos, o campo 1 sempre recebe o resultado da operação.
	ADD
	A,B
	A=A+B
	SUB
	A,B
	A=A-B
	MPY
	A,B
	A=A*B
	DIV
	A,B
	A=A/B
Seguindo esse pensamento, como seria escrito um conjunto de instruções de 2 operandos para executar o cálculo da mesma expressão que foi feita anteriormente?
X = A*(B+C*D-E/F)
Resultado:
· MPY C,D
· DIV E,F
· ADD B,C
· SUB B,E
· MPY A,B
· MOVE X,A
Com a mudança de operandos, também foi alterada a quantidade de linhas de código necessárias para efetuar o cálculo, de forma que sua ordem de execução foi a seguinte:
X = A*(B+C*D-E/F)
· MPY C,D (Ficamos com X = A*(B+C-E/F)
· DIV E,F (Ficamos com X = A*(B+C-E)
· ADD B,C (Ficamos com X = A*(B-E)
· SUB B,E (Ficamos com X = A*(B)
· MPY A,B (Ficamos com X = A)
· MOVE X,A (Ficamos com X = X)
Perceba que a Operação Move, como o próprio nome diz, MOVE o conteúdo de um endereço de memória, para outro endereço. Sendo assim, o conteúdo que estava no endereço de memória A foi movido para o endereço X.
Instruções com 1 operando
Nas instruções com 1 operando, o uso do Acumulador (registrador utilizado para armazenamento temporário na CPU) é constante, pois é utilizado como um operando não expressamente declarado, mas utilizado em todas as operações.
	ADD
	Op
	ACC=ACC+Op
	SUB
	Op
	ACC=ACC-Op
	MPY
	Op
	ACC=ACC*Op
	DIV
	Op
	ACC=ACC/Op
	LDA
	Op
	ACC=Op
	STA
	Op
	Op=ACC
Nesse tipo de execução, tem-se 2 novas operações, sendo elas LDA (LOAD) e STA (STORAGE), onde:
· LDA se refere a carregar um conteúdo armazenado na memória
· STA se refere a armazenar um conteúdo na memória
Quando visualizadas as operações, implicitamente o Operando ACC deve ser considerado, ou seja, no exemplo ADD Op., entende-se:
	ADD
	Op
	Pegue o conteúdo do Acumulador, some ao Operando, e grave novamente no Acumulador
Seguindo esse pensamento, como seria escrito um conjunto de instruções de 2 operandos para executar o cálculo da mesma expressão que foi feita anteriormente?
X = A*(B+C*D-E/F)
Resultado:
· LDA C (Carrega C no ACC)
· MPY D (Efetua ACC*D e grava em ACC)
· STA X (Armazena o conteúdo de ACC em X)
· LDA E (Carrega E no ACC)
· DIV F (Efetua ACC/F e grava em ACC)
· STA T1
· LDA B (Carrega B no ACC)
· ADD X (Efetua ACC+X e grava em ACC)
· SUB T1 (Efetua ACC-T1 e grava em ACC)
· MPY A (Efetua ACC*A e grava em ACC)
· STA X (Grava o conteúdo de ACC em X)
Veja que, durante a execução das instruções, ele preparou C*D e gravou em X, como também E/F e gravou em T1, posteriormente, executando uma operação após a outra. Mesmo assim, foram necessárias 11 linhas de operações para a execução da mesma expressão matemática.
Modos de Endereçamento de Instruções
Sabe-se que os programas a serem executados e, consequentemente, suas instruções são carregados na memória principal. Para que o conteúdo a ser lido ou armazenado seja referenciado, é necessário ter um modo de endereçamento que possa identificá-lo individualmente para que a unidade central de processamento, ou CPU, possa determinar qual posição de memória está sendo usada por uma instrução da máquina. Sendo assim, existem alguns modos de endereçamento:
· Imediato: Utiliza um valor como operando e não um endereço na memória, ou seja, não é utilizado um endereço da memória, o operando é parte da instrução. Permite definir constante e valores de variáveis iniciais
· Direto: indica o endereço de memória onde está o operando
· Indireto: Indica um ponteiro de endereço para um operando, onde o conteúdo deste ponteiro não é um dado e sim outro endereço. Há um duplo endereçamento neste caso
· Por registrador: O endereço se refere a um endereço de registrador e não da memória principal;
· Base + Deslocamento: Endereço obtido pela soma do operando com o conteúdo de um registrador-base.
Paralelismo
Como temos estudado desde o início, o resultado de toda a evolução na computação é a busca pela otimização. Todas as evoluções conhecidas até o momento são resultado dessas buscas. Um destes resultados, perceptíveis e em constante crescimento, é a frequência de operação das máquinas, ou clock interno dos processadores. 
Aumentar a velocidade do clock interno dos processadores sempre é sinônimo de aumentos significativos na performance de um equipamento. Porém, existem outros métodos, desenvolvidos no decorrer das pesquisas, que permitiram a evolução na otimização do ciclo de Busca–Decodificação–Execução, conhecida como Paralelismo. O Paralelismo, como a própria palavra diz, é a possibilidade de executar instruções em paralelo. Quando pensamos desta forma, em um primeiro momento, pensamos nos atuais processadores Dual Core, Quad Core, entre outros, que não deixam de ser um tipo de paralelismo a nível de Processador. E se dissermos que há possibilidade de paralelismo em um único processador? É isso que veremos a partir de agora.
Formas gerais de paralelismo
Existem duas formas gerais de paralelismo:
· Paralelismo no nível de instrução
· Paralelismo no nível de processador
Paralelismo no nível de instrução
Dos diversos métodos de paralelismo a nível de instrução, o mais conhecido deles é o PIPELINE. Pipeline foi uma técnica revolucionária que consistia em dividir a execução de uma instrução através do ciclo de instruções em diversas etapas, chamadas estágios, onde cada uma era manipulada

Continue navegando