Menu
Coddy logo textTech

Assembly Playground

Kod parçacıklarını yazın, çalıştırın ve paylaşın - kurulum gerekmez.

Coddymain.asm
Output
Click Run to see the output here.

Assembly'yi tarayıcınızda çevrimiçi çalıştırın

Bu, NASM söz dizimiyle yazılmış x86-64 kodu için ücretsiz bir çevrimiçi Assembly derleyicisidir. Programınızı yazın, Çalıştır'a basın; Coddy onu nasm -f elf64 ile derler, ld ile bağlar ve ortaya çıkan Linux çalıştırılabilir dosyasını sunucu tarafında çalıştırır, ardından size stdout, stderr ve çıkış durumunu gösterir. Kurulacak hiçbir şey yok: NASM yok, bağlayıcı yok, sanal makine yok, çapraz derleyici yok.

Başlangıç programı, standart girişten bir satır okuyan ve ham read, write ve exit sistem çağrılarını kullanarak bir selam geri yazan eksiksiz bir _start giriş noktasıdır, libc yok. Assembly gerçekten böyle çalışır: argümanları rax/rdi/rsi/rdx içine taşırsınız, syscall çağırırsınız ve gerisini çekirdek halleder. Her Çalıştırmada programınıza girdi vermek için düzenleyicinin altındaki stdin panelini kullanın, tıpkı gerçek bir ikili dosyaya veri yönlendirmek gibi.

Bu Assembly playground'unu yararlı kılan nedir

  • Gerçek x86-64 NASM araç zinciri. Kaynağınız Linux'ta nasm -f elf64 ile derlenir ve ld ile bağlanır; yerelde yazacağınız komutların aynısıdır, dolayısıyla burada çalışan şey gerçek bir makinede çalışanla eşleşir.
  • Doğrudan Linux sistem çağrıları. Başlangıç programı read, write ve exit'i araya libc girmeden syscall komutuyla kullanır, böylece kayıtçıların argümanları ve dönüş değerlerini tam olarak nasıl taşıdığını görürsünüz.
  • Standart giriş desteği. stdin paneli üzerinden programınıza bayt gönderin ve bunları sistem çağrısı 0 ile okuyun: klasik 'bir isim oku, bir selam yazdır' alıştırmaları ve ötesi için kullanışlıdır.
  • Sıfır kurulum, anında geri bildirim. NASM kurulumu yok, hatırlanacak bağlayıcı bayrağı yok, izin hatası yok: sayfayı açın, düzenleyici hazır. Derleyici ve bağlayıcı hataları doğrudan çıktıya geri gelir.

Assembly playground'unda neler deneyebilirsiniz

  • Tek bir write sistem çağrısıyla sabit bir dize yazdırın, ardından temiz bir exit(0) yapın: en küçük eksiksiz x86-64 programı ve _start ile syscall'ın nasıl bir araya geldiğini görmenin en hızlı yolu.
  • stdin'den bir .bss arabelleğine okuyun, sondaki satır sonunu kırpın ve geri yankılayın: girdiye dayalı neredeyse her assembly alıştırmasının arkasındaki desen.
  • İki sayıyı kayıtçılarda toplayın ve sonucu elle ASCII rakamlarına dönüştürün, böylece onu write edebilirsiniz. Assembly'nin print diye bir şeyinin olmadığını, yalnızca baytlar ve sistem çağrıları olduğunu böyle öğrenirsiniz.

Çevrimiçi Assembly derleyici SSS

Bu playground hangi assembler'ı ve söz dizimini kullanır?
x86-64 Linux'u hedefleyerek Intel söz dizimiyle NASM'ı (Netwide Assembler) kullanır. Kodunuz nasm -f elf64 ile derlenir ve ld ile bağlanır. AT&T/GAS söz diziminden geliyorsanız (%rax, movq tarzı), NASM'ın Intel tarzında yeniden yazın: mov rax, 1, section .text, global _start.
Bunu kullanmak için NASM veya bir bağlayıcı kurmam gerekir mi?
Hayır. Tam araç zinciri, yalıtılmış bir kapsayıcıda sunucu tarafında çalışır. Tarayıcıda NASM yazarsınız, Çalıştır'a basarsınız ve Coddy programınızı sizin için derleyip bağlar. Yerelde kurulacak hiçbir şey yok: NASM yok, ld yok, Linux VM yok.
Burada assembly'de girdiyi nasıl okurum?
read sistem çağrısını (numara 0) kullanın: rax'e 0 (sys_read), rdi'ye 0 (stdin), rsi'ye bir arabelleğin adresini ve rdx'e maksimum bayt sayısını koyun, ardından syscall çalıştırın. Düzenleyicinin altındaki stdin paneline ne yazarsanız, Çalıştırma sırasında programınıza iletilir. Başlangıç programı, sondaki satır sonunu kırpma dahil tüm deseni gösterir.
Programım neden main yerine _start'a ihtiyaç duyuyor?
Çünkü başlangıç programı ld ile ve C çalışma zamanı olmadan bağlanır. main bir libc geleneğidir: C başlangıç kodu her şeyi hazırladıktan sonra onu çağırır. Sade bir ld bağlantısında libc yoktur, bu yüzden çekirdek doğrudan _start etiketine atlar; buradaki her programın global _start tanımlamasının nedeni budur. Sonunda exit sistem çağrısıyla (numara 60) temiz bir şekilde çıkmaktan siz sorumlusunuz.
Yeni başlayan biri olarak bile bu derleyiciyle assembly öğrenebilir miyim?
Evet. Selam programından başlayın, dizeyi değiştirin ve çıktıyı izleyin. Ardından girdi okumayı, kayıtçılarda aritmetik yapmayı ve sayıları elle metne dönüştürmeyi deneyin. Kurulum olmadığı ve her Çalıştırma anında geri bildirim verdiği için hızlıca yineleyebilirsiniz; bu da kayıtçılar, bellek ve sistem çağrıları için sezgi geliştirmenin en hızlı yoludur.

Assembly için faydalı araçlar

Assembly Playground ile iyi çalışan, tarayıcı tabanlı ücretsiz araçlar - hepsi Coddy'nin bir parçası.