DEV Community

Cover image for Dia 13 - 1.3 Por trás do programa
Matheus Gomes
Matheus Gomes

Posted on

Dia 13 - 1.3 Por trás do programa

Esse post fala sobre o capítulo 1.3 do livro "Organização e Projeto de Computadores: Interface Hardware/Software"

-

O começo desse capítulo deixa explícito que o computador só pode executar instruções de baixo nível e há várias camadas que interpretam ou traduzem as operações de alto nível para baixo nível. Esse é um grande exemplo de abstração.

computação em camadas

Essas camadas demonstram a organização de maneira hierárquica. software de sistemas seria serviços como: sistemas operacionais, compiladores, carregadores e montadores.

Software de aplicações é o que nós, devs, normalmente codamos muito: apps de web, desktop e afins.

Há muitos software de sistemas, mas os mais fundamentais são: sistemas operacionais e compiladores.

Um ponto interessante é que, no contexto desse livro, C/C++ é considerado linguagem de alto nível. Já vi algumas pessoas falando isso também, e faz sentido, mas quando comparado com Python por exemplo, eu também acho que faz sentido chamar C/C++ de baixo nível. Será que cabe perspectiva nessa "discussão"? Honestamente não ligo muito para essa terminologia 😅.

Continuando, sistema operacional é importante por conta da manipulação de operações básicas de entradas e saídas, alocamento de memória, além de ser o caminho de comunicação amigável entre o usuário e o hardware. Já o compilador é responsável por traduzir linguagens de alto nível para instruções de máquina.

Sobre instruções de máquina:

Nossas instruções são grupos de bits que o computador entende e obecede. Nada mais são que sinais elétricos resumidos em 0's e 1's.

Gostaria de fazer uma menção honrosa ao excelente jogo "Turing Complete" isso é bastante demonstrado lá.

Sobre montador (assembler):

Um assembler traduz a versão simbólica de uma instrução para binário.

add A,B
Enter fullscreen mode Exit fullscreen mode

seria traduzido para:

1000110010100000
Enter fullscreen mode Exit fullscreen mode

Essa instrução diz para o computador somar dois números A e B. E essa linguagem simbólica foi denominada como assembly.

poder da abstração

Também existem linguagens que ignoram essa etapa intermediária já traduzindo diretamente para linguagem de máquina. Um exemplo é o GoLang, que após utilizamos o go build, é gerado um executável binário.

Então, por que não codamos em binário e assembly?

Utilizar linguagens de alto nível:

  1. Permite que o programador pense em uma linguagem mais natural, e também há linguagens projetadas para fins específicos.
  2. Aumento de produtividade.
  3. Permite que os programas sejam independentes do computador no qual estão sendo desenvolvidos. Compiladores e Montadores traduzem o programa para instruções binárias de qualquer máquina.

Top comments (0)

👋 Kindness is contagious

Explore a sea of insights with this enlightening post, highly esteemed within the nurturing DEV Community. Coders of all stripes are invited to participate and contribute to our shared knowledge.

Expressing gratitude with a simple "thank you" can make a big impact. Leave your thanks in the comments!

On DEV, exchanging ideas smooths our way and strengthens our community bonds. Found this useful? A quick note of thanks to the author can mean a lot.

Okay