Definição de linguagem de montagem

O que é uma linguagem assembly?

Uma linguagem assembly é um tipo de linguagem de programação de baixo nível que se destina a se comunicar diretamente com o hardware de um computador.Ao contrário da linguagem de máquina, que consiste em caracteres binários e hexadecimais, as linguagens assembly são projetadas para serem legíveis por humanos.

As linguagens de programação de baixo nível, como a linguagem assembly, são uma ponte necessária entre o hardware subjacente de um computador e as linguagens de programação de nível superior – como Python ou JavaScript – nas quais os programas de software modernos são escritos.

Principais conclusões

  • Uma linguagem assembly é um tipo de linguagem de programação que traduz linguagens de alto nível em linguagem de máquina.
  • É uma ponte necessária entre os programas de software e suas plataformas de hardware subjacentes.
  • A linguagem assembly depende da sintaxe da linguagem, rótulos, operadores e diretivas para converter o código em instruções de máquina utilizáveis.
  • A linguagem assembly pode passar por montadores single-pass ou multi-pass, cada um com usos e benefícios específicos.
  • Hoje, as linguagens de montagem raramente são escritas diretamente, embora ainda sejam usadas em alguns aplicativos de nicho, como quando os requisitos de desempenho são particularmente altos.

Como funcionam as linguagens assembly

Fundamentalmente, as instruções mais básicas executadas por um computador são códigos binários, consistindo de uns e zeros.Esses códigos são traduzidos diretamente nos estados “ligado” e “desligado” da eletricidade que se move pelos circuitos físicos do computador.Em essência, esses códigos simples formam a base da “linguagem de máquina”, a variedade mais fundamental de linguagem de programação.

É claro que nenhum humano seria capaz de construir programas de software modernos programando explicitamente uns e zeros.Em vez disso, os programadores humanos devem contar com várias camadas de abstração que podem permitir articular seus comandos em um formato mais intuitivo para os humanos.

Especificamente, os programadores modernos emitem comandos nas chamadas “linguagens de alto nível”, que utilizam sintaxe intuitiva, como palavras e frases inteiras em inglês, bem como operadores lógicos como “and”, “or” e “else” que são familiar ao uso diário.

Em última análise, no entanto, esses comandos de alto nível precisam ser traduzidos em linguagem de máquina.Em vez de fazê-lo manualmente, os programadores confiam em linguagens assembly cujo objetivo é traduzir automaticamente entre essas linguagens de alto e baixo nível.As primeiras linguagens assembly foram desenvolvidas na década de 1940 e, embora os programadores modernos e os processadores modernos de linguagem natural gastem muito pouco tempo lidando com linguagens assembly, elas continuam sendo essenciais para o funcionamento geral de um computador.

Durante os primeiros dias da computação, a programação de sistemas e a programação de aplicativos ocorriam inteiramente em linguagem assembly.Sem linguagens assembly, muitos computadores modernos e linguagens de alto nível que usamos hoje não seriam possíveis.

Componentes da linguagem assembly

Sintaxe

Ao escrever qualquer código em qualquer linguagem de programa, há uma ordem específica e observável de regras que devem ser seguidas para permitir que um compilador execute o código sem erros.Essas regras são definidas como a sintaxe e contêm critérios como o número máximo de caracteres permitidos, com quais caracteres as linhas de código devem começar ou o que certos símbolos "ou seja, um ponto e vírgula" significam.

Etiqueta

Uma etiqueta é um símbolo que representa o endereço onde uma instrução ou dado está armazenado.Seu propósito é atuar como destino quando referenciado em uma declaração.Os rótulos podem ser usados ​​em qualquer lugar em que um endereço possa ser usado em linguagens assembly.Um rótulo simbólico consiste em um identificador seguido por dois pontos, enquanto os rótulos numéricos consistem em um único digital seguido por dois pontos.

Operadores

Também chamados de comandos, os operadores são expressões lógicas que ocorrem após o campo de rótulo.Além disso, deve ser precedido por pelo menos um caractere de espaço em branco.Os operadores podem ser opcode ou diretiva.Opcode corresponde diretamente às instruções da máquina, e o código de operação inclui qualquer nome de registro associado à instrução.Alternativamente, os códigos de operação diretiva são instruções conhecidas pelo montador.

Diretiva

Diretivas são instruções para a montadora que informam quais ações devem ocorrer durante o processo de montagem.As diretivas têm a importância de declarar ou reservar memória para variáveis; essas variáveis ​​podem ser recuperadas posteriormente em processos para executar funções mais dinâmicas.As diretivas também são usadas para dividir os programas em diferentes seções.

Macro

Uma macro de linguagem assembly é um formato de sapato de modelo que apresenta uma série ou padrão de instruções.Essa sequência de instruções em linguagem assembly pode ser comum a vários programas diferentes.Um recurso de macro é usado para interpretar definições de macro, enquanto uma chamada de macro é inserida no código-fonte onde o código assembly "normal" teria ido em vez do conjunto de instruções de macro.

Mnemônico

Um mnemônico é uma abreviação de uma operação.Um mnemônico é inserido no código de operação para cada instrução do programa de montagem para especificar um "opcode" abreviado que representa um conjunto maior e completo de códigos.Por exemplo, o mnemônico "multiplicar por dois" tem um conjunto completo de código que executa o mnemônico.

Negociação de alta frequência

