Como posso compilar e executar o assembly no Ubuntu 18.04?

16

Recentemente, eu queria aprender montagem, então aprendi um pouco. Coloquei isso no nano e salvei-o como playground.asm. Agora, estou me perguntando, como faço para compilar e executá-lo? Eu já procurei em todos os lugares e ainda não consigo encontrá-lo. Estou realmente curioso e não faz sentido aprender um idioma se você não pode usá-lo.

Chamuscar
fonte
4
Prazer em ler essa pergunta em tempos de estruturas de tamanho gigabyte para todo o tipo de problemas :-)
PerlDuck
4
Observe que existem dois "sabores" principais de montagem que têm uma sintaxe diferente: AT&T (gás) e Intel (nasm). Antes de escolher um montador, você deve decidir qual sintaxe deseja aprender e usar. Veja uma tabela de comparação detalhada aqui . Se ainda não tiver certeza, vá com Intel / nasm.
undercat aplaude Monica
2
Você pode usar o gcc, que deve ser instalado em uma máquina Ubuntu padrão por padrão. A extensão do nome do arquivo é .se o comando de compilação deve sergcc myprog.s
FedonKadifeli
Alguém quer encerrar esta pergunta sobre como compilar um programa em linguagem assembly no Ubuntu como fora de tópico. 😢 Por que deveria ser fechado como fora de tópico? É sobre pacotes dos repositórios padrão do Ubuntu e compilação de código de montagem no Ubuntu, não como escrever código de montagem.
Karel

Respostas:

17

Em todas as versões atualmente suportadas do Ubuntu, abra o terminal e digite:

sudo apt install as31 nasm  

as31 : Montador Intel 8031/8051
Este é ummontador Intel 8031/8051rápido, simples e fácil de usar.

nasm : Montador x86 de uso geral
Netwide Assembler. Atualmente, o NASM produz arquivos binários de formato simples, arquivos de objeto a.out, COFF e ELF Unix e arquivos de objeto Microsoft e DOS e Win32 de 16 bits.

Este é o código para um programa em linguagem assembly que imprime Hello world.

section     .text
global      _start 
_start: 
    mov     edx,len   
    mov     ecx,msg   
    mov     ebx,1   
    mov     eax,4   
    int     0x80   
    mov     eax,1  
    int     0x80   
section     .data
msg     db  'Hello world',0xa  
len     equ $ - msg   

Se você estiver usando o NASM no Ubuntu 18.04, os comandos para compilar e executar um arquivo .asm chamado hello.asm são:

nasm -f elf64 hello.asm # assemble the program  
ld -s -o hello hello.o # link the object file nasm produced into an executable file  
./hello # hello is an executable file
karel
fonte
1
Por que o as31pacote seria necessário? A partir da pergunta e da descrição do pacote, não parece que ele servisse a um propósito.
kasperd
4
@kasperd Na verdade, as31não é necessário. Inspirado pela pergunta, pesquisei um Hello World no assembler, instalei apenas nasme funcionou. :-) Eu acho que o Karel apenas mencionou isso como uma alternativa.
PerlDuck
1
o as31 é uma alternativa se você também quiser aprender montagem com o as31.
22418
2
@kasperd: o OP não especificou para qual ISA ele está escrevendo, nem para qual sintaxe de montagem ele está usando, portanto, faz sentido incluir o maior número possível de opções.
Jörg W Mittag
1
Essa resposta se beneficiaria da divisão do comando de instalação no nasm e outra no emulador 8051 assembler + emulador (parece haver pelo menos um). Como o objetivo é aprender a montagem, executar o emulador para arquitetura (r) simples que o x86 pode fazer muito sentido.
Hyde
2

O Ubuntu é fornecido como (o montador GNU portátil)

as file.s -o file.out
ld file.out -e main -o file
./file

-o: Diz para onde enviar a saída
-e: Diz ao símbolo de início

thiagola92
fonte