Mostrando postagens com marcador Tutorial de Assembly. Mostrar todas as postagens
Mostrando postagens com marcador Tutorial de Assembly. Mostrar todas as postagens

Como criar object files (código objeto) e linkar arquivos em Assembly

No tutorial passado de nossa apostila, ensinamos como criar um programa em Assembly, o famoso e simples "Hello world".

Lá, mostramos como criar o arquivo com a extensão asm.

Ao término deste tutorial, você irá aprender como transformar esse arquivo em executável, e executá-lo.



Como transformar um arquivo .asm em executável

Agora precisamos converter nosso código em Assembly, que é feito e entendido por nós humanos, para a linguagem de máquina, que é a linguagem que o computador realmente entende e roda.

Isso se faz em dois passos:

  • Criar o object file, que pega o .asm e cria, a partir dele, um arquivo com a extensão .o
  • Linkar nosso programa, fazendo com que o código-objeto se torne em um executável
Vamos ensinar como fazer isso utilizando o assembler NASM, no sistema operacional Linux.
Um importante detalhe: dependendo da arquitetura de seu sistema, 32 bits ou 64 bits, os comandos diferem um pouco, mas ensinaremos como trabalhar em ambos casos.

Como criar o object file em Assembly

Agora vamos criar o arquivo com extensão .o, que é o objeto (resultado da transformação do código para código de máquina).


Para isso, vamos finalmente usar o nasm.

Como Assembly é baixo níveo, o código vai se diferenciar levemente caso você use 32 ou 64 bits, mas nosso tutorial de Assembly vai explicar você a rodar seus programas em ambas arquiteturas.



Caso seja 32 bits, vá no diretório do hello.asm e digite o seguinte código no terminal:

nasm -f hello.asm


Caso seja 64 bits, digite:

nasm -f elf64 hello.asm


Se você notar bem, foi criado um arquivo com extensão .o, é o arquivo-objeto hello.o

























Como linkar arquivos em Assembly

O próximo passo é a linkagem, onde vamos transformar o(s) códigos objeto de nossos programas para torná-los executáveis.

Vamos usar o comando ld para isso.



32 ou 64 bits:

ld hello.o -o hello


Pronto, agora você tem seu arquivo executável "hello". Para rodá-lo, digite o comando a seguir, que deve mostrar uma mensagem na tela:

./hello


O resultado desses passos é:



Curso de Assembly online grátis





Como rodar o código Assembly - Tutorial Alternativo

Uma outra maneira de fazer todo esse processo é a seguinte:



1. Criar o código-objeto:

nasm -f hello.asm




2. Linkando



32 bits:

ld hello.o -o hello



64 bits:

ld -m elf_i386 hello.o -o hello
Ler Tutorial

Primeiro programa em Assembly - Como fazer o Hello World (Olá Mundo)

Agora que você já sabe instalar o NASM, vamos ensinar como criar seu programa em Assembly.

É um texto com o código em Assembly para você ir se familiarizando.

Tenha em mente que este é apenas o primeiro passo para programar nessa linguagem.

Nos próximos tutoriais vamos ensinar os procedimentos para executar um programa em Assembly, bem como explicar detalhadamente o significado de cada comando nessa verdadeira sopa de letrinhas.

Não se assuste, em breve você entenderá tudo perfeitamente e dominará esse bela e poderosa linguagem de programação.



Código do Hello World em Assembly

Crie um arquivo de texto com o nome "hello.asm" e escreve o seguinte código dentro dele:



section .data
msg     db      'Como programar em Assembly - Curso Assembly Progressivo', 0AH
len     equ     $-msg
 
section .text
global  _start
_start: mov     edx, len
        mov     ecx, msg
        mov     ebx, 1
        mov     eax, 4
        int     80h
 
        mov     ebx, 0
        mov     eax, 1
        int     80h




Sim, todas essas linhas de código são para exibir a mensagem "Como programar em Assembly - Curso Assembly Progressivo".