Hoje, as linguagens assembly continuam sendo objeto de estudo de estudantes de ciência da computação, a fim de ajudá-los a entender como o software moderno se relaciona com suas plataformas de hardware subjacentes.Em alguns casos, os programadores devem continuar a escrever em linguagens assembly, como quando as demandas de desempenho são especialmente altas ou quando o hardware em questão é incompatível com qualquer linguagem de alto nível atual.

Um exemplo relevante para as finanças são as plataformas de negociação de alta frequência (HFT) usadas por algumas empresas financeiras.Nesse mercado, a velocidade e a precisão das transações são de suma importância para que as estratégias de negociação HFT sejam lucrativas.Portanto, a fim de obter vantagem sobre seus concorrentes, algumas empresas de HFT escreveram seus softwares de negociação diretamente em linguagens assembly, tornando desnecessário esperar que os comandos de uma linguagem de nível superior sejam traduzidos em linguagem de máquina.

Muitos acreditam que as linguagens assembly têm as curvas de aprendizado mais íngremes e são as linguagens de computação mais difíceis de aprender.

Vantagens e desvantagens

A linguagem assembly geralmente pode ser executada mais rapidamente do que as linguagens de alto nível.É relativamente fácil inserir ou excluir componentes do código da linguagem assembly, e a linguagem assembly geralmente requer menos instruções para concluir uma tarefa quando comparada com outros tipos de linguagens.

As linguagens de montagem também são frequentemente usadas por programadores que desejam maior controle sobre seus computadores, pois as linguagens de montagem permitem que você manipule diretamente seu hardware.Por causa de sua velocidade e importância, alguns programas são escritos especificamente usando linguagem assembly, pois o código geralmente pode permanecer menor.

As linguagens assembly tendem a ter várias desvantagens.Programas longos escritos em linguagem assembly geralmente requerem maior poder computacional e não podem ser executados em computadores pequenos.Alguns podem achar a sintaxe da linguagem assembly mais difícil de lembrar e pode demorar um pouco mais para codificar usando a linguagem assembly, pois é mais complexa.Além disso, a linguagem assembly geralmente não é portátil entre diferentes marcas de diferentes computadores; semelhante a como os benefícios dos funcionários são perdidos ao mudar de empresa, os idiomas não podem ser traduzidos perfeitamente para computadores diferentes.

Prós
  • A execução pode ser mais simples em comparação com outras linguagens

  • A execução geralmente é mais rápida em comparação com outras linguagens

  • Permite o controle direto sobre o hardware

  • O código pode permanecer menor em comparação com outros idiomas

Contras
  • A programação pode ser mais difícil de aprender em comparação com linguagens de alto nível

  • A sintaxe das linguagens assembly é difícil

  • Não portátil entre máquinas

Tipos de Montadores

A linguagem assembly deve ser traduzida em linguagem de máquina usando um montador.Existem dois tipos principais de montadores.

Um montador de passagem única varre um programa uma vez e cria um programa binário equivalente.Esse tipo de montador valida o código da linguagem assembly procurando o código em uma tabela de códigos mnemônicos.Um montador de passagem única geralmente é mais rápido que um montador de várias passagens e geralmente não há necessidade de construir nenhum código intermediário.

Um montador de várias passagens significa que o montador usa mais de uma passagem.Montadores de múltiplas passagens criam uma tabela com cada símbolo e cada um de seus valores na primeira passagem, então usam a tabela em passagens futuras para gerar um novo código.Cada passagem separada geralmente lida com uma tarefa específica diferente.Embora geralmente mais lentos, os montadores multi-pass com estruturas modulares podem ser reutilizados para máquinas diferentes.

Exemplo de código de linguagem assembly

Abaixo está um exemplo de código de linguagem assembly Netwide Assembler (NASM).

Exemplo de código em linguagem assembly.

Universidade Loyola Marymount

Neste exemplo, a instrução SYSCALL no final do código aciona a parte da memória onde os serviços do sistema operacional estão armazenados.Em seguida, o código RAX é usado para chamar o código a ser escrito e, em seguida, RDI para sair.A função SYSCALL é usada duas vezes para chamar o sistema operacional, bem como para indicar ao sistema quando o código está concluído e é hora de sair.

O que é um exemplo de uma linguagem assembly?

As linguagens assembly mais usadas incluem ARM, MIPS e x86.

C++ é uma linguagem assembly?

C++ não é composto de código assembly.A linguagem de computação C++ consiste em código C++ que um compilador traduz em um código de máquina executável.

Python é uma linguagem assembly?

Python é mais avançado que linguagens assembly.As linguagens assembly são consideradas uma linguagem de baixo nível, enquanto as linguagens de alto nível, como C, Java ou Python, usam 0 e 1 em vez de números, símbolos e abreviações.

Como as linguagens de montagem são usadas hoje?

Embora consideradas linguagens de nível inferior em comparação com linguagens mais avançadas, as linguagens assembly ainda são usadas.A linguagem assembly é usada para manipular diretamente o hardware, acessar instruções especializadas do processador ou avaliar problemas críticos de desempenho.Essas linguagens também são usadas para alavancar sua vantagem de velocidade sobre linguagens de alto nível para atividades sensíveis ao tempo, como negociação de alta frequência.

A linha inferior

A linguagem assembly é um código de baixo nível que depende de um forte relacionamento entre a entrada de instruções usando a linguagem de codificação e como uma máquina interpreta as instruções de código.O código é convertido em ações executáveis ​​usando um montador que converte a entrada em instruções reconhecíveis para a máquina.Embora predominante nos primórdios da computação, muitos sistemas maiores usam linguagens de alto nível.