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/

7 comentários:

Inverlake JR disse...

Meu processador é um intel Pentium, pelo que vi ele é 64 bits, haverá algum problema?

Inverlake JR disse...

Estou com um Intel Pentium, e pelo que vi na lista ele é 64 bits, haverá algum problema?

Senhor dos Aneis disse...

no começo você citou que o Assembly e uma linguagem de baixo nivel, nao qual diferenciava de todas as demais linguagens de alto nivel pois programamos diretamente para a maquina sem precisar de copilador ou interpretador, isso deu pra entender, no trecho onde você cita que escrevemos na forma humana(nomes) ela é transformada em forma de maquina (binário e que fazem isso e o programa Assembler, mas espere ai, entao esse programa seria um copilador ou um interpretador por assim dizer acaba sendo como as demais linguagens que precisa de um outro programa pra executar tais comandos.

Anônimo disse...

Vou comentar e elogiar a maneira como sua didática funciona, pois você deve ter mais reconhecimento daquilo que você faz, muito boa a maneira que enfatiza a linguagem assembly, gostei muito de você, vou recomendar a outras pessoas o seu blog !

Anônimo disse...

Parabéns ótimo conteúdo, e ótima didática!

Fabio gomes disse...

comecei a ler sobre o assunto porque trabalho com carros e vejo que as programaçoes estao em assembler e gostei da forma que vc explica obrigado pela ajuda parça...

Programming Repository disse...

Parabéns pela explicação, estou animado para estudar assembly, embora pareça ser algo bem complicado...

Mas onde estaria a graça da programação se tudo fosse entregue de bandeja?