Esse, porém é um código 'humano', pois usamos mnemônicos, que são símbolos e códigos para que nós possamos entender.

Obviamente, os computadores não leem como as pessoas, eles simplesmente obedece aos comandos em binários.


E é isso que vamos ensinar no próximo tutorial, sobre como criar os object files (código objeto) e linkar arquivos em Assembly, nós vamos ensinar como transformar esse código humano em código binário.

Vamos montar (e não compilar) tal código, que é o que seu computador realmente vai entender e obedecer.


O código de máquina será o código objeto, que são arquivos com extensão .o

Em seguida, o próximo passo é reunir todos esses object files, bem como códigos que usamos de outras bibliotecas, e criar um executável. Ou seja, vamos linkar, agrupar tudo que é necessário para rodar o programa...

























Ler Tutorial

As vantagens e benefícios do Assembly

Agora que você já leu sobre as desvantagens e dificuldades da linguagem Assembly, vamos falar sobre onde  essa linguagem é usada e seus benefícios.

Assembly é eficiente

Se você mandar duas pessoas, equipes ou empresas, fazerem
os mesmos softwares, verá que é impossível o código delas serem iguais.
Programar é raciocinar, é criatividade, depende do intelecto, experiência e
raciocínio dos programadores e chefes.
É por isso que existem navegadores Web bons e ruins,
Sistemas Operacionais lentos e rápidos, jogos bem feitos e mal feitos etc.

Isso tudo é eficiência: fazer um programa que rode mais
rápido, que consuma pouco processamento ou que exija o mínimo de memória
possível. E isso o Assembly é único.
Um programa bem feito em Assembly é simplesmente
imbatível.

Sim, é trabalhoso.
Sim, é demorado.
Sim, é, algumas vezes, entediante. Mas uma vez feito, e
bem feito, você terá feito um ótimo trabalho e poderá ter a certeza que vai
tirar o máximo de sua máquina.

Não é à toa que é Assembly é uma linguagem muito usada em
situações críticas, como em alguns trechos da construção de sistemas
operacionais, como o Linux (em sua grande parte é feito em C, mas em algumas
partes é necessário usar Assembly).




















Assembly é rápido

O gerenciamento de memória na linguagem Java, por exemplo,
é feito de forma automática.
A vantagem disso é que o programador não precisa lidar
com ponteiros, endereços de memória, alocação e liberação de memória (o que é
considerado por muitos como as coisas mais difíceis em programação).
A desvantagem é que isso não é perfeito, e não passa nem
perto de ser algo 100% eficiente.

Em Assembly não existe nada automático assim, é você
programador que vai mandar e controlar tudo. E isso é essencial, ter o controle
de tudo, quando é necessário funcionamento máximo, como em microcontroladores e
sistemas eletrônicos (imagina um sistema lento em uma aeronave? Não dá, em
questões e sistemas de segurança, precisamos de processamento máximo).



Assembly exige menos memória

Por dar total acesso e uso de cada espaço de memória ao
programador, o Assembly permite que as aplicações feitas nessa linguagem possam
ocupar e usar o mínimo de memória possível.

“Com tantos computadores poderosos de gigas e gigas de
memória e processamento, por quê se preocupar com o tanto de memória utilizada?”
pode se perguntar o leitor e programador de linguagens de alto nível.

A linguagem de Assembly não é somente para computadores.
Existem microcontroladores com meros kilobytes de
memória, em que não é possível fazer nem um “Hello world” em diversas outras
linguagens de programação, e só é possível programar neles, e em outros
dispositivos digitais, com Assembly.

Do ponto de vista prático, nenhum empresário vai gastar
Megas de memória em simples circuitos, como de calculadores, freezer e outros
sistemas digitais, quando se pode gastar apenas poucos Kb usando a linguagem
Assembly.
Se assembly usa menos memória, mais barato irá sair o
projeto. Isso não é importante, é essencial para todos os engenheiros.
Ser eficiente só na teoria não adianta, tem que ser
eficiente e economicamente viável.


