Introdução à programação e aos algoritmos

João Araujo Ribeiro · Capítulo 19 de 103

Páginas do PDF

Introdução à programação e aos algoritmos

1.10 Software

Ultimamente tem ficado mais comum um tipo de memória de

massa sem partes móveis, o dispositivo de estado sólido, ou, como é mais comumente conhecido por sua sigla em inglês, o SSD (Solid State Drive). Sem partes mecânicas, o SSD consome menos energia e permite velocidades de acesso muito maiores que o disco magnético, porém seu custo ainda é muito superior aos dos discos magnéticos.

 

1.10 SOFTWARE

“Hardware é o que você chuta e software é o que você xinga.” Anônimo

 

Falamos até agora apenas de hardware e sobre detalhes físicos do computador, mas tudo isso não serve de nada se não houver algo que encadeie as ações no hardware e nos forneça resultados. Como isso é feito? A resposta é o software, uma espécie de “alma” do computador.

O software de um sistema computacional é composto das

instruções que direcionam o hardware para fornecer um resultado desejado. Em sentido mais amplo, o software também é composto de toda a documentação do sistema computacional, ou seja, manuais e especificações de seu uso.

Citando parte mais óbvia, o programa de computador é o

resultado da programação em alguma linguagem, de modo que as instruções possam resolver um problema ou fornecer um resultado.

Como já mencionado, tudo no mundo do computador é

representado por bits. Zeros e uns servem para tudo. Com o software não poderia ser diferente. Da mesma forma que representamos números e caracteres usando uma codificação binária, escolhemos certas sequências de bits para representar ações, quer dizer, certas sequências de bits são interpretadas como instruções para o processador. Lembre-se da arquitetura de von Neumann: dados e instruções ficam na memória.

Uma parte da memória armazena dados, e assim o processador sabe que naquela área não irá encontrar instruções. Portanto, interpreta corretamente os bits dessa área como informações a serem processadas. Outra parte da memória armazena instruções. Tudo que estiver ali será interpretado pelo processador como comandos a serem executados.

Cada processador tem sua própria interpretação sobre o que significam as sequências de bits. Por exemplo, um processador pode considerar que a sequência 0010 0010 significa “carregue o registrador A com o valor 2”. Quando encontra essa sequência de bits na memória, o processador irá executar o processamento para colocar no registrador A o valor 2. Simples. Chamamos isso de “código de máquina”, ou de “linguagem de máquina”, porque é exatamente a linguagem que o processador entende.

Programar com zeros e uns seria muito difícil, então foram criadas linguagens de montagem, também chamadas de assembly, que tornam a linguagem de máquina mais legível aos seres humanos. Assim, em vez de escrever 0010 0010, escrevemos “Load A,2”. O processador não consegue entender a linguagem de montagem, então existem programas especiais, chamados montadores ou assemblers, que traduzem o “Load A,2” em 0010 0010. O primeiro montador foi criado em código de máquina, depois bastou usar montadores mais simples para criar montadores cada

vez mais sofisticados. A Figura 1.17 apresenta um trecho de programa escrito em linguagem assembly, assim como sua tradução para linguagem de máquina.

Figura 1.17 Endereço, código de máquina e linguagem de

montagem (assembly).

 

Porém, até mesmo programar em linguagem de montagem ainda

é muito complicado e demorado. A relação é direta entre código em linguagem de montagem e código em linguagem de máquina, ou seja, cada instrução em linguagem de montagem, legível por seres humanos, é traduzida diretamente em linguagem de máquina, compreensível pelo computador. Para programar usando uma linguagem de montagem, você deve ficar restrito aos comandos que o processador entende e gerenciar todo o fluxo de informações em um nível muito baixo. Para resolver este problema foram criadas linguagens de alto nível.

Uma linguagem de alto nível é aquela que fica mais próxima da

linguagem humana, mas com uma sintaxe restrita. Cada comando na linguagem de alto nível pode ser traduzido em vários comandos na linguagem de máquina, permitindo uma maior complexidade nas ações. Em vez de se limitar aos comandos determinados pelo processador, o programador em linguagem de alto nível pode usar estruturas mais complexas e um programa especial vai traduzir esses comandos em linguagem de máquina.