Bagaimana saya bisa mengkompilasi & menjalankan perakitan di Ubuntu 18.04?

16

Jadi baru-baru ini saya ingin belajar perakitan, jadi saya belajar sedikit. Saya memasukkan ini ke nano dan menyimpannya sebagai playground.asm. Sekarang saya bertanya-tanya, bagaimana cara saya mengkompilasi dan menjalankannya? Saya sudah mencari kemana-mana dan masih tidak bisa menemukannya. Saya benar-benar ingin tahu dan tidak ada gunanya belajar bahasa jika Anda bahkan tidak bisa menggunakannya.

Menghanguskan
sumber
4
Senang membaca pertanyaan seperti itu di saat kerangka kerja gigabyte untuk semua jenis masalah :-)
PerlDuck
4
Perhatikan bahwa ada dua "rasa" perakitan utama yang memiliki sintaks berbeda: AT&T (gas) dan Intel (nasm). Sebelum memilih assembler, Anda harus memutuskan sintaks mana yang ingin Anda pelajari dan gunakan. Lihat tabel perbandingan terperinci di sini . Jika masih ragu, lanjutkan dengan Intel / nasm.
Undercat memuji Monica
2
Anda dapat menggunakan gcc yang harus diinstal pada mesin Ubuntu standar secara default. Ekstensi nama file adalah .sdan perintah untuk mengkompilasi harusgcc myprog.s
FedonKadifeli
Seseorang ingin menutup pertanyaan ini tentang bagaimana cara mengkompilasi program bahasa assembly di Ubuntu sebagai off topic. 😢 Mengapa harus ditutup sebagai di luar topik? Ini tentang paket dari repositori default Ubuntu dan mengkompilasi kode assembly di Ubuntu, bukan bagaimana menulis kode assembly.
karel

Jawaban:

17

Di semua versi Ubuntu yang saat ini didukung buka terminal dan ketik:

sudo apt install as31 nasm  

as31 : Intel 8031/8051 assembler
Ini adalahassembler Intel 8031/8051yang cepat, sederhana, mudah digunakan.

nasm :
Assemblertujuan umum x86Netwide Assembler. NASM saat ini akan menghasilkan file biner bentuk datar, a.out, file objek UNF, COFF dan ELF, dan file objek Microsoft 16-bit DOS dan Win32.

Ini adalah kode untuk program bahasa assembly yang mencetak 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   

Jika Anda menggunakan NASM di Ubuntu 18.04, perintah untuk mengkompilasi dan menjalankan file .asm bernama hello.asm adalah:

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
sumber
1
Mengapa as31paket itu dibutuhkan? Dari pertanyaan dan deskripsi paket itu tidak terdengar seperti server tujuan.
kasperd
4
@kasperd Sebenarnya as31tidak diperlukan. Terinspirasi oleh pertanyaan saya googled Hello World di assembler, hanya diinstal nasmdan berhasil. :-) Saya pikir karel baru saja menyebutkannya sebagai alternatif.
PerlDuck
1
as31 adalah alternatif jika Anda juga ingin belajar perakitan dengan as31.
karel
2
@kasperd: OP tidak menentukan ISA apa yang dia tulis, atau sintaks rakitan apa yang dia gunakan, jadi masuk akal untuk memasukkan sebanyak mungkin opsi.
Jörg W Mittag
1
Jawaban ini akan mendapat manfaat dengan memisahkan perintah instalasi menjadi nasm, dan yang lain untuk 8.051 assembler + emulator (tampaknya ada setidaknya satu). Karena tujuannya adalah untuk mempelajari perakitan, sebenarnya menjalankan emulator untuk arsitektur (r) sederhana daripada x86 mungkin masuk akal.
hyde
2

Ubuntu hadir dengan sebagai (assembler GNU portabel)

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

-o: Memberitahu tempat untuk mengirim output
-e: Memberitahu ld simbol awal

thiagola92
sumber