Assembly dá acesso direto ao hardware

Nem todo equipamento é bonitinho e perfeito para se
trabalhar como um computador.
Existem dispositivos sem teclado, sem tela, com tipos
diferentes de memória, de processador e com arquiteturas e funcionamentos
diferentes. Obviamente, a grande maioria das outras linguagens de programação
não seriam nem cogitadas para se usar nesses sistemas.

Embora hoje em dia os vídeo-games sejam tão potentes quanto os computadores, eles não são feitos da mesma maneira que os PC's e Notebooks. Eles não tem as mesmas peças, acessórios e recursos que facilitam a programação neles.
Ou seja, em alguns casos, SÓ É POSSÍVEL DE SE TRABALHAR
COM ASSEMBLY.
Em décadas passadas, não só o hardware dos vídeo games eram controlador por mas os jogos eram feitos inteiramente com o uso da linguagem Assembly.


Os programas em Assembly são menores

Embora os códigos tendam a ser bem maiores que os das
outras linguagens, depois de pronto, os aplicativos em Assembly são bem menores
em tamanho.

Isso se deve ao fato do programa em Assembly ser muito
eficiente e consumir pouca memória.
Além de não ter outras aplicações atuando por debaixo dos
panos, como acontece em outras linguagens.


Segurança no Assembly: uma faca de dois gumes

Esse tópico pode ser tanto uma vantagem como uma
desvantagem.

Sistemas feitos em linguagens de alto nível são freqüentemente
burlados por hackers, pois as aplicações que fazem uso de tais linguagens não
mostram nem oferecem tudo aos programadores. A gigantesca maioria desses
profissionais não sabe ao que está ocorrendo em baixo nível.
E mesmo que soubessem, a maioria das linguagens
simplesmente não oferece a possibilidade de se trabalhar próximo ao hardware.

Como um aplicativo em Assembly age nos mais baixos e
fundamentais níveis, um programa bem feito nessa linguagem é bem mais seguro em
outras linguagens, pois você pode programar e controlar manualmente cada
detalhe do sistema, e de sua máquina.

Porém, como dissemos anteriormente, códigos em Assembly
são grandes e complexos.
Á medida que as aplicações e sistemas forem ficando
maiores, o controle sobre tudo vai ficando cada vez menor.

Ou seja, um bom programador Assembly pode prover segurança
e controle que nenhum outro pode ter. Porém, ele também pode abrir brechas que
outras linguagens não abririam.
Fica óbvio o motivo de vários aplicativos de cunho hacker e cracker usarem Assembly.


Assembly serve para aprender como as coisas funcionam

Há pessoas que estudam não por serem obrigadas, por
estarem na faculdade ou por ser necessário para ganhar dinheiro em sua
profissão.
Há pessoas que simplesmente gostam de estudar, seja por
paixão, hobbie ou tédio.

A definição correta de hacker é daquele indivíduo que quer saber como e porque as coisas
funcionam. Costuma-se chamar escovador de
bits
aquele que é curioso, tem interesse em saber e mexer nos computadores
em níveis mais fundamentais possíveis.

Não importa se programa em C, Java, .NET ou até mesmo
para Web, saber Assembly vai te dar uma noção de como as coisas realmente
funcionam, vai abrir sua mente, melhorar seu raciocínio e compreensão sobre
computadores e dispositivos digitais, deixando você, por natureza, diferenciado
dos outros profissionais que simplesmente usam as tecnologias, sem saber o que
está ocorrendo debaixo de seu nariz.

“Não sou louco em
querer entender como funciona um carro. Louco é quem senta em cima de toneladas
de ferro que possuem a força de centenas de cavalos, sem saber o que está
acontecendo logo abaixo.”
Ler Tutorial

