Assembly Dili ve İşlemci Mimarileri

Samet Burhan
4 min readJul 24, 2022

--

Programlama Dilleri

Programlama dilleri low-level ve high- level olarak 2 kategoride incelenebilir. Düşük seviyeli diller olarak tanımladığımız diller assembly ve makine dili gibi doğrudan donanım seviyesinde haberleşme yapabilen dillerdir. Makine dili 1 ve 0 lardan oluşan ikilik sayı sistemidir. Ve elektronik cihazların doğrudan anlayabileceği dildir ancak yazması bir o kadar zordur. Assembly ise “mnemonic” olarak adlandırılan komut yapılarından oluşur. Makine diline nazaran yazması biraz daha basittir.

Yüksek seviye dillerin ilk örnekleri olarak c, fortran ve pascal verilebilir. Ancak günümüzde sıkça kullandığımız özelleşmiş pek çok dil vardır. Yaygın olarak kullanılan dillere python, java gibi diller örnek verilebilir. Düşük seviyeli diller ile yüksek seviyeli diller arasındaki temel fark syntax yapısı ve compile/assemble aşamasıdır.

Assembly Dili

Low-level bir programlama dili olan assembly makine dilinden sonra donanıma en yakın dildir. İşlemci ve ram üzerindeki verileri doğrudan işleyebilme özelliğine sahiptir. İşlemciler 1 ve 0 değerlerine sahip olan binary sayı sistemi ile kontrol edilmektedir. Assembly dili bu ikilik sayı sistemine dönüştürülerek sistem tarafından okunur. Ancak bu makine dili olan ikilik sayı sistemi ile assembly dili arasında bir çevirici blok olması gerekir. Assembler adı verilen bu blok sayesinde assembly dili doğrudan 1 0 değerlerine sahip makine diline çevrilir.

Makine dili ile assembly dilinin bellekte kapladıkları alanlar aynıdır ancak yüksek seviyeli diller ile karşılaştırıldığında bellekte kapladığı alan daha azdır bu sebeple daha hızlıdır ancak yüksek seviyeli dilleri yazmak daha kolaydır.

Mikroişlemcilerin iç yapısını bilmeden kodlama yapılamaz bu sebeple donanım seviyesinde bilgi gerektirir. Aynı zamanda assembly işlemci tipine özel yazıldığından dolayı başka bir işlemcide aynı kodların çalışması çoğu durumda mümkün değildir.

Herhangi bir text editörü vasitasıyla kolaylıkla assembly dilinde kod yazılabilir. Yazılan bu kod TASM veya MASM çevirici programlar vasıtasıyla .obj uzantılı olarak makine dilinde kaydedilir. Bu hali ile işletim sistemi tarafından anlaşılabilir bir formatta değildir. Bu nedenle TLINK bağlayıcı programı kullanılarak .exe veya .com uzantılı hale dönüştürülür ve bu şekilde program DOS ortamında çalıştırılabilir.

İşlemci Mimarileri

Register: Saklayıcı olarak da adlandırılan bu birim, işlemcide verileri depolamak ve o verilere hızlı bir şekilde ulaşabilmek adına kullanılan ufak hafızalardır.

Clock cycle: Elektronik cihazların oluşturduğu dijital sinyallerin her bir periyottaki high ve low konumu arasındaki geçişin meydana gelme süresidir. 1 clock cycle, birbirini takip eden high/low periyodunun 1 saniye kadar sürmesidir.

CISC (COMPLEX INSTRUCTİON SET COMPUTER) KARIŞIK KOMUT SETLİ BİLGİSAYAR:

CISC mimarisi RISC mimarisine göre daha eskidir. Daha az komut ile daha fazla işlem yapmayı sağlayan bu mimaride arka planda çalıştırılan kod blokları sayesinde bellekte daha az yer kaplayarak daha uzun süren işlemleri gerçekleştirmeyi sağlamıştır. Kod boyutları gereken boyutta veriler depolayarak bellekte daha az yer kaplaması sağlanmıştı. 70 li yıllarda
ortaya çıkan bu çözüm çağın gereksinimlerini karşılayabilmekteydi.
CISC tasarım kararları adı verilen üç farklı tasarım detayına sahiptir. Bunlar; mikrokod, zengin komut kümesi, yüksek seviyeli komut kümesidir. Bu tasarım kararları sayesinde daha az kod yazarak daha fazla işlem gerçekleştirmek mümkün olur.

