Şimdi Ara

Makine Dili Hakkında

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
6
Cevap
0
Favori
15.256
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba arkadaşlar programlama eğitimine başladım yıllardır bilgisayar ile haşır neşir olmamdan dolayı pek sıkıntı yaşamıyorum ancak kafama takılan bir nokta var.Bilgisayar yazdığımız harf ve rakamları yani veriyi makine dili dediğimiz 011100 şekline çeviriyor.Bu 0 ve 1 rakamı voltajın olup/olmamasını ifade ediyor.İşte bu noktayı kavrayamıyorum yani ben şimdi "Ankara" yazdığımda bunun karşılığı ikili sistemde örneğin 10101011110100 olarak çeviriliyorsa daha sonra yeniden aynı sözcüğü yazdığımda farklı rakamlara mı denk geliyor kısacası makine dilinin standart bir alfabesi var mı ?? Yani A harfi 01 ise L harfi 10 ve İ harfininde 101 ise bunları yan yana yazdığımızda "Ali" sözcüğünü oluşturmuş olmazmıyız ? Hocaya bu şekilde anlattım ancak onu hiç bir insan anlayamaz 0 ve 1 o anki voltaj değerine göre değişir dedi.İnternette binary alphabet diye arattığımda buldum ve iyice kafam karıştı :)

     Makine Dili Hakkında







  • O bahsettiğin şey makine kodu değil bildiğimiz ascii karakter tablosu. Bu tabloda her karakter 8 bit ile ifade edilir.

    Birde bilgisayar dilinde öyle yanyana koyup anlamlandırma diye bişey sözkonusu değil. 0 ve 1 lerin hangi düzende yerleşeceğini cpu tasarımcıları belirler.
  • Assembly ogrenirsen bu sorulara yanit bulursun.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Hocam Salı Günü Gördüğümüz Algoritmalar Ve Programlamaya Giriş Dersinde Bahsi Olmuştu Yanlış Hatırlamıyorsam... Yani İlk Dersimizde...

    Bahsettiğiniz Şey O Şekilde Olmuyor, Her Karakterin ASCII'de Karşılığı Var, Yanlış Hatırlamıyorsam A 65, B 66, C 67 Diye Gidiyordu. Makine Öncelikle Bunu O Şekilde Anlıyor Ve Sonra 1 ve 0 Olmak Üzere Tasarlıyor, Yani 01 10 00 11 Gibi Belli Bir Alfabesi Yok. 2lik Sistem Kullanıyor Ve 1 0 Olarak Ortaya Sonuç Çıkarıyor.

    Yanlış Bir Şey Yazdıysamda Bilen Arkadaşlar Uyarsın Bizde Yanlış Bilmeyelim :D
  • 1 0 mantığı sadece voltaj var yok demek olmuyor. bilgisayarda çeşitli birimler var burada 1 0 lama işlemi o birimde tasarlanmış teknolojiye bağlıdır. Örneğin tek yazılımlık cl lerde tracklar üzerinde tepeler mevcuttur. lazerle bu tepeler patlatılarak çukur olur. bu durumda tepeler 1 çukurlar 0. bir başkasında harddiskte yazma okuma işlemi manyetik alan üzerinde olur olur. bu rada dipol denen manyetik elemanlar vardır. bunların yönunnün + olması 1 eksi olması 0 dır. bazı birimlerde ise kondansatörün (sığa) için dolu ya da boş olması 1 0 oluyor. bunlar bu şekilde uzar gider.

    bu 1 0 sıfırlar ikilik sistem olarak bilg. üzerinde verilerin saklanması işlenmsinde kullanılır. yazdığın ali kelimesine gelince. bunun saklanması cpu nun çalışma mantığına bağlı olarak örneğin en basitinden asci ile kodlansın. değerleri atıyrom a 15 l 30 i 18 olsun. 15 2lik sistem 10100101, 30 01001010, 18 1000110 olsun. bunlar sıralı ve mantıklı biçimde cpu nun algoritmasına göre diske kaydedili. "10101001010110100101010" bu değer senin içi ali olmuş olur. tabi böyle kaydedilmez. segmentlenir bunar bilg. için alamlandırılır. mesela ilk 10 bit diskte nereden tutuduğunu gösteriri sonraki 50 bit veriyi gösterir fln.




  • Bunu anlamak icin yapilmasi gereken en iyi sey assembly language ile programlama yapmak.
    CPU mimarisine gore bazi komutlar bulunur.
    Ornegin Intel x86 mimarisi icin Intel'in cikardigi manual'e bakilarak instruction set ogrenilir:
    http://en.wikipedia.org/wiki/X86_instruction_listings
    Ornegin Toplama islemi CPU seviyesinde su sekilde ilerler ( X registerindaki integer ile Y registerindaki integer i toplayip sonucu Z registerina yaz. ) Buradaki X,Y ve Z degiskenlerini Toplama icin hazirlanan makine dilindeki ilgili alanlara binary olarak yazarsin. Toplama isleminin kodunu da ilgili CPU mimarisindeki instruction-list'ten sen ogrenirsin. Yani diyelim ki X = 10101 ( x86 mimarisinde genelde 32 register bulunuyor ) , y = 11001 , z = 10001 . Toplama islemi de 10101010 gibi bir sey olsun.
    Tum bu verilerin yan yana yazilmasi ile islemci yapacagi islemi algilayip sonucu isliyor. ( Bu ornekteki islem icin makine dili karsiligi : 10101010 10101 11001 11001 oldu mesela ).
    Bu sekilde calisiyor sistem. Senin bahsettigin String islemi aslinda biraz daha kompleks. Bizim anladigimiz harfleri harddiske byte byte kaydederiz. Oradaki byte[] array'i ve kullanacagimiz encoding sistemine gore harfler ortaya cikar. Cogu programlama icin en kolay sey "hello world" yazdirmaktir ama makine dilinde ekrana String yazdirmak cok daha kompleks bir islem toplamaya gore. Cunku yazdiracagin metnin icerdigi kelime sayisini bilmedigimizden, harddiskteki konumunu belirleyen ( pointer mantigi ) veriyi register'da tutuyoruz.

    Detayli bilgi icin:
    http://tr.wikipedia.org/wiki/MIPS_mimarisi
    http://www.tik.ee.ethz.ch/education/lectures/TI1/materials/assemblylanguageprogdoc.pdf
    http://en.wikipedia.org/wiki/X86_instruction_listings




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.