As desvantagens e dificuldades do Assembly

Agora que você já leu sobre ‘A melhor linguagem de programação’, e sabe da santa verdade, vamos entrar em detalhes sobre o uso do
Assembly.

Nesse artigo vamos discutir as as
desvantagens da linguagem.
Vamos mostrar os problemas de se programar nessa linguagem e que vão pesar na hora de você decidir que tecnologia deve usar para seu sistema.

Quando não se deve usar Assembly

Embora seja uma poderosa e importantíssima linguagem,
louvar e querer usar sempre o Assembly, para qualquer tarefa, é algo totalmente
inviável.
Para deixarmos o leitor da apostila Assembly Progressivo informado e realista, vamos começar falando das desvantagens dessa linguagem de
programação.

Complexidade dos programas em Assembly

Não vamos mentir nem tentar esconder nada: Assembly é a
linguagem mais difícil sim.
Não é tão óbvia e simples de se aprender, como Python ou
Visual Basic.
Isso não quer dizer que é impossível de se programar em
Assembly, só quer dizer que você terá que se dedicar mais ao estudo da
linguagem.

Configurações específicas para programar em Assembly

A grande diferença, ou sacada, da linguagem Java é que é
multi-plataforma.
Ou seja, criando um programa em Windows, ele rodará num
sistema Linux ou MacOS, não importando a arquitetura de seu computador.
Aliás, não precisa nem ser computador, várias outras
linguagens rodam dispositivos móveis, tablets, TV Digital etc.

Como explicamos no artigo sobre Como Programar em Assembly, precisamos programar especificamente para cada tipo de arquitetura,
pois há diferenças nos tipos de Assembly.
Logo, Assembly não é portável. Você não pode criar um programa
em Assembly e garantir que ele vá rodar em outros sistemas.

Essa é uma das grandes vantagens de programação voltadas
para web, como PHP, JavaScript e a linguagem de marcação HTML, elas só dependem
do navegador, não dependem do sistema operacional, muito menos de um tipo
específico de processador, como precisa as variáveis do Assembly.


























Baixa produtividade do programador Assembly

Quem é iniciante ou programa por hobbie, provavelmente
nunca se preocupou com produtividade.
Mas quem trabalha e depende disso como meio de vida, sabe
que não basta usar bem uma linguagem de programação ou saber muito de
computação: você terá chefe e prazos.

As vezes deixamos de lado uma linguagem poderosa e
eficiente (como Assembly, C ou C++) e optamos por uma mais lenta e menos poderosa,
como Java ou C# simplesmente porque precisamos ser produtivos, ou seja,
precisamos produzir mais em menos tempo.

Uma aplicação que você faz em algumas horas em Java,
Python ou Perl, levaria semanas ou meses para fazer em Assembly. Os códigos em
Assembly são longos, cheios de detalhes e pormenores, o programador fica a
cargo de tudo.

Assembly é uma linguagem crua e com poucos ‘recursos’

Não importa qual seja o programa que vá criar, para uma
empresa, loja ou um jogo, boa parte do que você precisa já está feito em Java
ou C#, na forma de API’s e Frameworks, que são recursos prontos que você pode
usar em suas aplicações.

Já em Assembly as coisas não vêm prontas, não há uma
infinidade de bibliotecas, funções e recursos feitos e prontos do jeito, e do
tanto, que as linguagens de alto nível. Logo, é necessário criar mais códigos e
programas para fazer algo nessa linguagem.

Difícil manutenção de código Assembly

Os iniciantes talvez não vão entender bem isso, mas em
empresas, não basta apenas escrever o código para o programa funcionar. Códigos
fonte sempre são alterados com o tempo.
Por isso é importante fazer um código ‘legível’, de fácil
entendimento, comentado e documentado para que outras pessoas (ou você no
futuro) possam ler e entender depois.

