Assembly Dili
- İngilizcesi
- Assembly Language
- Okunuşu
- ısembli lengvic
Kısaca
Assembly dili, komutları bir işlemcinin makine koduna neredeyse bire bir karşılık gelen ve mov, add gibi kısa anımsatıcılarla yazılan düşük seviyeli bir dildir.
Assembly dili nedir?
Assembly dili, bir bilgisayarı programlamanın insan tarafından okunabilir en düşük seviyeli yoludur. Her satır genellikle tek bir makine komutuna karşılık gelir; mov (bir değeri kopyala), add veya jmp (başka bir komuta atla) gibi kısa bir anımsatıcı ile onu izleyen yazmaçlar ya da bellek adresleri gibi işlenenlerden oluşur. Assembler adı verilen bir program bu metni, işlemcinin gerçekte çalıştırdığı ikili makine koduna çevirir.
Tek bir assembly dili yoktur: x86-64, ARM64 veya RISC-V gibi her işlemci mimarisinin kendi komut kümesi ve dolayısıyla kendi assembly dili vardır; hatta tek bir mimarinin x86 için Intel ve AT&T stilleri gibi birkaç sözdizimi bile olabilir. Assembly, doğrudan yazmaçlarla (registers), yani işlemcinin içindeki minik ve son derece hızlı depolama yuvalarıyla ve bellek adresleriyle çalışır; yüksek seviyeli anlamda değişkenleri, tipleri ya da döngüleri yoktur. Döngüler ve koşullar karşılaştırmalar ve atlamalarla kurulur.
Bugün çoğu geliştirici assembly'yi hiç elle yazmaz, çünkü derleyiciler mükemmel makine kodu üretir. Yine de önyükleyicilerde (bootloader) ve işletim sistemlerinin en alt katmanlarında, sıkı sınırları olan gömülü mikrodenetleyicilerde, SIMD (tek bir komutun birkaç değer üzerinde çalışması) gibi özel komutları kullanan performans açısından kritik rutinlerde ve tersine mühendislik gibi güvenlik çalışmalarında kullanılır. Bir derleyicinin assembly çıktısını okumak da kodun donanımda gerçekte ne yaptığını anlamanın yaygın bir yoludur.
Assembly dili sıkça makine koduyla karıştırılır. Makine kodu, CPU'nun yürüttüğü ham ikili veridir; assembly ise aynı komutların insanların okuyup yazabildiği metin temsilidir. Ayrıca WebAssembly'den de farklıdır; adına rağmen WebAssembly, herhangi bir fiziksel işlemcinin assembly dili değil, tarayıcılardaki ve diğer çalışma ortamlarındaki sanal makineler için taşınabilir bir bayt kod biçimidir.
Önemli noktalar
- Her assembly komutu genellikle tek bir makine komutuna karşılık gelir.
- x86-64, ARM64 veya RISC-V gibi her CPU mimarisinin kendi assembly dili vardır.
- Assembler, assembly metnini ikili makine koduna dönüştürür.
- Önyükleyicilerde, gömülü sistemlerde, performans darboğazlarında ve tersine mühendislikte kullanılır.
- WebAssembly geleneksel bir assembly dili değil, taşınabilir bir bayt kod biçimidir.
Örnek
; Print "Hello" using Linux system calls
section .data
msg db "Hello", 10 ; the text plus a newline (byte 10)
section .text
global _start
_start:
mov rax, 1 ; system call 1 = write
mov rdi, 1 ; file descriptor 1 = standard output
mov rsi, msg ; address of the text
mov rdx, 6 ; number of bytes to write
syscall
mov rax, 60 ; system call 60 = exit
xor rdi, rdi ; exit code 0
syscallSık sorulan sorular
Assembly dili hâlâ kullanılıyor mu?
Evet, ancak çoğunlukla küçük ve özelleşmiş kod parçalarında. Önyükleyiciler, işletim sistemi çekirdekleri, gömülü yazılımlar, kriptografi ve medya kütüphaneleri, kesin kontrolün ya da azami hızın önemli olduğu yerlerde hâlâ elle yazılmış assembly içerir.
Assembly dili ile makine kodu arasındaki fark nedir?
Makine kodu, bir işlemcinin yürüttüğü ikili komutlardır. Assembly dili ise bu komutların okunabilir metin sürümüdür ve bir assembler onu makine koduna çevirir.
Assembly, C'den hızlı mı?
Elle yazılmış assembly küçük ve dikkatle ayarlanmış rutinlerde daha hızlı olabilir, ancak modern optimize edici derleyiciler genellikle çoğu insanın elle yazdığı kadar iyi, hatta daha iyi kod üretir. Assembly ayrıca tek bir CPU mimarisine bağlıdır; C ise birçoğu için yeniden derlenebilir.
İlgili sayfalar
- DerleyiciProgramlamanın Temelleri, s. 12Derleyici, bir programlama dilinde yazılmış kaynak kodu, bilgisayarın çalıştırabileceği makine kodu gibi daha alt seviyeli bir biçime çeviren programdır.
- CProgramlama Dilleri, s. 3C, belleğe doğrudan erişim sağlayan, derlenen ve düşük seviyeli bir programlama dilidir; işletim sistemlerinde, sürücülerde ve gömülü yazılımlarda kullanılır.
- Bootloaderİşletim Sistemleri, s. 1Bootloader, bilgisayarın firmware'i başladıktan sonra çalışan, işletim sistemi kernel'ını belleğe yükleyen ve denetimi ona devreden küçük bir programdır.
- System Callİşletim Sistemleri, s. 32System call, bir programın işletim sistemi kernel'ından bir dosyayı okumak ya da process başlatmak gibi ayrıcalıklı bir işlem yapmasını istediği çağrıdır.
- WebAssemblyWeb Geliştirme, s. 59WebAssembly, web tarayıcılarında yerele yakın hızda çalışan ve C++, Rust, Go gibi dillerle hızlı web kodu yazılmasını sağlayan kompakt bir ikili kod biçimidir.
- Kernelİşletim Sistemleri, s. 17Kernel, işletim sisteminin CPU'yu, belleği ve donanım aygıtlarını yöneten ve programların bu kaynaklara nasıl eriştiğini denetleyen çekirdek bölümüdür.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin