Şimdi Ara

C dilinden makine diline derleme?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
6
Cevap
0
Favori
1.097
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • ..



    < Bu mesaj bu kişi tarafından değiştirildi MK102 -- 18 Mart 2011; 9:26:55 >



  • programlama bölümüne sorsan daha ayrıntılı cevap alırsın ama benim bildiğim pc de yazılan program doğrudan işletim sistemine hükmediyor, yanlış da olabilir yanıltmayayım...
  • bildiğim kadarıyla amd de sse sse2 ve sse3 komut setilerinin aynılarını kullanıyo
  • quote:

    Orjinalden alıntı: MK102
    assembly dili bildiğiniz gibi işlemciden işlemciye farlılık gösteriyor,her işlemcinin farklı komutları var yaptığımnız programı başka işlemcilerde çalıştıramıyoruz...benim merak ettiğim;

    El assembleri ile çevrilirken her komutun hexadesimal karşılığını rom içerisine bay bayt adreslere yerleştiriyoruz peki C dili ile yazılmış bir program derlendikten sonra bilgisayarda intel,amd,vb... işlemcileri nasıl tanıyor?


    Anladigim kadariyla sorunuzda "genel olarak x86 mimarisi icin derlenmis bir C programindan bahsediyorsunuz. Yoksa tabii ki bildiginiz gibi her mimarinin derleyicisi ayri, sozgelimi PowerPC icin derlediginiz bir program bir AMD islemcisinde calismayacaktir, isletim sisteminin "loader" denen kismi "Unknown executable format" deyip cikacaktir isin icinden. Son 10-15 yilda Unix tabanli sistemlerde oldukca yaygin olan ELF gibi standard executable formatlari zaten programin hangi islemci icin derlendigi bilgisini de ekliyorlar program header'inin icine. Google'da "ELF format", "ELF loader" gibi aramalarda bulunursaniz daha detayli bilgi bulurunuz.

    Sorunuzun x86 mimarisini ilgilendiren kismina gelirsek: Genellikle x86 islemcileri ureten her sirket tamamen ayni komut setini kullanmaya ozen gosteriyorlar, AMD ile Intel arasindaki lisans anlasmasi geregi SSE/SSE2 gibi komut setleri AMD islemcileri tarafindan da destekleniyor mesela. Zaten kullandiginiz C derleyicisine "ben falanca islemci isin derleme yapiyorum" dediginizde (mesela GCC icin "-march=pentium4" diyerek) sadece hedef mimarinin kullandigi komutlari kullanacaktir. Bu mimariden once gelen ve dolayisiyla bazi komutlari calistirmamasi mumkun olan mimarilerde ise calismasi garanti degildir ortaya cikacak executable'in.

    Bazi executable format'lari farkli mimariler icin derlenmis programlarin kombine edilmesine olanak taniyor, isletim sistemi loader'i calistigi zaman "bu programin hem X, hem Y mimarisi icin versiyonlari var, ben X mimarisini calistiracagim" diyebiliyor. Mesela Apple bilgisayarlarinin hem eski Mac'lerdeki PowerPC, hem de yeni Mac'lerdeki x86 islemcisi icin yazilmis kod versiyonlarini bir arada paketleyebilmesini saglayan Rosetta vb. gibi teknolojiler bunlara guzel bir ornek. Ancak bunlar henuz cok yeni ve yaygin degiller.




  • quote:

    Orjinalden alıntı: ChipArchitect

    quote:

    Orjinalden alıntı: MK102
    assembly dili bildiğiniz gibi işlemciden işlemciye farlılık gösteriyor,her işlemcinin farklı komutları var yaptığımnız programı başka işlemcilerde çalıştıramıyoruz...benim merak ettiğim;

    El assembleri ile çevrilirken her komutun hexadesimal karşılığını rom içerisine bay bayt adreslere yerleştiriyoruz peki C dili ile yazılmış bir program derlendikten sonra bilgisayarda intel,amd,vb... işlemcileri nasıl tanıyor?


    Anladigim kadariyla sorunuzda "genel olarak x86 mimarisi icin derlenmis bir C programindan bahsediyorsunuz. Yoksa tabii ki bildiginiz gibi her mimarinin derleyicisi ayri, sozgelimi PowerPC icin derlediginiz bir program bir AMD islemcisinde calismayacaktir, isletim sisteminin "loader" denen kismi "Unknown executable format" deyip cikacaktir isin icinden. Son 10-15 yilda Unix tabanli sistemlerde oldukca yaygin olan ELF gibi standard executable formatlari zaten programin hangi islemci icin derlendigi bilgisini de ekliyorlar program header'inin icine. Google'da "ELF format", "ELF loader" gibi aramalarda bulunursaniz daha detayli bilgi bulurunuz.

    Sorunuzun x86 mimarisini ilgilendiren kismina gelirsek: Genellikle x86 islemcileri ureten her sirket tamamen ayni komut setini kullanmaya ozen gosteriyorlar, AMD ile Intel arasindaki lisans anlasmasi geregi SSE/SSE2 gibi komut setleri AMD islemcileri tarafindan da destekleniyor mesela. Zaten kullandiginiz C derleyicisine "ben falanca islemci isin derleme yapiyorum" dediginizde (mesela GCC icin "-march=pentium4" diyerek) sadece hedef mimarinin kullandigi komutlari kullanacaktir. Bu mimariden once gelen ve dolayisiyla bazi komutlari calistirmamasi mumkun olan mimarilerde ise calismasi garanti degildir ortaya cikacak executable'in.

    Bazi executable format'lari farkli mimariler icin derlenmis programlarin kombine edilmesine olanak taniyor, isletim sistemi loader'i calistigi zaman "bu programin hem X, hem Y mimarisi icin versiyonlari var, ben X mimarisini calistiracagim" diyebiliyor. Mesela Apple bilgisayarlarinin hem eski Mac'lerdeki PowerPC, hem de yeni Mac'lerdeki x86 islemcisi icin yazilmis kod versiyonlarini bir arada paketleyebilmesini saglayan Rosetta vb. gibi teknolojiler bunlara guzel bir ornek. Ancak bunlar henuz cok yeni ve yaygin degiller.



    teşekkürler...




  • Bu soru daha iyi yanıtlanamazdı sanırım..Teşekkürler..
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.