• bu kelime küçükken bana fazla sevimli gelirdi. assembler'lar 8-bit döneminde ışıktan hızlı çalışan kod yazmayı sağlayan yegane gereçlerdi. bu kadar kıymetli bir gerecin "bir araya getirici" gibi tevazu dolu bir ismi olması nükleer bombaya "ayrıştırıcı" demek gibi bir şey.
  • sirali assembly instruction'larini oturup machine code'a donu$turen programlara verilen isim.. (bkz: tasm) (bkz: masm) (bkz: gena) (bkz: seka) (bkz: trashemone) (bkz: asmone)
  • zamanının iki üstadı için;

    (bkz: vedat hallaç)
    (bkz: celal hallaç)
  • makine dilinde program üreterek bilgisayar tarafından doğrudan işletilebilmesini sağlayan bilgisayar programıdır.

    (bkz: assembly)
  • kıro.
  • birleştirici çevirici.
  • eskiden derleyiciler yavaşken (ya da istediğim yüksek seviyeli dil için bulunmuyorken) kullandığım işlemci dilleri.

    6502
    8080
    z80
    8086
    6809

    bunlarla çeşitli programlar yazmışlığım vardır.
  • dikkat ! bu ileti bir tugla icerir !

    arada herhangi bir derleyici olmadan, dogrudan islemciye, islemcinin kendi komut dilinde gorev verip is yaptirmaya yarayan programlama sisteminin adi.

    yukarida bahsedilmeyen seyler oldugu icin biraz uzun yazip bilgi verecegim.

    1: bizler bir programlama dili kullanirken (python, c++, java, visual fucking basic !) genelde o dilin construct yani kurgulariyla matematiksel veya dizisel islemler yapar ve bunlarin sonucunda cesitli donguler kurar, yordam ve altyordam vasitasiyla kenar bilesenlere is yaptiririz.

    ornek vermek gerekirse c programlama dilinde "printf ("hello world\n"); gibi. burada o dile ait bir fonksyon kullanir ve o dilin bize sagladigi bilgisayar bilesenlerine erisim kutuphaneleri uzerinden ekrana bir sey yazar, bip sesi cikartir, veya yaziciya bir seyler basariz.

    bize normal gorunmesine ragmen islemci icin c anlasilir bir sey degildir dolayisiyla dil bunu once "compile eder" yani derler, iste bu derleme islemi, bizim yazdigimiz ve insan algisina daha kolay olan bir dilden dogrudan makine diline cevirme seklinde olur, bu cevirme sirasinda kullandigimiz kutuphaneleri de(veya kullanilan kisimlarini) arada cevirip bizim yazilimimiza ekler (c'deki include # statement).

    assembler ise bu dillerden farkli olarak dogrudan islemcinin native yani yerlesik komutlari ile calisir ve arada bir derleyici olmadan (bu kisim tam boyle degil ama simdilik boyle kabul edin) dogrudan islemciye bu komutlari vererek islem yapar. bu bize hiz avantaji sagliyor, yani c veya baska bir dilin ceviricisi arada olmadigi ve kodun icine kendi kafasina gore bazi gerekli olmayabilecek seyleri atmadigi icin ayni islem daha kisa zamanda bitiyor (bu butun islemler icin gecerli degil).

    2: bizler icin ozellikle ust seviye diller (python, vs) donanim katmaninda ve isletim sistemi katmaninda bulundan bir cok kompleks yapiyi gizleyerek (abstract), bunlarin erisim sekillerini ve nasil calisacaklarini bilmeden bilgisayar bilesenlerine istedigimiz bazi seyleri yaptirmamizi saglarlar.

    ornek: bir dosya okumak veya yazmak icin c'de basit bir fopen() yeterken, bunu islemcinin kendi dili ile yapmaya kalkarsaniz epey bir tirmalamaniz gerekir, once ıo adreslemesini bilmeli sonra o ıo'da bulunan cihazin ne tur bir sekilde calistigini bilerek ona gore adreslediginiz alete veriyi ne sekilde yazmaniz gerektigini bilmeniz gerekir, bu arada yazmaya calistiginiz yerde baska data olmadigini da kontrol ettikten sonra, buffer'in yettigi kadar datayi yollayip yazma isleminin bitmesini veya buffer'in bosalmasini ve sonraki sector icin buffer'in tekrar hazir hale gelmesini bekler, dosya icerigi bitene kadar bunu tekrarlarsiniz. burada isin icine diskin geometrisinden tutunda uzerinde cache bulunup bulunmadigina kadar bir suru sey girer, ki kompleks otesi bir durum olusur.

    iyi ki isletim sistemleri var ve donanimin uzerindeki bu tur angarya isi kendi ustune alip bizim daha kolay bir sekilde bilesenlere ulasmamizi sagliyorlar. burada 1'de bahsettigim "bu kisim tam boyle degil" durumu ortaya cikiyor, su an assembler derleyicisinde bir seyler yazip bilesenlere ulasmak istediginizde, her ne kadar derleyici yok desem de bu angarya isleri kolaylastiran bazi kutuphaneleri barindiran derleyiciler isin icine girip c'deki fopen() kadar kolaylastiriyor olayi.

    3: tahmin edeceginiz uzere dunya uzerinde bir suru islemci ailesi var ve bunlarin hepsinin kendine gore bir komut seti ve dolayisiyla konustugu dil var. neden islemci ailesi diyorum ? cunku firmalar bir seri islemci uretip bunun daha hizlisini ve daha gelismisini urettiklerinde genelde komut setine sadik kaliyor ve ayni veya yeni bazi seyler eklenmis komut setiyle piyasaya suruyorlar.

    ornek intel ailesi "x86" denmesinin sebebi 8086'dan beri temel komut seti mantiginin degismemesi. bu su an xeon islemcide calisan bir yazilimin 8086'da calisacagi anlamina gelmiyor, ama eger pentium serisinde bir program yazacak kadar assembler biliyorsaniz, su an calisacak xeon islemcide kisa bir intro ile uretmeye baslayabilir hale geliyorsunuz.

    intel ile amd su an ayni komut setini veya nuve olarak ayni ama firmaya ozgu degisiklikler iceren bir komut setini kullanmakla beraber, apple m1 ile tamamen farkli, motorola powerpc ile tamamen farkli komut setleri kullaniyor. urettiginiz bir program eger intel assembler icin ise, ayni programi powerpc icin kullanmaniz pek mumkun degil, oturup tekrar yazmaniz lazim. burada dezavantaji ortaya cikiyor, tasinabilir degil maalesef.

    4: assembler islemcisine gore degistigi gibi, kuracaginiz donguler, yapacaginiz blok islemler, islemci mimarisi ile de ilintili olarak farklilik gosterebiliyor. mesela risc islemciler ile konvansyonel islemciler arasinda ciddi bazi mantik farklari cikabiliyor, dolayisiyla kodu yazarken islemcinin ic isleyisine de vakif olmaniz sart.

    ornek: mikrodenetleyici dunyasinin bence en isvicre cakisi microchip denetleyicilerin buyuk bir kismi risc. interrupt yerine bildiginiz program counter'i yeni degere atamak gibi manyak bir metod kullanabiliyorsunuz, oysa ki interrupt yani kesinti olsa islemci otomatik olarak bazi seyleri yapacak siz yapmak zorunda kalmadan.

    dolayisiyla yazacaginiz platform ve beklenen ise gore kullanacaginiz assembler ve sizin ogrenme ve uygulama sureniz degisebiliyor.

    5: benim kendime en yakin buldugum dil/metod acikcasi assembler, cunku arada hic bir sey yok, yani "la bu c compiler neden basit bi if kurgusunu bu kadar uzatiyo ya" derdi yok, veya su konuda bu compiler/derleyici bug'li o yuzden dikkat etmek gerek gibi ekstra kasmalar yok (gerci assembler icin kullanilan bazi araclar daha beter). kotu kismi eger bilgisayarda bir sey yapacaksaniz arada isletim sistemi var, yani isletim sisteminin izni olmadan kalkip donanima veya yazilima, veya hafiza bilesenlerine erisemiyorsunuz, her ne kadar program native (yerli) calissa da isletim sistemi sizin kendinize ayrilan alandan baska yerlere ulasmaniza izin vermiyor, dolayisiyla adreslediginiz alan aslinda siz baktiginizda "la bu ovalar, goller, daglar hep benim ya la" seklinde, ama aslinda haritada ufacik bir noktasiniz ve haritayi isletim sistemi ciziyor. kalkip kendi hafiza alaninizdan baska bir alana atlayamiyor, sacma interrupt verip olmayacak isler yapamiyor, program counter'i gidip baska bir degere atamaya kalkamiyorsunuz. (bunlarin hepsi isletim sisteminin duzgun oldugunu kabul ederek yazildi, non ms yani).

    sonuc: eger ufak ve basit ve hiz gerektiren isleri isletim sistemi olmaksizin, mikro denetleyicilerle yapmak isterseniz basvurmaniz gereken dil ama kalkip isletim sistemi uzerinde muhasebe programi yazacaksaniz timarhaneye ziyaretinize gelir, temiz don getiririz.

    dipnot: raspberry pi mikrodenetleyici degildir arkadaslar, orada yaptiginiz seyler elbette guzel hos ama gercekten mikroodenetleyicilerin efektivitesi veya maliyet faktoru dusunulmeden yapilmis seyler, yani endustriyel olma ihtimalleri dusuk.
  • lakin ayni zamanda hatali olsa da agza yerle$tiginden assembly dilinin kendisi icin de kullanilir..
  • (bkz: nasm)
hesabın var mı? giriş yap