Como os códigos em Assembly geralmente são grandes, não
são tão óbvios e fáceis de entender (em algumas linguagens, como Python, basta
passar o olho no código para entender o que está ocorrendo).  Portanto, códigos em Assembly costumam dar
trabalho para se fazer a manutenção.
Ler Tutorial

Assembly é a melhor linguagem de programação?

É comum vermos na internet, principalmente em fóruns,
pessoas falando que linguagem X é melhor que Y, que Y paga melhor que a
linguagem Z, que linguagem isso é
mais ‘foda’ que linguagem aquela.

Ignore, totalmente, esses tipos de comentários e pessoas.
Não existe melhor linguagem, existem linguagens e
tecnologias mais indicadas para cada tipo de problema.


Qual é a melhor linguagem de programação?

Vamos traçar um paralelo, com veículos de locomoção.

Um avião é bem mais veloz que um carro, óbvio não?
Além disso, é mais eficiente e seguro. Mas isso vai exigir
um custo (financeiro, burocrático, estudo etc) bem maior.
Devemos usar, então, o avião para viajar? Depende da viagem.





Já um carro é bem mais barato e não é tão caro pra manter
quanto um avião.
Mas é bem mais lento, perigoso e menos eficiente.
Mas é fácil de dirigir um, e não precisa de muito estudo,
apenas temos que tirar a carteira de habilitação.
Ora, se é mais barato e prático, devemos usar carros para
viajar? Depende da viagem.

Já uma bicicleta é bem, mas bem, mais barata. Não precisa
gastar dinheiro para usá-la, nem é necessário ter uma idade mínima, habilitação
ou sequer idade mínima para se deslocar numa bike.
Ora, se é praticamente de graça viajar em uma bicicleta,
devemos usá-la para viajar?
Depende da viagem.

Tenho certeza que você entendeu os dependes dos exemplos
anteriores, bem como tem bom senso suficiente para saber quando usar um ou
outro.
Para viagens longas entre lugares distantes, avião sem
dúvidas é a melhor opção.
Para ir a outra cidade, ou viajar para o interior ou
literal, é mais cômodo ir de carro.
Já para ir pra escola ou andar alguns quarteirões, a
bicicleta é a melhor alternativa.

Então, qual desses veículos é o melhor?
A resposta é: não existe melhor, existe solução mais
adequada para cada tipo de situação.

Com esse exemplo, é bem fácil entender, mas geralmente as
pessoas não levam isso para o mundo da programação, e nesse âmbito a situação é
a mesma: você tem que ver seu problema e analisar qual a melhor solução para
ele
.No caso, qual melhor linguagem, tecnologia e o melhor
meio para abordar tal problema.
Portanto, dizer que linguagem A ou B é melhor, é dar um
atestado de sua ignorância e estará carimbando seu documento de leigo poser.

Porém, a linguagem Assembly é bastante respeitada e
considerada por muitos como a melhor, principalmente por engenheiros,
escovadores de bits (pessoas que amam computação, e querem saber tudo que
ocorre, nos mínimos detalhes, em suas máquinas) e por hackers.

No próximo artigo de Assembly entraremos em detalhes sobre
as vantagens dessa linguagem, bem como suas desvantagens.
Sim, como todas as linguagens, há desvantagens em usar o
Assembly. Não se iluda.

























Ler Tutorial

Como começar a programar em Assembly

Conforme foi explicado no tutorial passado, sobre os
níveis de abstração da programação na computação, existem vários tipos de
Assembly pois essa linguagem trabalha diretamente no hardware, e como você
sabe, existem diversos tipos de hardwares (processadores, para sermos mais
específicos).

Portanto, é necessário que seja feita algumas escolhas.
Vamos escolher as mais comuns, abrangentes e de fácil
acesso possível.


Arquitetura usada: IA-32 (Intel Architecture 32-bit)

Vamos ensinar a linguagem Assembly para processadores da
Intel.




