Historia da Computação | PETNews - Um pouco de assembly
Um pouco de assembly
Por Eder Andrade
(eder.rodrigues@ccc.ufcg.edu.br)
Programar computadores tem se tornado uma tarefa cada vez mais comum entre usuários menos experientes, isso se deve ao fato de que a linguagem da máquina se aproximou da linguagem humana. Entretanto, nas primeiras gerações de linguagens de programação, programar era uma tarefa complicada, que podia, inclusive, exigir conhecimentos de hardware. Nesta edição, vamos falar um pouco sobre assembly, a primeira linguagem da segunda geração de linguagens de programação.








O assembly surgiu em meados dos anos 50, dando início à segunda geração de linguagens de programação, quando os computadores ainda eram movidos a válvula. Nessa época, havia uma grande necessidade de poder de processamento, pois países como EUA e Rússia, viviam uma corrida espacial e estavam no auge do desenvolvimento de armamentos nucleares.

Com a invenção do transistor, os computadores ficaram mais compactos e rápidos, com isso, surgiu a necessidade de se criar um novo modelo de programação. Esse modelo deveria ter leitura e escrita mais simples que cartões perfurados, mas mantendo o nível de programação próximo da linguagem de máquina. E foi assim que surgiram as linguagens de baixo nível e, consequentemente, a primeira linguagem de baixo nível, o assembly. O programa seria escrito em assembly, traduzido em linguagem de máquina por um ”montador” assembler (por isso é frequentemente chamado de linguagem de montagem), que recorre a uma tabela de tradução.



Pirâmide de linguagens baseada no nível da linguagem



Criar um código em assembly não é uma atividade fácil, um dos motivos é o fato de assembly não ser uma linguagem portável, onde existe completa dependência do hardware que varia para cada família de processadores (Ex: x86, ARM, MIPS)



- Exemplo (Sintaxe Intel):

mov eax,1 ; Interrupção Exit

mov ebx,0 ; Argumento em EBX

int 80h ; Chamada da interrupção


- Exemplo (Sintaxe AT&T):

movl $1,%eax

movl $0, %ebx

int $0x80



A linguagem assembly utiliza códigos mnemônicos (ADD, SUB, ...), mais fáceis de aprender e memorizar que os códigos numéricos cada instrução tem uma correspondência de um-para-um com as instruções em linguagem de máquina.



código assembly x código de maquina



Para programar em assembly, o programador deveria conhecer o hardware da máquina, por exemplo, um processador Intel tem 8 registradores, são memórias muito rápidas que ficam dentro do processador, são eles:


• ESP e EBP – Registradores usados para trabalhar preferencialmente com pilhas, enquanto ESP guarda a referência do topo da pilha, EBP é usado para andar sobre ela.

• EAX (Acumulador) - Utilizado em operações aritméticas, acesso de portas de entrada e saída, transferência de dados, guardar resultados, entre outros.

• EBX (Base) – Utilizado como ponteiro de acesso à memória, índice, e auxiliar às operações aritméticas do registrador EAX.

• ECX (Contador) – Servir de contador para os laços de repetição.

• EDX (Dados) -Usado em operações aritméticas juntamente com EAX (EDX recebe o resto da divisão e o produto da multiplicação), acesso de portas de entrada e saída, entre outros.

• ESI e EDI – Geralmente são usados para movimentação de dados, com ESI guardando o endereço fonte de uma variável e EDI guardando o endereço do destino.


Os registradores EAX, EBX, ECX e EDX, são chamados de registradores de uso geral, por serem usados para quase todas as tarefas: calcular, contar, armazenar, manipular dados, etc.


Existe também os registradores de segmento, registradores apontadores e registrador de flags, esse último sendo muito importante para o programador, pois através deles se pode saber se dois valores são iguais, maiores ou menores que outros, o sinal (positivo ou negativo), entre outros.



Hello World em assembly



Com a necessidade do aumento da produtividade de software, a linguagem assembly foi substituída por linguagens de alto nível. Atualmente, assembly é usada para escrever drives de computadores, sistemas embarcados, sistemas de tempo real, ou seja, sistemas que necessitam de uma performance crítica, robustez e velocidade.

Referências


http://www.ic.unicamp.br/~pannain/mc404/aulas/pdfs/Art%20Of%20Intel%20x86%20Assembly.pdf


http://www.asmcommunity.net/


http://pt.wikipedia.org/wiki/História_das_Linguagens_de_Programação



Jornal PETNews - Edição: Rafael Rêgo e Abner Araújo - Revisão: Lívia Sampaio e Gleyser Guimarães
Grupo PET Computação UFCG, 2013. All rights reserved.