| | #1 (mesaj-linki) | |
| Makine Dili Her bilgisayarın anlayacağı kendi makine dili vardır. Örneğin, Pentium işlemcinin makine dili, Sparc işlemciden farklıdır. Makine dilindeki bir komut, bit (0 ya da 1) gruplarından oluşur. Örneğin, makine dilinin bir komutu iki değerin toplanması ya da bir değerin ana belleğin bir bölgesinde saklanması gibi basit işlemleri içerir. İnsanların makine dilinde program yazması hemen hemen olanaksızdır. Örneğin, makine dilinde iki sayının toplanması,Makine dili mikroişlemci ya da mikrodenetleyici gibi komut işleme yeteneğine sahip entegrelerin işleyebilecekleri komutlardan ve buna uygun söz diziminden oluşan dile verilen addır. Makine dili, işlemcinin verilen komutlar doğrultusunda çalıştırılmasını sağlayan ve işlemci mimarisine göre değişen en alt seviyedeki programlama dilidir. Bu dil sadece 0 ve 1 binary ikililerinin anlamlı kombinasyonlarından meydana gelmektedir. Bu nedenle, makine dilinin anlaşılması çok güçtür. 0 ve 1 ikilileri işlemcinin instruction seti doğrultusunda işleme (process) uygulanacak operasyon, operasyonun gerçekleştirileceği verinin hafızada bulunduğu adres ve hafızaya ulaşım yolları gibi bilgileri ifade edecek şekilde biraraya gelmekte ve işlemci tarafından decode edilerek gerekli işlemin yerine getirilmesi sağlanmaktadır. Diğer proglamlama dillerin gerektirdiği derleyici ya da yorumlayıcı kullanımını gerektirmediğinden ve donanımı doğrudan kontrol etme gücü olduğundan kullanılır. Kullanılan işlemcinin komut setinden ibaret olan makina dili komutları donanıma bağımlıdır. Günümüzde kullanılan i386 (32bit intel) ve i486 gibi işlemci standartlarının herbirine ait birer komut seti bulunmaktadır ve bu komut seti yalnız o mimariye yöneliktir. Bunun temelinde yatan asıl sebep işlemcinin hafıza birimi üzerinden okuduğu bir veri parçasının (bir ya da birkaç bayt) işlemciye bir emir teşkil edicek bir ifade olabilmesi için bu veri parçasının işlemci üzerinde donanımsal olarak bir işleme karşılık gelmesi gerekliliğinden kaynaklanır. Örneğin: 1 0011 0111 gibi 9 bitlik bir wordu düşünecek olursak burada sol baştaki 1 biti indirect adresleme yapıldığını, bu bitten sonraki 4 bit olan 0011 çarpma işleminin yapılması gerektiğini geriye kalan 4 bit 0111 ise hafızanın 0111 adresine gidilmesi gerektiğini belirtebilmektedir. Bu düzen tabi ki farklı işlemci mimarileri için farklı olacaktır. Assembly Dili Assembly programlama dili, çoğu zaman özel alanlarda geliştirilen programlarda kullanılan alt düzel bir Programlama dili olarak tanımlanır. Bu dilin komutları, bilgisayarın doğrudan işlettiği makine dili komutlarının birebir karşı lığıdır. Bu nedenle bu dil için makine dili de denilebilir. Her ne kadar uzman programcıların özel alanlarda kullandığı bir dil olarak tanımlansa da, programcılar istedikleri takdirde her türlü uygulamayı bu dil ile geliştirebilirler yada kullandıkları üst düzey dil altından çağırabilecekler i procedurler yazabilirler. Çünkü hemen hemen her dilde Assembly için destek bulunmaktadır. Dilin en büyük avantajı CPU çevrebirimlerinin ve ana belleğin çok iyi bir şekilde kontrolünü sağlamasıdır. Ayrıca işletim sistem fonksiyonlarını da çok kolaylıkla kullanmak mümkündür. Assembly program dili derleyicisi kullanılan komutların birebir makine dili karşılıklarını üretir. Bu nedenle bu dil ile oluşturulan programlar olabilecek en kısa programlar olurlar. Bir Assembly programı çalışabilir bir programın tüm kesimlerinin tam olarak tanıtılması ile oluşturulabilir. Bu nedenle bir Assembly programda minimum üç ana kesim bulunmalıdır. Yüksek Seviyeli Programlama Dilleri Makine dilinde çok sayıda komutla yapılabilecek bir iş, yüksek seviyeli programlama dilinin bir komutu ile yapılabilir. Bu yüksek seviyeli diller, İngilizce ya da Türkçe gibi doğal bir dil değil, kendi yapısı ve dilbilgisi kuralları olan, insanlar için anlaşılması kolay olan dillerdir. Yüksek seviyeli programlama dilinde yazılan bir program, derleyici (compiler) dediğimiz yazılımlar tarafından, makine dilindeki denk bir programa dönüştürülür. Bilgisayar tarafından çalıştırılacak olan program, makine dilindeki programdır. Bazı yüksek seviyeli programlama dilleri arasında Pascal, Fortran, Basic, C, C++, Cobol, Lisp ve Prolog sayılabilir. Bu dillerin birkaçında, iki sayının toplanması şöyle ifade edilir: C:=A+B; (Pascal) C=A+B; ( C ) C=A+B (Fortran) Bazen yüksek seviyeli programlama dilinde yazılmış bir program, makine diline çevrilmek yerine başka bir ara dile çevrilebilir. Bu ara dildeki komutlar, hiçbir makineye bağımlı değildir. Bu ara dildeki programlar, o dilin yorumlayıcısı (interpreter) olarak bilinen yazılımlar tarafından çalıştırılır. Bunun amacı, ara dildeki programların değişik bilgisayarlarda hiçbir değişikliğe uğramadan kullanılabilmesidir. x | |
|
| | #2 (mesaj-linki) | |
| Makine Dili Sembolik makina diline ihtiyacınız var mı? Aslında, her ne yapıyorsanız bölmek istemem, ama burada zor kazanılmış tecrübelerin sonucu olarak bazı tavsiyelerde bulunacağım. Artılar ve Eksiler Sembolik makina dilinin (Assembly) avantajları Sembolik makina dili (Assembly) pekçok düşük seviyeli şeyi ifade edebilir:
Sembolik makina dili, oldukça düşük seviyeli bir dildir (bundan daha aşağıda ikilik komutları el ile kodlamak bulunmaktadır). Bu da şu manalara gelmektedir:
Tüm bunlardan sonra, sembolik makina dili kullanmanın bir ihtiyaç olduğunu düşünebilirsiniz ve hatta ihtiyaç olmadığı bazı yerlerde kullanmak çok da faydalı olabilir. Şunları yapmak isteyeceksiniz:
Bununla ilgili olarak Linux çekirdek kaynaklarına bakınız: ne kadar az sembolik makina diline gerek duyulursa, neticesinde hızlı, güvenilir, taşınabilir ve sürdürülebilir işletim sistemi oluşmaktadır. Hatta DOOM gibi başarılı bir oyun dahi yoğun şekilde C ile yazılmıştır, sadece küçük bir kısmı hızı arttırmak için sembolik makine dili ile yazılmıştır. Sembolik makina dili nasıl kullanılmaz Başarılı kodu gerçeklemek için adımlar comp.compilers'daki Charles Fiterman'ın bilgisayara karşın insanın ürettiği sembolik makina kodlarıyla ilgili söylediği gibi: İnsanoğlu her zaman kazanmak zorundadır ve işte bu da nedenidir. Birincisi insanoğlu herşeyi yüksek seviyeli dilde yazar. İkincisi üzerinde zaman harcadığı sıcak noktaları bulacak şekilde programın taslağını hazırlar. Üçüncüsü elinde bu kısımlar için derleyicinin ürettiği kod vardır. Dördüncüsü makina kodu üzerinde ufak gelişmeler sağlayarak onlara bir canlılık kazandırabilir. İnsanoğlu kazanır çünkü makinaları kullanabilmektedir. Eniyileme yapan derleyiciler ile dilleri Diğerleri arasında ObjectiveCAML, SML, CommonLISP, Scheme, ADA, Pascal, C, C++ gibi dillerin programınızın şişkinliğini eniyileyecek özgür derleyicileri vardır ve genellikle, sıkı döngüler için bile elle yazılmış sembolik makina kodundan daha iyisini üretirler, bu arada da daha yüksek seviyeli ayrıntılar üzerinde odaklanmanızı sağlarlar ve de belli bir kararlı düzeye geldikten sonra da yukarıda bahsedilen şekilde belli miktar başarıma el koymanızı yasaklamazlar. Elbette, bu dillerin çoğu için eniyileme yapan ticari derleyiciler de vardır! Bazı diller C kodu üreten ve sonrasında eniyilemesini C derleyicisine yaptıran derleyicilere sahiptir: LISP, Scheme, Perl ve diğer pekçoğu. Hız oldukça iyidir. Kodunuzu hızlandıracak için genel adımlar Kodunuzun hızlı çalışmasını sağlamak için, analiz araçlarından birinin kodunuzun belli bir yerini sürekli bir performans darboğazı olarak tanımlaması gerekmektedir. Bu nedenle, bir kod parçasını çok yavaş olarak tanımladıktan sonra, şunları yapmalısınız:
Derleyicinin ürettiği kodu incelemek Derleyicinin ürettiği kodu incelemek için pek çok neden vardır. İşte size bu kodla neler yapacağınız:
Linux ve Assembly Muhtemelen farkettiğiniz üzere, genel olarak, Linux programlamada sembolik makine dilini kullanmaya ihtiyaç duymazsınız. DOS'takinin aksine, Linux sürücülerini sembolik makine dili ile yazmanız zorunlu değildir (aslında, eğer gerçekten istiyorsanız yapabilirsiniz). Ve günümüzün eniyileme yapan derleyicileriyle, farklı işlemcilerdeki hızı dikkate alıyorsanız, C ile yazmak çok daha basittir. Yine de, bunu okuyorsanız, C/C++ yerine sembolik makine dili kullanmak için bir nedeniniz olabilir. Sembolik makine dilini kullanmak ihtiyacında olabilirsiniz veya sadece kullanmak isteyebilirsiniz. Kısaca, sembolik makine dili krallığına dalmaktaki temel pratik sebepler (ihtiyaç) kısa kodlar ve libc bağımsızlıklarıdır. Pratik olarak ve en sık karşılaşılan nedense (istek), 20 yıllık ve herşeyi sembolik makine dili ile yapma alışkanlığı olan eski bir bilgisayar kurdu olmaktır. Yine de, eğer Linux'u gömülü bir sisteme yerleştiriyorsanız, tüm sistemin büyüklüğüne göre kısa olabilirsiniz: çekirdeği, libc ve tüm diğer şeylerin (file|find|text|sh|v.b) uygulamalarını birkaç yüz kilobyte'a oturtmalısınız ve her kilobyte'ın değeri çok fazladır. Bundan dolayı, mümkün olan yollardan birisi, sistemin bazı (veya tüm) kısımlarını sembolik makine dili ile yazmaktır ve bu durum da pekçok yer tasarrufu sağlayacaktır. Mesela, basit bir, sembolik makine dili ile yazılmış, httpd 600 byte'tan az tutmaktadır; kernel, httpd ve ftpd içeren bir sunucuyu 400kb veya daha az boyutta ayarlayabilirsiniz... Bunu düşünün. Son Düzenleyen KisukE UraharA; 16-03-2008 @ 18:44. | |
|
![]() |
| Etiketler |
| dili, makine |
| makina dili, makine dili, |
Makine Dili Konusuna Benzer Konular | ||||
| Konu | Konuyu Başlatan | Forum | Cevap | Son Mesaj |
| Makine (Makine Kimdir? - Makine Hakkında) | SatanpisT | Türkçe Rock | 2 | 04-01-2009 16:36 |
| Makine Teknisyeni | P.u.S.u | Meslekler | 0 | 10-06-2007 02:45 |
| Makine Ressamı | P.u.S.u | Meslekler | 0 | 10-06-2007 02:43 |
| Makine Mühendisliği | P.u.S.u | Meslekler | 0 | 03-06-2007 11:03 |
| Makine Zekası | Blue Blood | Mühendislik Bilimleri | 1 | 08-03-2007 19:47 |