Embora os de 64 bits sejam os que estão crescendo e
ocupando seu lugar no mercado, para iniciar, ainda é mais indicado os estudos
pelos processadores de 32 bits.
Aqui você encontra uma lista de processadores da Intel:

Embora a tecnologia tenha avançado bastante, os conjuntos
de instruções não mudaram a ponto de ser necessário um novo aprendizado. Embora
os primeiros microprocessadores da Intel de 32 bits, tenham quase 30 anos, seu ‘jeitão’
continua o mesmo, e amplamente usado.
O que vêm mudando é capacidade e velocidade de
processamento dos mesmos.

“E se meu processador for diferente?”


É quase impossível não ter acesso a um computador com
processador Intel hoje em dia, mas se você não tiver, deve ou estudar por um
material mais específico para sua máquina ou estudar para os processadores da Intel,
pois embora seja diferente, a linguagem Assembly difere nos detalhes, sendo possível
o aprendizado da linguagem.

Esse tipo de arquitetura também foi implementada em
processadores da AMD, por exemplo.
Esses conjuntos de instruções de diversos processadores
diferentes obedecem a um conjunto de instruções da mesma arquitetura, que são
conhecidos como x86-32, i386 ou
simplesmente x86 (subtende-se que se
trata de 32 bits, pois os processadores de 16 bits estão em desuso).

Assembler: mnemônicos e opcode (operation code)

Como já dissemos, os computadores em si só ‘entendem’ e
obedecem uma série de comandos representados por números 0 e 1.
Obviamente, poderíamos escrever 0’s e 1’s diretamente
para nossas máquinas, mas o trabalho e as chances disso dar errado são
gigantescas.

Por isso, é comum trabalharmos com números hexadecimais
em Assembly (base numérica de 16 elementos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,
C, D, E e F). Porém, embora ajude bastante, ainda é algo extremamente
enfadonho.

Para superar essas barreiras, a linguagem de Assembly
possui palavras reservados chamada mnemônicos, que servem para o humano
programar com maior facilidade, sem ter que usar números o tempo inteiro.



























Por exemplo, até mesmo linguagem C podemos trabalhar com
endereços de memória.
Mas endereços são números (e geralmente grandes), então
para evitar decorar e escrever números, damos nomes as nossas variáveis e
passamos a tratar elas por esse nome, e não pelo seu endereço.

Então, o mnemônico é um nome que usamos para substituir
diversos comandos, é como se fosse um atalho: estamos escrevendo com nomes diferentes,
mas a ação é a mesma, pois é mais fácil tratar uma pessoa pelo seu nome do que
com seu número do RG.

Mas existe uma diferença entre o Assembly e as demais
linguagens: em Assembly, tudo é binário, inclusive as operações com os dados.
Podemos somar um número a outro usando apenas números
binários que representam as etapas da soma. Obviamente isso é extremamente
trabalhoso, e vamos usar o mnemônico add ao invés de números, para tratar
operações de adição.
Por exemplo, a instrução hexadecimal dessa operação é: 83060F000A

Ou seja, com os mnemônicos vamos dar nomes as operações,
dados e instruções, ao invés de trabalhar com os opcodes, que são
instruções diretas de máquinas.

Ou seja, escrevemos na forma ‘humana’(nomes) e ela é
transformada em forma de máquina (binários), e quem faz isso é um programa
chamado Assembler.
O Assembler vai transformar cada instrução feita na
linguagem Assembly para a linguagem de máquina.

Existem diversos tipos de Assemblers no mercado, mas
vamos usar o NASM (Netwide Assembler), pois ele é gratuito, atualizado e
está disponível tanto para as plataformas Linux como para Windows.

Para mais informações sobre como baixar o NASM, acesse
seu site oficial e instale o NASM para seu sistema, para que possa prosseguir
com nosso curso de Assembly: http://www.nasm.us/
Ler Tutorial

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.


Ler Tutorial

Veja também: