Ubuntu 18.04'te montajı nasıl derleyebilir ve çalıştırabilirim?


16

Son zamanlarda montaj öğrenmek istedim, bu yüzden biraz öğrendim. Bunu nanoya koydum ve oyun alanı olarak sakladım. Asm. Şimdi merak ediyorum, nasıl derleyip çalıştırırım? Zaten her yerde aradım ve hala bulamıyorum. Gerçekten merak ediyorum ve bir dili bile kullanamazsanız öğrenmenin bir anlamı yok.


4
Her türlü sorun için gigabayt boyutunda çerçevelerde böyle bir soru okumak güzel :-)
PerlDuck

4
Olduğunu not edin iki AT & T (gaz) ve Intel (nasm): Farklı bir sözdizimine sahip başlıca montaj "tatlar". Bir montajcı seçmeden önce, öğrenmek ve kullanmak istediğiniz sözdizimine karar vermelisiniz. Bir ayrıntılı karşılaştırma tabloya bakın burada . Hala emin değilseniz, Intel / nasm ile devam edin.
undercat alkışlar Monica

2
Varsayılan olarak standart bir Ubuntu makinesine yüklenmesi gereken gcc'yi kullanabilirsiniz . Dosya adı uzantısı .sve derleme komutu olmalıdırgcc myprog.s
FedonKadifeli

Birisi Ubuntu'da bir derleme dil programının nasıl konu dışı olarak derleneceği ile ilgili bu soruyu kapatmak istiyor. 😢 Neden konu dışı olarak kapatılmalıdır? Bu, derleme kodunun nasıl yazılacağı değil, Ubuntu'daki varsayılan Ubuntu depolarından paketler ve derleme kodunun derlenmesiyle ilgilidir.
karel

Yanıtlar:


17

Şu anda desteklenen tüm Ubuntu sürümlerinde terminali açın ve şunu yazın:

sudo apt install as31 nasm  

as31 : Intel 8031/8051 derleyicisi
Bu, hızlı, basit ve kullanımı kolay bir Intel 8031/8051 derleyicisidir.

nasm : Genel amaçlı x86 toplayıcı
Netwide Assembler. NASM şu anda düz biçimli ikili dosyaları, a.out, COFF ve ELF Unix nesne dosyalarını ve Microsoft 16-bit DOS ve Win32 nesne dosyalarını çıktılayacaktır.

Bu, Hello world'u basan bir montaj dili programının kodudur.

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   

Ubuntu 18.04'te NASM kullanıyorsanız, hello.asm adlı bir .asm dosyasını derleme ve çalıştırma komutları şunlardır:

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
as31Pakete neden ihtiyaç duyulur? Sorudan ve paketin açıklamasından bir amaca hizmet edecek gibi gelmiyor.
kasperd

4
@kasperd Aslında as31gerekli değil. Sorudan esinlenerek montajcıda bir Hello World'ü araştırdım , sadece yükledim nasmve işe yaradı. :-) Bence karel sadece alternatif olarak bahsetti.
PerlDuck

1
Eğer as31 ile montaj öğrenmek istiyorsanız as31 bir alternatiftir.
karel

2
@kasperd: OP, hangi ISA için yazdığını veya hangi montaj sözdizimini kullandığını belirtmedi, bu nedenle mümkün olduğunca çok seçenek eklemek mantıklı.
Jörg W Mittag

1
Bu yanıt, yükleme komutunu nasm'a bölmekten ve diğeri 8051 montajcı + öykünücüsünden (en az biri gibi görünüyor) bölmekten fayda sağlayacaktır. Amaç montajı öğrenmek olduğundan, basit (r) mimari için x86'dan daha fazla emülatör çalıştırmak çok mantıklı olabilir.
hyde

2

Ubuntu ile birlikte olarak (taşınabilir GNU assembler)

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

-o: Çıktının nereye gönderileceğini
-esöyler: Başlangıç ​​sembolünü gösterir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.