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...
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.
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.
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
< Bu mesaj bu kişi tarafından değiştirildi MK102 -- 18 Mart 2011; 9:26:55 >