RISC (REDUCED INSTRUCTİON SET COMPUTER) İNDİRGENMİŞ KOMUT SETLİ BİLGİSAYAR:

CISC mimarisinden sonra ortaya çıkmış ve daha az kod yazmak için tasarlanmış bir mimaridir. Bu mimaride tek bir komutla farklı işlemler aynı anda gerçekleştirmek yerine, işlemler görev sırasına göre yerine getirilir. Her bir kod 1 clock cycle içerisine gömülerek çalıştırılır böylece komutlar adım adım ilerler. Load komutu ile ana bellekten register belleğe veriler taşınır daha sonra ise çalıştırılan komut sonucu store komutu ile tekrar ana belleğe taşınır.

  • RISC mimarisi, genellikle aynı saat hızında çalışan CISC mimarisine göre daha hızlı çalışır. Ancak bu komut işleme hızından dolayı büyük bellek ve hızlı RAM ihtiyacı doğar.
  • CISC mimarisinde kademeli komut işleme tekniği kullanılırken, RISC işlemci de ‘pipelining’ tekniği kullanılır. Bu sayede daha performanslı çalışmaktadır.
  • RISC mimarisinde bulunan komutlar, CISC komutları kadar güçlü değildir.
  • RISC register bellekler için daha fazla alana sahiptir.
  • CISC mimarisinin getirdiği karmaşıklığın önüne geçmek amacı ile, RISC mimarisinin geliştirilme ihtiyacı doğdu.

VONNEUMANN

Von Neumann mimarisi talimatlar ve verileri aynı ram üzerinde tutarak depolar, gerektiği durumda doğrudan işlem birimi ile iletişim kurarak program çalıştırır. Programın kendisi uzun vadeli depolama alanı olarak kullanılan sabit/yığın bellek (mass storage) kısmında saklanır.

HARVARD

Harvard mimarisi veri ve komutların ayrı kanallardan CPU ile haberleştiği mimari olarak tanımlanmaktadır. Neumann ve Harvard mimarileri günümüz teknolojilerinde hala kullanılmaktadır.

Bu mimaride veriler ve komutlar farklı bellek adresleme özelliği gösterebilir. Komutlar okunabilir bellekte depolanırken veriler okunabilir-yazılabilir belleklerde depolanır.

ARM VE X86 MİMARİSİ

RISC tabanlı bir mimari olan ARM 32 veya 64 bit versiyonlarına sahiptir. Düşük güç tüketimi ve maliyet etken özellikleriyle gömülü sistemlerde tercih edilebilir. X86 mimarisi CISC tabanlıdır ve pek çok karmaşık kod sistemlerini kolaylıkla çalıştırabilmektedirler bu yüzden günümüzde işletim sistemlerinde kullanılabilmektedir. Yüksek güç tüketimine sahip bir mimaridir. Bu sebeple ARM mimarisine kıyasla ağır yığın işlemlerde kullanılabilmektedir.

ARM firması tarafından tasarlanan işlemci mimariler farklı şirketlere lisanslanarak üretilir. Gelecekte düşük güç tüketimine sahip bir mimari olduğu için pek çok sistemde tercih edilecek ve böylece bu mimari yaygınlaşacaktır. Güç tüketimi öncelikli olduğundan dolayı yüksek kas gücü gerektirmeyen gömülü sistemlerde çok yaygın olarak tercih edilmektedir. ARM yonga setleri tasarlayarak sadece bir işlemciyi değil işlemci ile birlikte gpu ve bellek yollarını da paket halinde tasarlar böylece System on Chip (SoC) sistemler için verimli bir tasarım ortaya çıkar.

LİTTLE ENDİAN

Endianness, bilgisayar belleğindeki verinin sıralama şeklidir. Büyük endian ( BE ) ve küçük endian ( LE ) olarak ikiye ayrılır. Veri dizisindeki en az anlamlı biti bellekte en düşük adrese atanır. Ve sonrakiveriler bitlere sırasıyla yerleştirilir. Diğer sıralama türleri orta endian ve karışık endian olarak adlandırılır.

BİG ENDİAN

Büyük endian sıralama şeklinde ise verinin en önemli biti (“büyük uç”) bellekte en düşük adrese atanır. Verilerin geri kalanı, belleğe sırasıyla yerleştirilir. Temelde big endian ile little endian birbirinin zıttı şeklinde veri sıralama yöntemi dışında farkı yoktur. Okuma hızı bağlamı açısından da aynıdır.

--

--