Onde o Assembly age: Níveis de abstração na Computação

Para entender um pouco mais de Assembly, precisamos
explanar os diversos níveis de abstração que um computador possui. Dentro dessa
ordem de níveis, o Assembly se encontra mais abaixo, mais próximo do hardware,
por isso é dito ser uma linguagem de baixo nível.

Para entender melhor, vamos começar de cima, de onde você
provavelmente deve estar agora, ao ler esse tutorial de Assembly.


A camada dos softwares e aplicações de alto nível

Aqui é onde está a maioria dos usuários de computadores,
tipicamente lidando com aplicações gráficas, clicando em botões, menus,
minimizando, maximizando, fechando janelas, navegando na  web e outras infinidades de coisas.






Nesse estágio, as coisas são bem simples e voltadas para
o usuário leigo.
Não é necessário saber absolutamente nada sobre o
funcionamento interno dos sistemas. E, de fato, a grande maioria dos usuários
não sabe.

Para o usuário, é tudo a mesma coisa, não importa se ele
esteja no Windows, MacOS, Linux, Android ou TV Digital: ele quer ver menus,
botões, clicar, arrastar, fechar e o mesmo de sempre.
Uma mera tela preta, como a do MS-DOS ou Terminal do
Linux, já seria motivo de espanto e repúdio. Nesse estágio, as coisas são
voltadas para o agrado desse tipo de usuário, que mesmo sendo totalmente
leigos, são os que sustentam o ramo da computação.

E realmente, a grande maioria das pessoas não tem motivos
para entender o que se passa por debaixo dos panos dessas aplicações: são
médicos, advogados, professores exibindo slides nas aulas, caixas de
supermercado e praticamente todo tipo de profissional vai ter contato com essa
camada.

A camada das linguagens de alto nível

Quando pensamos em programar, geralmente pensamos em criar
um super jogo, um programa bem útil ou aplicação móbile. Pensamos em criar algo
para a camada de softwares de alto nível, pois é o que mais estamos acostumados
a lidar.

Para fazer programas desse tipo, de alto nível, usamos
linguagens de programação de alto nível, como Java, linguagem C, C++, C#, Python, Pascal,
Delphi, Visual Basic, JavaScript, PHP e outras linguagens famosas.

Os programados dessas linguagens são capazes de criar
entender como funcionam os softwares de alto nível em um nível não muito
profundo, pois não é necessário entender muito do funcionamento dos sistemas
operacionais.

Na linguagem de programação Java, por exemplo, você nem
precisa se importar com o sistema, pois é uma linguagem multi-plataforma, ou
seja, uma aplicação feita em Java pode rodar em Windows, Linux, Mac, celulares
etc, com poucas ou nenhuma alterações.

Essas duas camadas de abstração são, portanto,
independente da arquitetura do sistema.
Um programador Java, por exemplo, não precisa saber qual
o processador da máquina que vai programar, e nem como funciona a arquitetura
de seu sistema. São níveis de abstração que não dependem do sistema.























Camada da linguagem Assembly

Essa camada é o objetivo de nossa apostila de Assembly, e
diferente das outras linguagens, precisamos saber que tipo de arquitetura vamos
trabalhar.

Isso porque os comandos e códigos que vamos usar na
linguagem Assembly são diferentes e específicos para cada tipo de processador.
Ou seja, o nível de abstração da camada da linguagem Assembly é dependente do
sistema.
É tão dependente que até precisamos saber como é
organizada e o funcionamento da memória da máquina onde vamos programar.

Por isso não existem cursos para todos os tipos de
Assembly, a linguagem varia de acordo com cada máquina. Diferente da linguagem
Java ou C++, que não importa o tipo de computador para programar.

Por estar abaixo das aplicações gráficas, das linguagens
que criam essas aplicações e ser dependendo do sistema, a linguagem de
programação Assembly é dita de baixo nível.

A camada do código de máquina

Você já deve ter ouvido falar que tudo, absolutamente
tudo, em computação, é feito de números 1 e 0. E isso é verdade.
O computador (no sentido bem baixo da palavra, ou seja, o
metal, as peças eletrônicas) só entende e obedece a esses comandos, que nada
mais são que uma série de números binários (1’s e 0’s). Porém, quantas vezes
você já programou ou ouviu falar de alguém que programa em binário?

O objetivo da linguagem Assembly é suprir esse problema
da alta complexidade do binário.
Com o Assembly escrevemos de uma maneira mais ‘humana’,
mais fácil e compreensível, e esse código é convertido para o código de
máquina.

Esse é o limite dos programadores. Porém, há muito, mas
muito mais abaixo do Assembly, que envolvem coisas de elétrica e eletrônica
digital (latches, flip-flops, transistores, circuitos integrados etc). Quem se
interessar por esse meio, poderá adquirir conhecimentos através de cursos como
Engenharia de Computação, Engenharia Elétrica, Engenharia Eletrônica e cursos
do gênero.


Nenhum comentário:

Veja também: