Come posso compilare ed eseguire assembly in Ubuntu 18.04?


16

Di recente ho voluto imparare il montaggio, quindi ho imparato un po '. L'ho inserito in nano e l'ho salvato come playground.asm. Ora mi chiedo, come posso compilare ed eseguirlo? Ho già cercato dappertutto e ancora non riesco a trovarlo. Sono davvero curioso e non ha senso imparare una lingua se non puoi nemmeno usarla.


4
Bello leggere una domanda del genere in tempi di framework di dimensioni gigabyte per tutti i tipi di problemi :-)
PerlDuck,

4
Si noti che esistono due "aromi" di assembly principali che hanno una sintassi diversa: AT&T (gas) e Intel (nasm). Prima di scegliere un assemblatore, dovresti decidere quale sintassi vuoi imparare e usare. Vedi una tabella comparativa dettagliata qui . Se non sei ancora sicuro, scegli Intel / nasm.
undercat applaude Monica il

2
Puoi usare gcc che dovrebbe essere installato su una macchina Ubuntu standard di default. L'estensione del file è .se il comando da compilare dovrebbe esseregcc myprog.s
FedonKadifeli,

Qualcuno vuole chiudere questa domanda su come compilare un programma di linguaggio assembly in Ubuntu come fuori tema. 😢 Perché dovrebbe essere chiuso come fuori tema? Riguarda i pacchetti dai repository Ubuntu predefiniti e la compilazione del codice assembly in Ubuntu, non come scrivere il codice assembly.
Karel,

Risposte:


17

In tutte le versioni attualmente supportate di Ubuntu aprire il terminale e digitare:

sudo apt install as31 nasm  

as31 : assemblatore Intel 8031/8051
Questo è unassemblatore Intel 8031/8051veloce, semplice e facile da usare.

nasm :
Assemblatorex86 per uso genericoNetwide Assembler. NASM produrrà attualmente file binari flat-form, file di oggetti Unix a.out, COFF ed ELF e file di oggetti DOS e Win32 di Microsoft a 16 bit.

Questo è il codice per un programma di linguaggio assembly che stampa 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 si utilizza NASM in Ubuntu 18.04, i comandi per compilare ed eseguire un file .asm chiamato hello.asm sono:

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

1
Perché il as31pacchetto dovrebbe essere necessario? Dalla domanda e dalla descrizione del pacchetto non sembra che servirebbe a uno scopo.
Kasperd,

4
@kasperd In realtà as31non è necessario. Ispirato alla domanda ho cercato su Google un Hello World in assemblatore, installato solo nasme ha funzionato. :-) Penso che Karel l'abbia appena menzionato come alternativa.
PerlDuck,

1
as31 è un'alternativa se vuoi anche imparare l'assemblaggio con as31.
karel,

2
@kasperd: l'OP non ha specificato per quale ISA sta scrivendo, né per quale sintassi dell'assembly sta usando, quindi ha senso includere quante più opzioni possibili.
Jörg W Mittag,

1
Questa risposta trarrebbe beneficio dalla suddivisione del comando di installazione in nasm, e un altro per 8051 assemblatore + emulatore (sembra che ce ne sia almeno uno). Poiché lo scopo è imparare l'assemblaggio, eseguire l'emulatore per un'architettura semplice (r) rispetto a x86 potrebbe avere molto senso.
hyde,

2

Ubuntu viene fornito con as (l'assemblatore GNU portatile)

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

-o: Indica dove inviare l'output
-e: indica il simbolo iniziale

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.