O que é linguagem de montagem?

Às vezes referido como assembly ou ASM, uma linguagem assembly é uma linguagem de programação de baixo nível.

Programas escritos em linguagens assembly são compilados por um montador. Cada montador tem sua própria linguagem de montagem, projetada para uma arquitetura de computador específica.

A linguagem das máquinas é apenas uma série de números, o que não é fácil para os humanos lerem. Usando o ASM, os programadores podem escrever programas legíveis que correspondem quase exatamente à linguagem de máquina.

A desvantagem é que tudo o que o computador faz deve ser descrito explicitamente, com detalhes precisos. A vantagem é que o programador tem controle máximo sobre o que o computador está fazendo.

Por que o ASM é uma linguagem de "baixo nível"?

A montagem é chamada de linguagem de programação de baixo nível porque existe (quase) um relacionamento um-para-um entre o que o computador faz e o que o computador faz. Em geral, uma linha de um programa de montagem contém no máximo uma instrução para o computador.

Como o ASM é diferente de uma linguagem de "alto nível"?

As linguagens de alto nível fornecem abstrações de operações de baixo nível que permitem ao programador se concentrar mais em descrever o que elas querem fazer e menos em como isso deve ser feito . A programação deste modo é mais conveniente e facilita a leitura dos programas, sacrificando o controle de baixo nível.

Programas escritos em linguagens de alto nível nunca corresponderão à velocidade bruta e à eficiência de programas escritos em assembly. Exemplos de linguagens de alto nível incluem Python, Java, JavaScript, Clojure e Lisp.

O que é uma linguagem de "nível médio"?

As linguagens de nível intermediário ou inferior fornecem algumas abstrações de alto nível para facilitar a vida do programador e, ao mesmo tempo, fornecer acesso a operações de baixo nível. Eles costumam ser usados ​​para escrever sistemas operacionais, por isso às vezes são chamados de linguagens de programação de sistema .

Programas escritos em linguagens de nível intermediário podem executar tão bem ou quase tão bem quanto programas escritos em linguagem assembly. Exemplos de linguagens de programação de nível intermediário incluem C, C ++, Ada, Nim e Rust.

O ASM é portátil?

Não. Como as linguagens assembly estão vinculadas a uma arquitetura de computador específica, elas não são portáteis. Um programa escrito em uma linguagem de montagem precisaria ser completamente reescrito para ser executado em outro tipo de máquina.

A portabilidade é uma das principais vantagens das linguagens de alto nível. A linguagem de programação C é freqüentemente chamada de "assembly portátil" porque os compiladores C existem para quase todas as arquiteturas de sistema modernas. Um programa escrito em C pode exigir algumas alterações antes de compilar em outro computador, mas a linguagem principal é portátil.

De modo geral, quanto maior o nível de uma linguagem, menos alterações precisam ser feitas para que ela seja executada em outra arquitetura. Os idiomas de nível mais baixo - linguagem de máquina e linguagem assembly - não são portáteis.

Exemplo: Olá, mundo! na montagem de 32 bits, para Windows

Aqui está "Hello, World" escrito para um processador Intel de 32 bits. Ele também será executado em um processador de 64 bits. Vamos compilá-lo e executá-lo no Windows 10.

 global _main extern _printf section .text _main: chamada de mensagem de envio _printf add esp, 4 mensagem de ret: db 'Hello, World!', 10, 0 

Para começar, abra o Bloco de Notas. Copie e cole o código acima em um novo arquivo de texto e salve o arquivo como hello.asm .

Para compilar a montagem, usaremos o NASM, o Netwide Assembler. Pode ser baixado em //www.nasm.us/.

 nasm -f win32 hello.asm 

Quando você executa esse comando, o NASM cria um arquivo de objeto. Um arquivo de objeto contém código de máquina, mas não é exatamente um arquivo executável. Nosso arquivo objeto é chamado hello.obj .

Para criar o executável, usaremos a versão de 32 bits do MinGW (Minimal GNU for Windows) que fornecerá o compilador gcc. Pode ser baixado em //www.mingw.org/.

 gcc -o hello.exe ola.obj 
 Olá 
 Olá Mundo! 

Exemplo: Olá, mundo! na montagem de 64 bits, para Linux

Aqui está "Hello, World" escrito para um processador Intel de 64 bits. Vamos compilar e rodar em Linux de 64 bits.

 extern printf; a função C printf, a ser chamada de seção .data; Seção de dados, variáveis ​​inicializadas msg: db "Hello, world!", 0; C string termina com 0 fmt: db "% s", 10, 0; O formato printf, "\ n", '0' section .text; Comece a seção principal do código global; o ponto de entrada padrão do gcc main:; o rótulo do programa para o ponto de entrada push rbp; configurar o quadro de pilha, deve ser alinhado mov rdi, fmt mov rsi, msg mov rax, 0; Também pode ser: xor rax, rax call printf; Chame C printf função pop rbp; restaurar pilha mov rax, 0; normal, sem erro, valor de retorno ret; Retorna 

Copie e cole este programa em um novo arquivo chamado hello.asm .

Em seguida, compile o assembly com o NASM, que você pode instalar com o gerenciador de pacotes. Por exemplo, no Ubuntu ou Debian, você pode instalar o NASM usando o apt:

 sudo apt update && sudo apt instalar nasm 

Execute este comando para criar seu arquivo de objeto:

 nasm -f elf64 hello.asm 

O arquivo objeto é chamado hello.o .

Em seguida, use o gcc para vincular esse arquivo de objeto às bibliotecas necessárias em seu computador e compile-o em um arquivo executável chamado hello :

 gcc hello.o -o olá 

Por fim, execute o arquivo executável:

 ./Olá 
 Olá Mundo! 

Para referência, este é o mesmo programa, escrito em C:

 #include int main () {char msg [] = "Olá mundo \ n"; printf ("% s \ n", msg); return 0; } 

  • Veja as rotinas de depuração para outros exemplos de código de montagem de baixo nível e informações adicionais sobre o que cada rotina faz.
  • Para exemplos adicionais de linguagem de montagem, consulte o site da Happy Codings.

2GL, Assembler, linguagem de baixo nível, linguagem de máquina, termos de programação