Assembly programlama dili nedir? Assembly nasıl oluşturuldu, nasıl çalışır ve örnek kodlar nelerdir?

Yeni bir programlama dili öğrenmek istiyorum ve Assembly diliyle ilgileniyorum. Assembly programlama dili nedir, nereden ve nasıl oluşturulmuştur? Teknik olarak nasıl işler ve hangi dillerle birlikte kullanılabilir? Bana bu dilin genel yapısını anlatır mısınız? Ve ayrıca, bir başlangıç seviyesinde kod örnekleri görebilir miyim?

Assembly Programlama Dili Nedir?

Assembly programlama dili, bilgisayar bilimi ve elektrik mühendisliğinde kullanılan düşük seviye bir yazılım dili türüdür. Düşük seviye, dili makine koduna veya bir bilgisayarın işlemci mimarisine çok yakın olduğu anlamına gelir. Bu dil, bire bir eşleşen op-kodlar ve bellek adresleri gibi öğeleri içerir.

Assembly’nin Oluşumu

Assembly programlama dili, 1940’ların sonları ve 1950’lerin başlarında, ilk bilgisayar sistemlerinin geliştirilmesinin hemen ardından ortaya çıktı. Makine dilinde programlama oldukça karmaşık ve hata yapması kolaydır, ve bu da düşük seviyeli dili geliştirme konusunda bir ihtiyaç oluşturdu. Assembly’nin fikri, programcının makine dilinde yazmak yerine yüksek seviye bir dilde yazabileceği ve ardında bu işlemleri otomatik olarak makine diline çevirebilecek bir program (assembler) oluşturmaktı.

Assembly Nasıl Çalışır?

Assembly’nin nasıl çalıştığını anlamak için, bir bilgisayarın genel yapısını anlamak önemlidir. Bir bilgisayar, genellikle memori yongalarından oluşan bellek, ve işlemci olarak adlandırılan merkezi bir işlem birimi (CPU) içerir.

Assembly programlama dilinde bir komut yazmak, CPU’ya belirli bir görevi tamamlamasını söyler. Örneğin, bir programcı bellekteki iki sayıyı toplamak isteyebilir. Bunun için programcı, belirli bir toplama işlem kodu (ADD) ve ilgili adresleri yazacaklardır. Assembler daha sonra bu kodları makine koduna çevirir.

Birlikte Kullanılabilecek Diller

Genellikle, Assembly performansın önemli olduğu veya donanım düzeyinde kontrol gerektiren durumlarda kullanılır. Bu, genellikle daha büyük bir projenin parçası olarak sıkça kullanılan bir programlama dili olabileceği anlamına gelir.

C, C++ ve Python gibi diller genellikle birlikte kullanılabilir. C, C++ gibi diller, genellikle düşük seviye sistem programlamasında performansı optimize etmek için kullanılırken, Python gibi diller genellikle daha yüksek seviyeli uygulamalar ve gömülü sistemlerde kullanılır.

Assembly Genel Yapısı

Assembly, işlenmesi gereken belirli bir görev setine dayalı bir komut seti içerir. Bu komut setleri genellikle ADD (Toplama), SUB (Çıkarma), MOV (Taşıma), ve JUMP (Zıplama) gibi komutları içerir. Aynı zamanda komutları uygulayacak donanıma erişmek için kullanılan bellek adreslerini belirtmeniz gereken bir dil düşünebilirsiniz.

Assembly Örnek Kod

Aşağıda verilen örnek kodların online olarak derlenmiş hali. Burada sizlerde assembly kodlarıyla denemeler ve derlemeler yaparak konuyu daha iyi kavrayabilirsiniz.

İşte bir “Merhaba Dünya!” Assembly programı örneği (Linux ve Intel işlemciler için):

section .data
    hello db 'Merhaba, Dünya!',0

section .text
    global _start

_start:
    ; kullanılan kütüphaneyi 'write' için syste çağrısı yapıyoruz
    mov eax,4
    ; birinci argüman 'stdout' - bu örnekte 1
    mov ebx,1
    ; ikinci argüman 'hello' stringinin adresi
    mov ecx,hello
    ; üçüncü argüman kısmını 'hello' stringinin boyutu
    mov edx,16
    ; invoke system call
    int 0x80
    ;exit kısmı
    mov eax,1
    xor ebx,ebx
    int 0x80

Bu programda, ‘write’ ve ‘exit’ adlı iki sistem çağrısı kullanılıyor. İşte kodun adım adım açıklaması:

  1. .data Bölümü: Bu bölüm, veri (data) tanımlamalarını içerir. hello adlı bir veri tanımlanıyor ve içeriği ‘Merhaba, Dünya!’ olarak ayarlanıyor. Bu, ekrana yazdırılacak metni içerir ve sonunda bir null byte (0) ile sona erer.

  2. .text Bölümü: Bu bölüm, programın ana kodunu içerir.

  3. global _start: _start etiketi, programın başlangıç noktasını belirtir ve bu etiket global olarak tanımlanır.

  4. _start Etiketi: Programın başladığı yerdir. Bu etiket altında bir dizi işlem gerçekleştirilir.

  5. mov eax,4: eax kaydına 4 değeri atanır. Bu, “write” sistem çağrısının numarasını temsil eder.

  6. mov ebx,1: ebx kaydına 1 değeri atanır. Bu, “stdout” dosya tanımlayıcısını (standart çıkış) temsil eder.

  7. mov ecx,hello: ecx kaydına “hello” adlı verinin bellek adresi atanır. Bu, yazdırılacak metni gösterir.

  8. mov edx,16: edx kaydına 16 değeri atanır. Bu, yazdırılacak verinin boyutunu belirtir.

  9. int 0x80: Bu, sistem çağrısını (system call) çağırır. İşte bu noktada, “write” sistem çağrısı çalışır ve “Merhaba, Dünya!” metni ekrana yazdırılır.

  10. mov eax,1: eax kaydına 1 değeri atanır. Bu, “exit” sistem çağrısının numarasını temsil eder.

  11. xor ebx,ebx: ebx kaydına sıfır atanır. Bu, programın dönüş kodunu (exit code) temizler.

  12. int 0x80: Bu, programı sonlandırır ve kontrolü işletim sistemine geri verir.

Bu kod, Linux’ta çalışacak bir Assembly dil programının temel bir örneğini sunar. Bu program, ekrana bir mesaj yazdırmak için sistem çağrılarını kullanır ve sonra programı düzgün bir şekilde sonlandırır.

TERİMLER:

Op-kod: Opetasyon kodu, yani bir bilgisayarı işlemciye bir işlemi gerçekleştirmesi talimatını veren kısadır.
Assembler: Daha yüksek seviye bir programlama dilinde yazılan kodları, makine diline çeviren program.
CPU (Central Processing Unit): Bilgisayarın merkezi işleme birimi veya işlemci. Tüm hesaplamaları burada gerçekleştirilir.
Makine dili: Bilgisayarın, doğrudan işlemcinin anlayabileceği düşük seviye bir dil.
Gömbed Sistemler: Spesifik işlevlere sahip, genellikle büyük bir sistem parçası olan donanım-software kombinasyonları. Bu, günlük hayatta kullanılan bir çok aygıtı (telefonlar, televizyonlar, ATM’ler) içerir.

2 Beğeni

Bu konuda faydalı olacagini dusundugum harika bir kaynak: ASSEMBLY DİLİ