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.


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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.