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/

Nenhum comentário: