O que é a linguagem de montagem?

O que é a linguagem de montagem?

Glen Beck e Betty Snyder operando o ENIAC no Ballistic Research Laboratory.
Glen Beck e Betty Snyder operando o ENIAC no Ballistic Research Laboratory.

O ENIAC foi o primeiro computador eletrônico de uso geral. Foi construído na Universidade da Pensilvânia e concluído em 1945. Snyder foi uma das seis mulheres que o programaram à mão.

Antes de máquinas como o ENIAC, a palavra computer significava uma pessoa que fazia cálculos à mão, e as seis mulheres que programaram o ENIAC tinham sido contratadas para esse trabalho. Para programar a máquina, elas a recabavam: conectavam cabos e ajustavam interruptores toda vez que o problema mudava. Essa recabagem é a razão histórica pela qual a linguagem de montagem existe. Em poucos anos, engenheiros na Europa e na América começaram a substituir fios e configurações de interruptores por códigos escritos curtos que representavam instruções, para que uma pessoa pudesse ler e alterar um programa sem tocar em um conector.

Primeiro, uma CPU (unidade central de processamento) é o chip no centro do seu computador, e ela faz um único trabalho: executa uma longa lista de pequenos comandos chamados instruções, um após o outro, bilhões por segundo. Cada instrução é fácil por si só, como somar dois números, mover um valor ou saltar para outro lugar.

Assembly é a forma das instruções que uma CPU executa que uma pessoa consegue ler. Cada linha é (quase) uma instrução de máquina. Você não tem laços, objetos ou strings. Você move números entre registradores, pequenos espaços de armazenamento dentro do processador, e a memória.

Maurice Wilkes examinando uma parte do EDSAC na Universidade de Cambridge.
Maurice Wilkes examinando uma parte do EDSAC na Universidade de Cambridge.

O EDSAC executava as Initial Orders de David Wheeler, um dos primeiros programas que traduziam instruções escritas em código de máquina.

Todo processador precisa de um programa que leia instruções escritas e produza os bits brutos que o hardware executa: um montador. O montador desta página tem como alvo um único conjunto de instruções.

Este simulador usa RISC-V, um conjunto de instruções moderno usado em chips reais e ensinado nas universidades. O que você aprende aqui se aplica diretamente ao hardware.

Yunsup Lee segurando um protótipo inicial de chip RISC-V em 2013.
Yunsup Lee segurando um protótipo inicial de chip RISC-V em 2013.

RISC-V é uma arquitetura de conjunto de instruções aberta. Qualquer pessoa pode implementar sua especificação publicada em hardware, e nenhuma taxa ou permissão é necessária.

Qualquer projeto de conjunto de instruções precisa decidir quanta trabalho uma única instrução realiza. Chips CISC (Complex Instruction Set Computer), incluindo a arquitetura x86 encontrada na maioria dos computadores de mesa e laptops, colocam uma grande quantidade de trabalho em cada instrução. Uma instrução pode ler um valor da memória, realizar aritmética sobre ele e armazenar o resultado de volta, tudo em uma única etapa. O RISC-V segue o projeto defendido por Patterson & Ditzel, 1980: cada instrução realiza uma única operação simples, e qualquer comportamento complexo é produzido pela combinação de muitas dessas instruções.

RISC significa Reduced Instruction Set Computer. O hardware é construído para executar um pequeno grupo de instruções simples em alta velocidade. Comportamento complexo é produzido pela combinação desses passos simples e rápidos.

O montador de Kathleen Booth para o ARC (Booth, 1947) e as Initial Orders de David Wheeler para o EDSAC (Wilkes, Wheeler & Gill, 1951) estão entre os primeiros montadores funcionais, e os historiadores continuam a debater qual deles veio primeiro. O RISC-V, o conjunto de instruções que este simulador executa, define uma pequena lista aberta de instruções que qualquer pessoa pode implementar (Asanović & Patterson, 2014). Toda lição a partir deste ponto ensina esse conjunto de instruções diretamente.